只留注意力,行不行?
本课一问:只留注意力,行不行? 上一课的翻译模型里,注意力负责从原文任意位置取信息,RNN 负责一步一步地传状态。把 RNN 整个删掉,模型还能工作吗?
这一课先不碰:Q、K、V 为什么是三份、多头是什么(C3);没有循环以后怎么知道词序(C2);FFN、残差、归一化各自在做什么(C4);每层计算量谁更省的真实计数(C3 的岔路)。
从已有出发
贯穿例句的 5 个词「小明 把 苹果 给了 小王」,在 RNN + 注意力里要一个接一个编码:算「小王」的状态之前,必须先算完前面 4 个。这一课要让这 5 个位置同时算。
L3 的注意力让「取信息」不再依赖状态传递;但编码器仍要从 h1 算到 hT,每一步都要等上一步。流水线里的「解码层」,就是这一课删掉循环以后剩下的东西:
先自己设计:RNN + 注意力,取信息已经不靠状态了
- ① 朴素方案
- ② 它在哪失败
- ③ 改进方案
编码器读到第 t 个词时,要先有 ht−1;这条依赖链贯穿整个序列,GPU 上成千上万个核心在这一维上只能排队。
| 层的类型 | 最少串行操作 | 最长路径 |
|---|---|---|
| 循环层 | O(n) | O(n) |
(出自 Vaswani et al. 2017 Table 1。)
每一层对所有位置同时做自注意力:每个位置用自己的查询给全部位置打分、加权取回。整层就是几次矩阵乘,和序列长度无关的串行步数;任意两个位置之间,一层之内一步可达。
| 层的类型 | 最少串行操作 | 最长路径 |
|---|---|---|
| 自注意力层 | O(1) | O(1) |
原文的 big 模型在 8 张 P100 上训练 3.5 天,WMT’14 英德 BLEU 28.4,当时的最好成绩 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条§6.1 与 Table 2;英法任务正文写 41.0、摘要与表格写 41.8,原文自身不一致,这里只引英德。 出处Vaswani et al. 2017 · 本地 PDF(arXiv 1706.03762v7) ↗ 。
这一层由什么组成。 原版 Transformer 的每一层是两个子层叠起来:多头自注意力(每个位置从所有位置取信息)和逐位置的前馈网络 FFN(每个位置各自做一次非线性加工),每个子层外面套一个残差连接和一个层归一化。因为注意力本身不看顺序,输入端还要加上位置编码。原文是翻译用的编码器-解码器;GPT 系列只用了解码器那一半(下一课)。
常见误解:「Transformer 发明了自注意力。」 原文 §2 自己列出了更早用自注意力做阅读理解、摘要、文本蕴含、句子表示的工作(例如 Cheng, Dong & Lapata 2016,arXiv 1601.06733)。它声称的新意是:第一个完全依靠自注意力、不用循环也不用卷积的序列转换模型 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条原文:「据我们所知,Transformer 是第一个完全依靠自注意力计算输入和输出表示的转换模型」。 出处Vaswani et al. 2017 §2 ↗ 。注意力本身出自 L3 的 Bahdanau 2014。
改进:删掉循环,换来什么、付出什么
换来的两样东西都在 Table 1 里。 串行步数从 O(n) 变成 O(1):训练时整段序列在一次前向里算完,这是后来能把模型和数据一起放大几个数量级的前提。最长路径从 O(n) 变成 O(1):第 1 个词到第 n 个词之间不再隔着 n−1 次状态传递,L2 那种沿时间的梯度连乘没有了。
要付的账也在 Table 1 里:每层 O(n²·d)。 自注意力要给每一对位置打一个分,n 个位置就是 n×n 个分数。看一个头的打分,形状全部取自锚点 config:
| 维度 | 含义 | 真实规模 | 小规模 |
|---|---|---|---|
| N | 序列长度(token 数);真实规模取 131,072 | 131,072 | 6 |
| dk | 单头维度(锚点 head_dim) | 256 | 4 |
常见误解:「N² 的开销来自 head_dim 太大。」 上图里 dk 在矩阵乘中被收缩掉了,分数矩阵是 N×N,与 head_dim 无关。head_dim 影响的是算这张表要多少次乘加(每个分数 dk 次),以及 Q、K、V 本身多大(随 N 线性)。
按 BF16(每个数 2 字节)算,锚点模型原生上下文 262,144 个 token 时,一个头、一层的分数矩阵就是 128 GiB;下面的计算器可以拖到任意长度。这笔账后来被两条路分别处理:不把整张表写出来(FlashAttention 分块计算,C9 兑现)——但 N² 次乘加省不掉;以及让大多数层根本没有这张表(锚点模型 64 层里只有 16 层是全注意力,另外 48 层是固定状态,见岔路 B1,C11 兑现)。
常见误解:「Transformer 是被证明出来的最优结构。」 没有这样的证明。原文用直觉(路径短、可并行)和数学性质(点积注意力一次矩阵乘就能算完)选了方向,再用翻译实验和消融(Table 3 里改头数、改维度、换位置编码)定下细节。注意力、多头、残差、归一化、后来的 RMSNorm、SwiGLU、RoPE、GQA,都是理论直觉、数学性质、工程经验和大量实验共同选出来的——这也是这门课每个结论都标证据等级的原因。
2026 年的现代做法。 主干仍是 Transformer,只是换了很多零件:只用解码器;LayerNorm 换成 RMSNorm 并挪到子层之前;FFN 换成 SwiGLU;位置编码换成 RoPE;K、V 头变少(GQA)。Qwen3 的技术报告把这组组合写得很明白(GQA、SwiGLU、RoPE、RMSNorm、pre-norm;arXiv 2505.09388 §2)。锚点 Qwen3.8 在此之上又把 3/4 的层换成了线性注意力。这些零件逐个在 C2-C4、C11 里被「逼出来」。
RNN 的串行到底有多慢? 本课只引用 Table 1 的量级。用锚点模型的维度把「循环层串行步数 vs 注意力一次矩阵乘」「每层计算量谁更省(交叉点在 n = d)」真算一遍,见 C3 的岔路课 为什么不用 RNN?。
极小真数字:拖动 N,看 N² 怎么吃掉显存
试三件事: ① 点 131,072:一个头、一层的分数矩阵 32 GiB,比较一下「整个模型的权重」那张卡片。 ② 把 N 往右拖一格(×2):红色卡片 ×4,蓝色的 K+V 只 ×2——双对数图上一条斜率 2、一条斜率 1。 ③ 找图上的标注:N 到多少时,一个头一层的分数矩阵就和整个 27.8B 模型一样大。
🔍 为什么原文觉得 N² 不是问题
原文 §4 算过这笔账:自注意力每层 O(n²·d),循环层 O(n·d²),当序列长度 n 小于表示维度 d 时,自注意力反而更省——原文的判断是,这在当时机器翻译常用的句子表示里是大多数情况(模型维度 base 512、big 1024)。今天锚点模型的原生上下文是 262,144 个 token,远大于它的 hidden size 5,120,账就反过来了。证据三问
| 问 | 本课的回答(以 Transformer 为例) |
|---|---|
| ① 它解决什么问题? | RNN 必须沿序列串行,远距离要穿过很多步 |
| ② 数学上为什么可能有效? | 删掉循环后,每层几次矩阵乘覆盖所有位置对,串行步数与路径长度都是 O(1) 证据等级 · 数学可证明 在写明的前提下可以严格推导出来,不依赖实验。只要前提成立,换数据、换规模仍然成立。 本条按计算图依赖计数。 出处Vaswani et al. 2017 Table 1 ↗ |
| ③ 实验上为什么被选中? | 翻译质量更好、训练时间短得多,后来在语言模型上同样如此;代价 N² 在 C9、C11、C13 里一次次回来 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条WMT'14 英德 28.4 BLEU;其任务上。 出处Vaswani et al. 2017 §6 ↗ |
本课每条结论的证据等级:
| 结论 | 证据等级 | 依据 |
|---|---|---|
| 自注意力层串行 O(1)、路径 O(1);循环层 O(n)、O(n) | 可证明 证据等级 · 数学可证明 在写明的前提下可以严格推导出来,不依赖实验。只要前提成立,换数据、换规模仍然成立。 本条按计算图的依赖关系计数。 出处Vaswani et al. 2017 Table 1 ↗ | Vaswani 2017 Table 1 |
| 分数矩阵 N×N,与 head_dim 无关 | 可证明 证据等级 · 数学可证明 在写明的前提下可以严格推导出来,不依赖实验。只要前提成立,换数据、换规模仍然成立。 本条矩阵乘 [N×d]·[d×N] = [N×N]。 出处待补 | 形状计数 |
| Transformer 翻译质量更好、训练更快 | 实验验证 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条WMT'14 英德 28.4 BLEU,8 张 P100 训练 3.5 天;只在其翻译任务上。 出处Vaswani et al. 2017 §6 ↗ | Vaswani 2017 |
| 具体的层结构(头数、维度、位置编码)是这样选的 | 实验验证 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条消融实验;没有最优性证明。 出处Vaswani et al. 2017 Table 3 ↗ | Vaswani 2017 Table 3 |
| Transformer 是最优结构 | 没有证据 | 对话样本 L1191 的讨论;本课误解 |
一句话
Transformer 删掉了循环,换来整句并行和任意两词一步可达;代价是 N×N 的分数矩阵。
先停在这里:记住「并行 + 一步可达,代价 N×N」,进 L5。
再深一层:展开「为什么原文觉得 N² 不是问题」的 Dig,再去 C3 岔路 为什么不用 RNN? 看每层计算量的真实对比。
下一个缺口
原版 Transformer 是为翻译训练的:每一对「原文 → 译文」都要有人准备好。可网上绝大多数文字没有任何标注。没有标注,模型怎么学?学完了又怎么知道它学得好不好? → L5 · 没有标注怎么学
你可能会问
这一课还没有真实提问记录。先列几个最常见的:
- 没有循环了,模型怎么知道「小明打了小王」和「小王打了小明」不一样? 这正是 C2 · 位置 整章的问题:不加位置信息时,注意力对顺序完全不敏感。
- 每层计算量到底谁更省? 见 C3 岔路 为什么不用 RNN?。
- 131K、1M 的上下文是怎么做到的? 不写出分数矩阵(FlashAttention,C9)、只在少数层做全注意力(C11)、推理时缓存 K、V(C3、C13)。