📑 本页目录(点开跳转)
14 · 通往 Transformer
⏱ 24 分钟 | ⭐ 本教程的收口章
🎯 一句话
这一章不重新讲 Transformer(全景导论第 2 章已经讲透了), 而是把你这十三章学的所有零件,和 Transformer 里的每一个部件对上号—— 你会发现:它没有一个部件是全新的。
🧩 一、Transformer 的每个零件,你都学过
| Transformer 的部件 | 你在哪学的 | 本质是什么 |
|---|---|---|
| 注意力的 QK 点积 | 第 3 章线性模型 / 推荐算法第 5 章 | 就是点积算相关度 |
| 除以 √d_k | 第 9 章(数值稳定) | 防止点积过大导致 softmax 饱和 |
| 注意力权重的 softmax | 第 3 章逻辑回归 | 把分数变成和为 1 的权重 |
| 多头 | 第 12 章 CNN 的多个卷积核 | 并行多组,各抓一种模式 |
| FFN 前馈层 | 第 7 章 MLP | 线性 + 激活 + 线性 |
| 残差连接 | 第 12 章 ResNet | 梯度高速公路(那个 +I) |
| LayerNorm | 第 10 章正则化 | 稳定训练(不跨样本,所以 batch=1 也行) |
| 位置编码 | (新的) | 因为注意力本身没有顺序概念,得额外告诉它 |
| 因果掩码 | 第 13 章序列建模 | 不许偷看未来 |
| Dropout | 第 10 章 | 正则 |
| AdamW + Warmup + Cosine | 第 9 章 | 优化配置 |
| 交叉熵损失 | 第 3 章 | 猜下一个 token = 一个 V 类分类问题 |
🔑 只有「位置编码」是 Transformer 独有的新东西。 其余全部是你已经学过的零件,只是组合方式变了。
💡 注意力的一句话直觉
Attention(Q,K,V) = softmax(QKᵀ/√d)·V
↑ ↑ ↑
│ │ └─ 加权求和"取回来的信息"
│ └─ 算"我和每个位置有多相关"
└─ 把相关度变成和为 1 的权重
💡 人话:【一次可微分的、软的查表操作】
· Q = 我要查什么
· K = 每个位置的"索引"
· V = 每个位置的"内容"
🔗 和你学过的东西对上号: 这和推荐算法的双塔召回完全同构—— 用户向量(Q)和物品向量(K)点积算相关度,取 top-k。 区别只是:召回取 top-k 硬选,注意力用 softmax 软选(且可微)。
📐 为什么要除以 √d_k(想看再点)
假设 q、k 的每个分量独立、均值 0 方差 1,那么 $q\cdot k = \sum_{i=1}^{d}q_ik_i$ 的方差是 d。
d = 64 → 点积的标准差 ≈ 8
d = 512 → 点积的标准差 ≈ 22.6
→ softmax 的输入动辄几十
→ exp 之后差异被极度放大 → 几乎变成 one-hot
→ 【梯度趋近于 0】,训不动 💀
除以 $\sqrt{d}$ 让方差回到 1,softmax 就工作在健康区间。
💡 这和第 9 章说的"数值稳定"是同一类问题—— 深度学习里大量的"除以某个数"都是在控制方差。
⭐ 公式看懂了,接着手写一遍:附录 C 第 2 题是这段推导的代码版(含因果掩码),第 3 题把它扩成多头。 那里会告诉你一个只有动手才会碰到的坑:除的是 $\sqrt{d_k}$(每个头的维度)不是 $\sqrt{d_{model}}$——单头时两者相同, 多头时差 $\sqrt{h}$ 倍,形状全对、不报错、还能训,但数值是错的。
🔄 二、四代架构的核心权衡
| 对比维度 | MLP(第 7 章) | CNN(第 12 章) | RNN(第 13 章) |
|---|---|---|---|
| 归纳偏置 | 无(最通用) | 局部 + 平移 | 时序 + 马尔可夫 |
| 参数效率 | 差 | 好 | 好 |
| 并行 | ✅ | ✅ | ❌ 串行 |
| 长距离 | ✅ | ❌ 感受野有限 | ❌ 会遗忘 |
| 复杂度 | O(n) | O(n) | O(n) 时间 |
| 数据需求 | 中 | 中 | 中 |
💡 核心权衡:归纳偏置 vs 数据量
归纳偏置强(CNN/RNN):
✅ 小数据上表现好(先验帮了忙)
❌ 大数据上成为枷锁(先验限制了它)
归纳偏置弱(Transformer):
❌ 小数据上容易过拟合
✅ 大数据上能学到比人设计的先验更好的模式 ⭐
一组真实的数字(ViT 论文里的经典对比):
训练数据量 ResNet ViT
ImageNet(1.3M) 赢 ✅ 输
ImageNet-21k(14M) 持平 持平
JFT-300M(300M) 输 赢 ⭐ ← 拐点在这
⭐ 同样的模型,数据量决定了谁赢
🔑 这解释了深度学习史上一个反复出现的规律("苦涩的教训"): 当数据和算力足够时,「让模型自己学」总是赢过「人工设计的先验」。
CNN 的平移不变是人给的,ViT 让模型自己学 → 大数据上 ViT 赢。 RNN 的时序结构是人给的,Transformer 让模型自己学 → 大数据上 Transformer 赢。
⚠️ 但这条规律有个重要的但书:
"苦涩的教训"成立的前提是【数据和算力足够】
你的项目大概率不满足这个前提:
· 几万行表格数据 → 树模型仍然是王者
· 几百张图 → 预训练 CNN + 冻结主干 仍然最优
· 领域数据稀缺 → 归纳偏置是你的朋友,不是敌人 ⭐
⭐ 别把"大模型时代的结论"套到"你的小数据项目"上
🔗 这是 数学原理第 11 章 NFL 的直接推论: 算法的"专长"是守恒的。Transformer 把专长放在了"大数据"那一端。
🎓 三、位置编码:唯一的新东西
问题:注意力是「对所有位置加权求和」,打乱顺序结果完全一样——它天生不知道谁在前谁在后。
"狗咬人" 和 "人咬狗" 在纯注意力眼里是一样的 💀
💡 一个更准确的说法:注意力是置换等变(permutation equivariant)的—— 你打乱输入顺序,输出也只是跟着打乱,信息完全没变。
解法:把位置信息加进输入向量里。
| 方案 | 做法 | 优缺点 |
|---|---|---|
| 可学习位置嵌入 | 每个位置一个可训练向量(BERT) | 简单;但训练时最长 512,就永远只能 512 ❌ |
| 正弦位置编码 | 用不同频率的 sin/cos(原始 Transformer) | 理论上能外推,实际效果一般 |
| RoPE 旋转位置编码 ⭐ | 把位置编码成旋转,天然表达相对位置 | 可外推到更长序列,现在的主流。🔗 全景导论 02b 讲它为什么要「加在每一层的 Q/K 上」而不是像正弦编码那样只加在输入端——这一条决定了它能不能外推 |
| ALiBi | 直接给注意力分数加一个随距离递减的偏置 | 极简,外推性好 |
💡 为什么"相对位置"比"绝对位置"好
绝对位置:告诉模型"这是第 5 个词"
相对位置:告诉模型"这两个词隔了 3 个位置" ⭐
语言的规律大多是【相对】的:
· 形容词修饰紧跟其后的名词 ← 关心的是"紧跟",不是"在第几位"
· 代词指代前文某处 ← 关心的是"多远"
⭐ 所以相对位置编码泛化更好,也更容易外推到长序列
🔗 RoPE 的外推能力正是全景导论第 3 章说的"上下文窗口怎么撑到 100 万"的关键之一。
🧱 四、Transformer 之后:还在解同两个问题
Transformer 留下的两个大坑:
① O(n²) 复杂度 → 长序列吃不消
② 推理时 KV Cache 占显存 → 部署贵
| 方向 | 在解什么 | 代表 |
|---|---|---|
| 稀疏/线性注意力 | ① 把 O(n²) 降下来 | Longformer、Performer |
| 状态空间模型 | ①+② 兼得并行与线性复杂度 | Mamba ⭐("类 RNN 的复活") |
| MoE 混合专家 | 参数量大但计算量不变 | Mixtral、DeepSeek。🔗 全景导论 02d 讲为什么只替换 FFN 不替换注意力、Top-k 路由怎么选、显存要按总参数算而不是激活参数;路由的隐变量视角在数学原理第 13 章 |
| KV Cache 压缩 | ② 降低推理显存 | MQA / GQA |
💡 注意 Mamba 的意义:它本质上是 RNN 思想的回归—— RNN 输在并行,Mamba 用"可并行的扫描算法"补上了这个短板,同时保住了 O(n) 复杂度。 🔗 第 13 章讲的那两个硬伤,第二个正在被解决。
🗺️ 五、你现在的完整地图
🎯 六、学完这十四章,你能做什么
| 能力 | 对应章节 |
|---|---|
| 判断该用树模型还是神经网络 | 第 2、4、7 章 |
| 搭一个能训起来的神经网络 | 第 7–10 章 |
| 模型不 work 时能自己诊断 ⭐ | 第 11 章 |
| 不被虚假的高分骗到 ⭐ | 第 5 章 |
| 读懂 CNN / RNN / Transformer 的论文结构图 | 第 12–14 章 |
| 回头看推荐算法/Kaggle/全景导论,知道每个结论的根因 | 全部 |
👉 接下来往哪走
| 你想要 | 去哪 |
|---|---|
| 动手把这些变成手感 | 第 17 章实战项目 + 三个挑战项目 |
| 搞清楚"为什么" | 《机器学习的数学原理》 ⭐ |
| 深入一个完整领域 | 《推荐算法》 |
| 把手艺打磨到极致 | 《Kaggle 竞赛方法论》 |
| 前沿:大模型和智能体 | 《大模型全景导论》 → 《智能体工程教程》 |
✅ 检查点
- Transformer 里唯一"新"的部件是什么?其余的都对应你学过的什么?
- 注意力的一句话直觉是什么?它和推荐系统的双塔召回有什么关系?
- 为什么 QK 点积要除以 √d_k?不除会怎样?
- 归纳偏置强弱和数据量是什么关系?ViT vs ResNet 的拐点在哪?
- "苦涩的教训"的但书是什么?为什么你的项目可能不适用?
- 为什么注意力需要位置编码?"置换等变"是什么意思?
- 为什么相对位置编码比绝对位置编码好?
- Transformer 留下的两个大坑是什么?Mamba 在解哪个?
👀 答案
- 位置编码。其余:QK点积=线性模型的点积、softmax=逻辑回归、多头=CNN 的多个卷积核、FFN=MLP、残差=ResNet、LayerNorm=正则化、因果掩码=序列建模、交叉熵=第 3 章。
- 一次可微分的、软的查表操作(Q=要查什么,K=索引,V=内容)。和双塔召回完全同构——都是向量点积算相关度;区别是召回取 top-k 硬选,注意力用 softmax 软选且可微。
- 因为点积的方差是 d(d=512 时标准差 ≈22.6),softmax 输入过大会饱和成 one-hot,梯度趋近于 0 训不动。除以 √d 让方差回到 1。
- 偏置强(CNN/RNN)在小数据上好(先验帮忙),大数据上成枷锁;偏置弱(Transformer)小数据易过拟合,大数据上能学到更好的模式。拐点在 ImageNet-21k(14M) 附近——1.3M 时 ResNet 赢,300M 时 ViT 赢。
- 但书是「数据和算力足够」。你的项目大概率不满足:几万行表格 → 树模型仍是王者;几百张图 → 预训练+冻结更优。数据稀缺时归纳偏置是朋友不是敌人。
- 因为注意力是置换等变的——打乱输入顺序,输出也只是跟着打乱,信息完全没变,"狗咬人"和"人咬狗"一样。
- 因为语言的规律大多是相对的(形容词修饰紧跟其后的名词、代词指代前文多远处),关心的是距离不是绝对位次。所以泛化更好、更容易外推到长序列。
- ①O(n²) 复杂度 ②KV Cache 占显存。Mamba 主要解 ①(也帮 ②)——它是 RNN 思想的回归,用可并行的扫描算法补上 RNN 的并行短板,同时保住 O(n)。
🛑 可以停在这里
⚡ 走神救援
Transformer没有一个全新部件:QK点积=线性模型、softmax=逻辑回归、多头=CNN多卷积核、FFN=MLP、残差=ResNet、LayerNorm=正则、因果掩码=序列建模,只有位置编码是新的。注意力=可微的软查表(Q要查什么/K索引/V内容),和推荐的双塔召回同构,区别只是软选vs硬选。除以√d_k 是因为点积方差=d,不除 softmax 会饱和成 one-hot、梯度趋 0。核心权衡:归纳偏置 vs 数据量——偏置强(CNN/RNN)小数据好大数据成枷锁,偏置弱(Transformer)反之;ViT vs ResNet 的拐点在 14M 数据附近。规律:"数据算力足够时让模型自己学总赢过人工先验",⚠️但书:你的小数据项目大概率不满足这个前提——数据稀缺时归纳偏置是朋友。位置编码:注意力是置换等变的所以必须补位置;相对位置(RoPE)比绝对位置好,因为语言规律大多是相对的,也因此能外推撑起长上下文。Transformer 留下两坑:O(n²) 和 KV Cache 显存——Mamba 是 RNN 思想的回归,用可并行扫描补上 RNN 的并行短板。
下一节 👉 15-PyTorch实战手册.md