序章:为什么是 Transformer + 预测下一个词
主线定位
这门课要从零搭出一条完整的流水线:一句人类文字进去,每个位置出来一个「下一个 token 的概率」。序章还没学任何一个环节,所以整条都是灰的——先看全貌。
点任一已学环节,看这一步的输入 → 输出形状、参数量,以及它解决了什么问题(数字取自 Qwen/Qwen3.8-27B 真实 config)。
贯穿全课的例句是「小明 把 苹果 给了 小王」。对这条流水线来说,它就是一串「下一个词」:读到「小明 把 苹果 给了」,要给「小王」一个尽量高的概率。序章不拆任何一个零件,只回答两个「为什么」:
- 上游 · 深度学习地基(可选):loss 是什么、梯度怎么算、离散的词怎么变成向量。没学过也能读本章,遇到时回查即可。
- 本章:终点为什么是「下一个 token 的概率」——它能用文字自己当标签来训练,开局还有一个能核对的标准值 ln V(L1、L5);中间的混合器为什么是注意力——它之前的每一代,计数、RNN、定长向量的 seq2seq,都在一个具体数字上失败了(L1 到 L4)。数字取自锚点模型 Qwen/Qwen3.8-27B 的真实 config。
- 下游 · C1 文字怎么变成数字:例句里的「词」在模型眼里其实是 token;C1 还会兑现 L1 留下的「小明和小王像不像」。再往后,C2 回答「删掉循环以后怎么知道词序」,C3 把 L3、L4 的注意力拆到每一个矩阵。
本章问题链
每一课只回答一个问题;上一代在哪个数字上失败,就逼出下一课的问题。
| 课 | 这一课的问题 | 朴素方案在哪个真数字上失败 | 一句话 |
|---|---|---|---|
| 第 1 课 | 下一个词的概率怎么算? | 数数:「小王 → 喜欢」没见过,P = 0,loss = ∞ | 语言模型只给下一个词一个概率;数数能算,但没见过就是 0 |
| 第 2 课 | 怎么记住任意长的历史? | 加大窗口:锚点词表下看前 4 个词就要 9.44×10²⁶ 格;RNN 的梯度 0.9100 = 2.66×10−5 | 固定状态能记任意长,梯度却每往回一步乘一次 |
| 岔路 | 为什么 2026 年「固定状态」又回来了? | 64 层全用注意力,262,144 个 token 的 KV 要 64 GiB | KV 随长度线性涨,固定状态不涨但有容量上限,于是 3:1 混合 |
| 第 3 课 | 输入一句、输出一句,长句为什么丢? | 整句压进一个定长向量:RNNencdec-50 全测试集 BLEU 17.82 | 注意力让解码的每一步都回看所有编码状态(26.75) |
| 第 4 课 | 只留注意力,行不行? | RNN + 注意力:循环层串行 O(n),锚点原生长度下要走 262,144 步 | 删掉循环换来并行与一步可达,代价 N×N 的分数矩阵 |
| 第 5 课 | 没有标注怎么学?怎么知道学得好不好? | 逐任务标注:一个英译法模型要 1,200 万句对 | 标签是文本自己的下一个词;开局 loss ≈ ln V = 12.42 |
演进地图
每一代死在哪个数字上;每一课的开头都会复用这张图,高亮本课所在的那一代。
三层交互
| 层 | 本章里的组件 | 在哪一课 |
|---|---|---|
| 概念动画 | 演进地图;「错开一位」看标签从哪来;梯度逐格回传(序列条着色) | 各课开头、第 5 课、第 2 课 |
| 算法模拟器(真算法、小数据) | bigram 实验台(真计数、平滑、规模面板);标量 RNN 前向 + 梯度连乘 + LSTM 细胞通路;定长向量 vs 保留全部 + 注意力;固定状态的容量上限 | 第 1、2、3 课与岔路 |
| 真模型 / 真数据 | 锚点 config 现算的 N² 显存账本、KV cache 与 GDN 固定状态账本;我们自己语料上的 bigram 零概率;我们自己模型的开局 loss、基线阶梯与验证曲线回放(c0-prologue.json,由 04-实践项目/experiments/exp_c0_prologue.py 导出) | 第 4 课、岔路、第 1 课、第 5 课 |
项目推进:训练目标与第一块仪表
对应 04-实践项目/MILESTONES.md 的「C0 序章」。分工照旧:代码 AI 来写,决策你来做。取批函数(y = x 右移一位)已经写好,基线已经跑完 400 步;本章组件读取的 c0-prologue.json 直接从基线日志和切好的数据导出,不需要新训练。
你要拍板的三件事
- 训练目标选什么?「下一个 token 的交叉熵」:标签免费、开局有标准值、一次前向并行算完所有位置(第 5 课)。对照方案 BERT 式的「遮住中间的词」不能直接从左到右生成。
- 验证集怎么切?按段落切出语料末尾的一段、不打乱(项目
minillm/data.py的做法)。理由:验证集应该是「没见过的后文」;打乱会让验证集与训练集共享相邻段落,loss 偏乐观。 - 拿什么判断「学到了」?一条基线阶梯:均匀瞎猜(ln V)→ 只看词频的 unigram → 第 1 课的 bigram 加 k 平滑。单看 loss 往下走说明不了什么。
验收标准(全部可测):
- 取批函数返回的 y 恰好是 x 右移一位:随机取一批,逐位比较 y[:, t] 与 x[:, t+1]。
- 第 0 步的验证 loss 与 ln V 相差小于 0.1:第 5 课实验台 ③ 读项目日志现算,并在同一处显示初始化时 logit 的实测标准差。
- 训练结束的验证 loss 低于同一验证集上 bigram 加 k 平滑的最好结果:第 5 课实验台 ③ 的基线阶梯。
坑与带走
| 坑 | 症状 | 后果 | 怎么办 |
|---|---|---|---|
| 以为语料够大就不会有零概率 | 验证集上计数模型的 loss = ∞ | 计数模型在真实文本上不可用 | 平滑只能止血;锚点词表下 trigram 有 1.53×10¹⁶ 格,连 36T token 也只能填 0.235%(第 1 课) |
| 以为平滑之后问题就解决了 | 没见过的组合拿到完全相同的概率 | 「小王 喜欢」和「小王 学习」分不出高下 | 让相似的词共享统计:词向量(C1 兑现) |
| 以为 RNN 能记住任意长的历史 | 长距离依赖怎么训都学不会 | 早期的词拿不到训练信号 | 看梯度连乘:0.9100 = 2.66×10−5(第 2 课) |
| 以为循环权重大于 1 就一定爆炸 | 调大权重后梯度照样消失 | 误判原因、调错方向 | 状态进入 tanh 饱和区时,真实因子小于 1(第 2 课实验台) |
| 以为 LSTM 解决了长依赖 | 很长的序列上仍学不好,训练仍慢 | 高估 LSTM | 细胞通路仍是遗忘门连乘,仍然串行;遗忘门是 2000 年加的(第 2 课) |
| 以为固定状态层省了参数、等于旧 RNN | 读不懂 Qwen3.8 的 48 层 GDN | 误读架构 | 它省的是随长度增长的记忆,训练能沿序列并行(岔路) |
| 以为固定状态什么都记得住 | 长文里精确找回某个细节失败 | 高估线性注意力 | d×d 的状态最多无干扰地装 d 对,所以保留 1/4 的注意力层(岔路) |
| 以为 seq2seq 一遇长句就崩,或定长向量加大就行 | 把倒序、大状态的效果当反例或当解药 | 两头都错 | 瓶颈是猜想 + 实验;容量随 d 线性,注意力让记忆随输入增长(第 3 课) |
| 把注意力、自注意力归给 Transformer | 报告里出处写错 | 「对我新」当成「对领域新」 | 注意力出自 Bahdanau 2014;Transformer 的新意是完全不用循环与卷积(第 3、4 课) |
| 以为 Transformer 是被证明的最优结构 | 把每个设计当定理 | 不会评估新架构 | 每条结论标证据等级(第 4 课) |
| 以为 N² 的开销来自 head_dim | 以为缩小 head_dim 就能省显存 | 优化方向错 | 分数矩阵 N×N 与 head_dim 无关(第 4 课计算器) |
| 以为预训练 + 微调是 GPT-1 首创 | 出处写错 | 误读历史 | 首见 Dai & Le 2015(第 5 课) |
| 不看开局 loss | 初始化太大、标签没错开、掩码写错,很晚才发现 | 白跑一次训练 | 第 0 步核对 ln V,差值小于 0.1(第 5 课、项目 M0) |
| 只拿困惑度选模型 | 困惑度低的模型生成反而不好 | 选错模型 | 困惑度只量平均把握(第 5 课);C14 第 3 课给证据 |
这一章你应该带走的(各课「一句话」):
- 语言模型只做一件事:给下一个词一个概率。数数能算出它,但没见过的组合概率为 0,loss 就是无穷大。
- RNN 用一个固定大小的状态记住任意长的历史;但梯度每往回一步都要乘一次,0.9 乘 100 次只剩 2.66×10⁻⁵。
- KV cache 随长度线性增长,固定状态不增长但有容量上限——所以 2026 年的模型把两者按 3:1 混着用。
- 把整句压进一个定长向量,句子越长丢得越多;注意力让解码的每一步都回头看所有编码状态。
- Transformer 删掉了循环,换来整句并行和任意两词一步可达;代价是 N×N 的分数矩阵。
- 预训练的标签就是文本自己的下一个词;还没训练时的 loss 应该约等于 ln V。
深入这一章
每条都实际打开核对过(2026-09-26):写清它讲清了什么、对应哪一课、为什么推荐。
🎮 想更直观 10–30 分钟
🔬 想吃透原理 1–3 小时
📄 想读原文 按需
🔍 各课引用的其他原文
第 1 课:Shannon 1948 原文 PDF(§3 词级近似);Kneser & Ney 1995 DOI。第 2 课:Bengio, Simard, Frasconi 1994 DOI(付费墙);Hochreiter & Schmidhuber 1997 PDF;Gers, Schmidhuber, Cummins 2000 DOI(付费墙);Mikolov et al. 2010 PDF;Pascanu et al. 2012 arXiv 1211.5063。
第 3 课:Cho et al. 2014b arXiv 1409.1259。
第 5 课:Dai & Le 2015 arXiv 1511.01432;GPT-2 本地 PDF;GPT-3 本地 PDF。
岔路:Katharopoulos et al. 2020 arXiv 2006.16236;Gated DeltaNet arXiv 2412.06464;Kimi Linear arXiv 2510.26692;Mamba arXiv 2312.00752。
排除了什么(也是筛选标准):① 只给「Transformer 能并行,所以取代了 RNN」一句结论的科普文与对比速查表——没有机制,也不提 N² 的代价,第 4 课把两面都算了出来;② B 站「保姆级 / 全 N 集 / 2026 最新」类无授权合集(可视化调研 V2 §8 列过具体编号)——授权不明、标题党,本章优先原作者官方账号,第三方字幕搬运在条目里写明;③ exploRNN、LSTMVis、rnnExplainer——调研核实时不可达或只剩空壳页面;④ 各种「梯度消失可视化器」小工具——同质化、没有作者背书,第 2 课的实验台用真前向计算覆盖了它们;⑤ 把 Transformer 说成「被证明最优」、把注意力归给 Transformer、把「预训练 + 微调」归给 GPT-1 的文章——出处错,会把本章纠正的误解重新种回去。