📑 本页目录(点开跳转)
主线 2 · 模型怎样看懂一句话
⏱ 12 分钟 | ⭐ 主线第二站
🎯 一句话
Transformer 的一层只反复做两件事:先看别人,决定谁和我有关;再自己加工,把得到的信息变得更有用。 堆很多层以后,每个 token 的向量就带上了整句话的语境。
先看注意力解决什么问题
读“猫没抓到老鼠,因为它跑得太快”时,“它”到底指谁?只看“它”自己没有答案;要回头看“跑得太快”与“没抓到”这些线索。
注意力做的正是这件事:当前 token 对句中所有可见 token 打分,把更相关的信息拿得更多。 这里的“注意力”不是人类意识,而是一种可学习的加权取信息方法。
Q、K、V:不是三个神秘新概念
同一个 token 向量会被三套不同的线性变换投影成 Q、K、V。可以暂时这样理解:
| 名字 | 人话角色 | 在“它”这个例子里的问题 |
|---|---|---|
| Q(Query) | 当前 token 想找什么 | “我是代词,我可能指谁?” |
| K(Key) | 每个 token 可以被怎样匹配 | “我是名词、动作还是线索?” |
| V(Value) | 真正被取走的内容 | “如果你关注我,我能提供什么信息?” |
“它”的 Q 会分别和所有可见 token 的 K 打分。打分大,说明这次更值得关注;Softmax 再把一组分数变成总和为 1 的权重。最后不是直接复制“老鼠”,而是按权重把所有 token 的 V 混合起来,所以“它”的新向量会同时带上“老鼠”“逃跑”“太快”等线索。
想知道公式在说什么?
常见写法是 softmax(QKᵀ / √d) V。QKᵀ 是“当前 token 和每个候选 token 的匹配分数”;除以 √d 是避免维度大时分数过于极端;Softmax 把分数变成比例;最后乘 V 就是按比例取信息。公式没有额外魔法,正是上面四步的压缩写法。
一层里另外两个零件
- FFN(前馈网络):注意力结束后,每个 token 单独再想一想。它不负责 token 之间交流,却是参数量的大头。
- 残差连接:把旧信息直接加回新信息。这样一层没学好也不会把原意毁掉,几十层才能稳定叠起来。
- 归一化:把数字尺度控制在合理范围,防止训练时某些层的数值失控。现代模型会把它放在更早的位置,专题 A 会讲。
多头不是“多个人格”
一次注意力只是一种看关系的角度。多头注意力相当于同时开几条小通道:有的更容易学到指代,有的可能更关注句法或远距离线索。人不会给每个头分配任务;它们从数据里自己学出来。
多头的价值不是“多算几遍取平均”,而是让模型能在同一层里同时保留几种关系。随后它们的结果会拼回去再混合。某一个头不必永远负责一种清晰的人类概念;真正有用的语义往往分散在许多头和许多层里。
✅ 检查点
- 注意力回答的是“我现在该从谁那里拿信息”。
- FFN 回答的是“拿到后,我这个 token 自己该怎样加工”。
- 一层 Transformer = 交流一次 + 加工一次 + 保留原信息。
点开核对
注意力横向地从其他 token 取信息;FFN 纵向地加工当前 token;残差把旧信息直接保留下来,三者一起让层能叠得很深。
🔗 想再深一层,去哪一套
| 去哪 | 为什么 |
|---|---|
| ML 基础 14 · 通往 Transformer | 这一页把注意力讲成「该从谁那里拿信息」;那一章把它写成矩阵乘法和 Softmax,从 RNN 一步步推过来 |
| ML 基础 附录C · 手撕代码速查 | ⭐ 想动手:第 2、3 题用纯 numpy 写缩放点积注意力和多头注意力,一段一段能跑 |
| AI 基础设施 08 · FlashAttention | 序列一长,那个 n×n 的中间矩阵就写不回显存 —— 工程上是怎么绕开的 |
🛑 可以停在这里
你已经掌握了理解后续章节必需的骨架。Q/K/V 的矩阵乘法、Softmax、头维度属于第二遍再学的内容。
⚡ 走神救援
Transformer 不会一次“看懂整句”。它让每个 token 反复向其他 token 取信息,再更新自己的向量。下一页看:生成时为什么它不能偷看后面的答案。