← 返回首页
notes.html

📖 学习札记 · 彩蛋

正课之外的边角料:它从哪儿来、为什么长这样、当年那帮人后来去哪了。 不影响主线,但知道了会让你对着代码会心一笑。

彩蛋 01 · 前世今生

Transformer 的前世今生:一篇翻译论文,怎么变成全 AI 的地基

—— 你学的这条线(bigram → 注意力 → GPT)到底打哪儿来。

它本来只是想把翻译做快一点

2017 年,Google 一帮人发了篇 《Attention Is All You Need》。 当时的痛点很"工程":做翻译用的 RNN/LSTM 必须一个词一个词顺着算 —— 慢、没法并行、还记不住长句。他们想要个能并行、又能抓长距离的东西。

注意力机制本身 2014 年就有人用了。他们真正"狠"的一招是: 干脆把循环结构整个删掉,只留注意力 —— 论文标题 Attention Is All You Need(你只需要注意力)还带着点调皮的炫耀。 实验跑的就是英→德、英→法翻译,压根没想着"统一全 AI"。

🎯 会心一笑点:你在 02_attention.py 里写的那个"只看过去、不许偷看未来"的因果掩码, 正是这篇论文为了"预测下一个词"埋下的种子;而你 Step 2 那"一次矩阵乘法搞定一整句", 就是它取代 RNN"逐词顺算"的并行威力。

署名 8 个人,后来几乎全部"飞升"

论文署名 8 位作者,全在 Google,还特意加了个著名脚注:"贡献均等,排名随机"。 如今这 8 人几乎个个开公司或进顶级团队 —— AI 圈最豪华的一次"师门散叶":

作者后来去了哪(大致)
Ashish Vaswani创办 Adept → 再创 Essential AI
Noam Shazeer ★创办 Character.AI → 2024 被 Google 重金请回,联合领导 Gemini
Niki ParmarAdept → Essential AI(和 Vaswani 一路)
Jakob Uszkoreit创办 Inceptive(用 AI 设计 mRNA / 生物药)
Llion Jones创办 Sakana AI(东京)
Aidan N. GomezCohere CEO(头部大模型公司;当年他还是实习生)
Łukasz Kaiser进 OpenAI(做推理模型 o 系列那条线)
Illia Polosukhin创办 NEAR Protocol(区块链)

光这 8 人后来创立/主导的公司,估值加起来好几百亿美金,方向还五花八门:大模型、生物、区块链、日本 AI……

无心插柳,还是本该如此?——两个都沾边

无心插柳的一半:他们解的是个很具体的"翻译提速"问题,没预见它会变成全 AI 的地基 —— 连作者后来都公开说"没想到能到这规模"。真正引爆威力的,是后来 GPT 把它往大了 scale。

本该如此的一半:这也不是瞎猫碰死耗子。他们是一线顶尖研究员,踩在一个真实的核心瓶颈上 (并行 + 长距离依赖),给的答案又足够干净通用 —— 好的抽象往往如此:为翻译而造,却能解一切。 所以那句"活该他们当大牛",算实至名归。

一张家谱:你学的是哪一栋楼

关键一句:Transformer 是架构(地基);BERT 和 GPT 是盖在上面的两栋楼。 不是"Transformer vs BERT" —— BERT 的全名里就带着 Transformer。

🏛 理解楼 · BERT 系

2018, Google. 用 Transformer 编码器那半边;完形填空式训练(能看左右两边)。 擅长理解 / 搜索 / 打标签,不擅长生成。2018–2021 统治 NLP,Google 搜索就用它。 百度 文心 ERNIE 1.0(2019)也站这栋(知识增强的编码器)。

🏗 生成楼 · GPT 系

2018, OpenAI. 用 Transformer 解码器那半边;预测下一个词(只看过去,带因果掩码)。 擅长生成 / 续写 / 对话。ChatGPT 这波爆发就在这栋 —— 也是你这套教程走的路线 (bigram → 注意力,一直在强调"只看过去")。
🧩 连 Diffusion 都来借它:扩散是"怎么生成"的配方,Transformer 是"用什么网络干活"的骨架, 两者本是正交的两层。早期 Diffusion 配卷积(U-Net),如今主流配 Transformer(DiT)—— 强到别的范式都来拿它当钢筋,这就是它为什么是这个时代的地基。
彩蛋 02 · 真实训练日志

别人的训练日志:12.75T token 那一年,到底出过什么岔子

—— 你在第 6 章看到的 loss 曲线是一条平滑的余弦。真实的大规模训练不长这样。

先对一下量级

本仓库(第 6 章)Marin 8B
参数量124M8B(约 65 倍)
训练数据FineWeb-Edu 10B token12.75T token(约 1275 倍)
硬件单卡 RTX 4090TPU v5e-256 ×2 起步,中途换到 v4-2048
训练过程19073 步,一条余弦退火跑到底五个阶段:中途换数据、换硬件、把学习率降下去又烧回来

数据量差着 1000 倍,零件却是同一套:你手搓过的 RoPE、 AdamW、 warmup + 退火,在 8B 上一个不多一个不少。差别在于:规模一上来, 每个零件都会以小模型上看不到的方式出问题。

日志里才有、教程不写的三件事

① 位置编码的配置默默错了很久。训练跑出去一大截之后才发现,用的还是 Llama 2 那一版的旋转位置编码设置, 中途才换成 Llama 3 式。你在第 12 章能一键开关的那个零件,在真实项目里是个会静默错下去的配置项: loss 照常下降,不会有任何报错提醒你。

② 学习率降到很低,loss 反而开始往上爬。退火阶段本该是最稳的时候,训练 loss 却慢慢抬头。 查下去,原因是输出层 lm_head 的权重范数在膨胀,加了一项系数 1e-4 的 z-loss 才压住。 "学习率越小越安全"这个直觉在这里不成立。

③ 换硬件之后学习率怎么跟着改。batch size 变大 k 倍,学习率乘 √k。 这是那种不会写进任何教程、但每次扩机器都要用一次的经验公式。

真实预训练是分阶段的,不是填好超参按回车

它们给每个阶段起了动物名,一条曲线被切成五段:

本仓库那组"300M vs 10B、唯一变量是数据量"的对照,在这里被拉长成一年:数据配方、学习率、批大小、硬件, 全都是跑的过程中改的。看完这份日志再回头看自己那条平滑的余弦曲线,你会知道它平滑是因为规模小, 不是因为训练本该如此。

🔭 这份日志出自哪:Marin,2024 年在斯坦福发起、现由 Open Athena 主导的开放训练项目, 把代码、权重、数据来源和实验记录(包括没跑通的方向)全部公开,目前在训一个 535B 的 MoE (激活参数 23B,18T token)。 它用 JAX + TPU,不是本仓库的 PyTorch,所以值得看的是过程,不是代码。
彩蛋 03 · 拆两颗新模型

两颗 2026 年的模型,拆开对照本仓库第几章

Qwen3.8-Flash-Next(2026-08-26 发布)与 DeepSeek-V4-Flash(2026 preview 报告)。每个零件标出出处,再标出本仓库哪一章讲过它。

零件对照表

两颗都是 MoE, 表里逐行列出 MoE 之外的注意力、记忆表、残差、优化器等零件。灰色小字是出处:「报告」指各自的技术报告,「HF 卡」指 Hugging Face 模型卡。

零件Qwen3.8-Flash-NextDeepSeek-V4-Flash本仓库
MoE 专家配置 总参 125B,每 token 激活 6B 报告
512 个专家,每 token 选 10 个,另有 1 个共享专家 config.json
总参 284B,激活 13B;256 个 routed 专家 + 1 个共享专家,每 token 选 6 个;前 3 个 MoE 层用 Hash routing 报告 §4.2.1 第 11 章 · MoE
路由器 + top-k;共享专家在该页折叠段
注意力 48 层 = 12 × (3 层 Gated DeltaNet + 1 层 QSA),每层后接 MoE HF 卡
QSA 在持续预训练阶段替换原来的全注意力层:key 每 r=4 个 token 平均池化成一块,每个 query 在 K=2048 token 预算内选最多 512 块;索引器是 MQA,4 个 query 头共享 1 个 key 头 报告 §2.1.2
CSA:每 m=4 个 token 的 KV 压成一条,再做 DeepSeek Sparse Attention,Flash 的 top-k=512;HCA:每 m′=128 个 token 压成一条,对压缩条目做稠密注意力;另有 128 token 滑窗和 attention sink 报告 §2.3、§4.2.1
Flash 前两层只用滑窗,之后 CSA / HCA 交替 config.json
索引器注意力用 FP4 计算 报告 §2.3;KV 中带 RoPE 的维度存 BF16,其余维度存 FP8 报告
第 13 章 · 线性注意力(Gated DeltaNet、3:1 混合)
第 14 章 · 稀疏注意力(NSA / DSA / CSA / QSA)
第 12 章(MQA 是 GQA 的极端情况;RoPE)
第 17 章 · 量化(FP4 / FP8)
额外记忆表 N-gram Embedding,只有 1 层,放在第 2 层;以每个 token 结尾的 bigram / trigram 作 key 查表;表参数 51B,放在主机内存,异步预取 报告摘要、§2.3;HF 卡 V4 报告全文没有出现 Engram 或 n-gram 记忆表;前 3 个 MoE 层用的 Hash routing 是专家路由方式,与记忆表是两回事 报告 §4.2.1 第 15 章 · N-gram 查表
多 token 预测 附带 4B 参数的 MTP 模块 HF 卡 MTP depth = 1 报告 §4.2.1 第 16 章 · MTP 与投机解码
残差 Gated Residual:残差流拓宽成 4 支,读出走逐元素门控,去掉分支混合矩阵 Hres;Tab.5 与 mHC 静态、动态两版做了对照 报告 mHC,nhc = 4,tmax = 20 报告 §4.2.1
mHC 用 Sinkhorn-Knopp 迭代 20 次,把 Hres 投影成双随机矩阵(非负,行和、列和都为 1) mHC §4.1–4.2
本仓库未手搓
本仓库用的是单支 残差 x + 子层(x),见 第 3 章
优化器 Muon:注意力 q/k/v/o、GDN 输入输出投影、专家 fc1/fc2、n-gram 层 k/v 投影
AdamW:输入 embedding、输出头、router、GR 低秩投影;n-gram 表用 Adam,不加 weight decay
Newton-Schulz 8 步 报告 §3.1
Muon:大多数参数;AdamW:embedding、预测头、RMSNorm 权重
Newton-Schulz 共 10 次:前 8 次系数 (3.4445, −4.7750, 2.0315),后 2 次 (2, −1.5, 0.5) 报告 §2.4、§4.2.2
本仓库未手搓
Muon 全称 MomentUm Orthogonalized by Newton-Schulz:用 Newton-Schulz 迭代把动量矩阵近似正交化后再更新。本仓库只用 AdamW,见 第 6 章
上下文 报告在 1M 上下文下测 QSA:kernel 级 prefill 7.6×、decode 4.9× 报告 §2.1.2
max_position_embeddings = 262,144 config.json
1M 报告摘要
同报告:V4-Pro 单 token 推理 FLOPs 为 V3.2 的 27%,KV cache 为 V3.2 的 10%
第 5 章(KV-cache 的来历)
第 13、14 章(长上下文下的注意力代价)

表里的 QSA 层在 config.json 里是 24 个 query 头配 2 个 KV 头(head_dim 256), 也就是第 12 章的 GQA。

两家都把「每 token 算多少」和「一共存多少」分开了

第一层拆分是 MoE,两家相同。Qwen3.8-Flash-Next 每 token 激活 6B / 125B,约 4.8%; DeepSeek-V4-Flash 激活 13B / 284B,约 4.6%。没被选中的专家仍占存储,只是不参与这个 token 的计算。

Qwen 另外把一部分参数挪出加速器,并减少全注意力层。51B 的 n-gram 表放在主机内存,每个 token 只按自己结尾的短 n-gram 取表项。 报告 Tab.8 在固定总参数下扫分配比例:n-gram 占 25% 时 loss 最低,下游指标没有随之改善。 注意力这边,48 层里 36 层是 Gated DeltaNet,状态矩阵的形状固定,不随上下文变长; 剩下 12 层 QSA 每个 query 最多看 2048 个 token。

DeepSeek 没有挂记忆表,压缩做在 KV 上。每层都保留注意力,但 CSA 把 4 个 token 的 KV 合成 1 条、HCA 把 128 个合成 1 条, CSA 再只取 top-512;位宽方面,索引器用 FP4,KV 里不带 RoPE 的维度用 FP8。 报告给出的 Pro 版对比是 KV cache 为 V3.2 的 10%。 DeepSeek 在 Engram 论文里做过 n-gram 记忆表(Engram-27B 插在第 2、15 层),V4 报告里没有出现这个模块。

📚 出处:表中「报告」对 Qwen 指其技术报告 On the Design of Qwen3.8-Next Architecture, 对 DeepSeek 指 V4 报告(arXiv 2606.19348,2026 preview 版本);节号、表号取自原文。 第 13–17 章页面讲这些零件的机制。