《Attention Is All You Need》阅读笔记
论文:Ashish Vaswani 等,Attention Is All You Need,2017。 阅读版本:arXiv:1706.03762v7 论文 PDF:Attention Is All You Need
写在前面
今天回看这篇论文,最容易犯的错误,是带着大语言模型已经成功的结论去阅读它。2017 年的作者并不是在回答“怎样构造通用智能”,而是在解决一个更具体的问题:序列到序列任务是否必须依赖循环或卷积,才能建模输入与输出之间的关系?
论文给出的答案是 Transformer:用注意力机制承担主要的信息交互,再配合位置编码、前馈网络、残差连接与归一化,完全移除循环和卷积。
我的核心感受是:这篇论文真正重要的地方,不只是提出了一个新模块,而是重新安排了序列模型的计算路径。过去模型让信息沿时间步或卷积层逐步传播,Transformer 则让任意两个位置可以通过一次注意力计算直接交换信息。
一、论文想解决什么问题
1. 当时的主流方案
论文发表时,机器翻译等序列转换任务通常采用编码器—解码器结构,其中主体是 RNN、LSTM、GRU 或卷积网络。注意力机制已经存在,但更多是附着在循环网络上的辅助组件。
这些模型面临两类结构性问题:
- 训练难以充分并行。 循环网络的第 个状态依赖第 个状态,时间步之间存在串行依赖。
- 长距离信息路径较长。 两个相距很远的词,往往需要经过多个循环状态或卷积层才能发生信息交互。
2. 论文的核心假设
作者提出:如果注意力已经能够根据内容动态连接任意位置,那么是否可以让它成为主体,而不再依赖循环或卷积?
这个假设带来三项直接目标:
- 缩短长距离依赖的传播路径;
- 提高训练阶段的并行度;
- 在机器翻译质量不下降的前提下减少训练成本。
二、先看 Transformer 全景
原始 Transformer 是一个完整的编码器—解码器模型:

图 1:原始 Transformer 模型架构。截取自 Vaswani 等人的原论文 Figure 1;左侧编码器和右侧解码器均重复堆叠 层。
这张图最值得沿着箭头阅读:左侧编码器把输入序列变成上下文化表示;右侧解码器先读取已生成的目标序列,再通过中间的编码器—解码器注意力读取源序列,最后输出下一个词的概率。
每个编码器层包含:
- 多头自注意力;
- 逐位置前馈网络。
每个解码器层包含:
- 带因果掩码的多头自注意力;
- 编码器—解码器注意力;
- 逐位置前馈网络。
每个子层外部都有残差连接和 Layer Normalization。论文采用的写法是:
这属于后来常说的 Post-LN 结构:先做残差相加,再归一化。现代大模型常使用 Pre-LN 或 RMSNorm,因此阅读论文时不能把今天常见的实现细节自动投射回原始版本。
三、核心机制:缩放点积注意力
1. Q、K、V 的角色
输入表示经过三个可学习投影,得到 Query、Key 和 Value:
我的理解是:
- 表示当前位置正在寻找什么;
- 表示每个位置可以凭什么被匹配;
- 表示匹配后实际传递什么内容。
Q、K 共同完成“寻址”,V 负责“取值”。把匹配依据与传递内容分开,是注意力机制具有表达力的重要原因。
2. 公式
论文使用缩放点积注意力:
计算过程可以拆成四步:
- 用 计算查询与所有键之间的匹配分数;
- 除以 ;
- 使用 Softmax 把分数转为权重;
- 按权重汇总所有 Value。

图 2:缩放点积注意力与多头注意力。截取自原论文 Figure 2。左图对应从 、缩放、可选掩码、Softmax 到加权 的计算链;右图展示多组线性投影如何并行进入多个注意力头。
3. 为什么除以
当向量维度增加时,点积的绝对值通常会变大,Softmax 容易进入梯度很小的饱和区域。缩放因子用于控制分数尺度,使优化更稳定。
这不是为了让权重之和等于 1——Softmax 本身已经完成归一化;它主要解决的是输入 Softmax 前的数值尺度问题。
四、多头注意力为什么重要
Transformer 并不是只计算一次注意力,而是把表示投影到多个子空间中并行计算:
原始基础模型采用 个头,,每个头的 。由于各头维度之和仍为 512,多头设计不等于把主体维度简单扩大八倍。
我的理解是,多头注意力提供了多个并行的关系建模通道。不同头有机会学习局部搭配、句法关系、指代或远距离依赖,但这只是能力上的可能性,不能保证每个头都具有稳定且可命名的人类语义。
论文中的长距离依赖可视化

图 3:编码器第 5 层自注意力中的长距离依赖示例。截取自原论文 Figure 3;不同颜色代表不同注意力头。
原图考察单词 “making” 的注意力连接,其中一些头对远处的 “more difficult” 给出较强权重。它直观展示了自注意力如何让相距较远的位置直接交换信息。不过,这类图只能说明某层某头的信息连接模式,不能单独证明模型预测的完整因果机制。
五、三种注意力各做什么
1. 编码器自注意力
Q、K、V 都来自编码器上一层输出。源序列中的每个位置都可以读取其他位置,用于形成上下文化表示。
2. 解码器掩码自注意力
Q、K、V 都来自解码器,但会加入因果掩码。生成第 个词时,只能读取第 个及之前的位置,不能偷看未来答案。
在 Softmax 前,可以把未来位置对应的分数设为负无穷:
其中 在允许访问的位置取 0,在禁止访问的位置取 。
3. 编码器—解码器注意力
Q 来自解码器,K 和 V 来自编码器输出。它让目标序列在生成时读取源序列信息,也就是传统序列到序列模型中的交叉注意力。
六、注意力之外不可忽略的组件
标题容易让人误以为模型“只有注意力”,其实 Transformer 还依赖多个关键组件。
1. 逐位置前馈网络
每个位置独立通过同一组两层全连接网络:
基础模型中,内部维度从 扩展到 ,再投影回 512。注意力负责位置之间的信息混合,FFN 负责每个位置内部的非线性特征变换。
2. 位置编码
自注意力本身没有递归顺序,必须显式注入位置信息。论文使用正弦、余弦位置编码:
作者也实验了可学习位置嵌入,并报告两者结果相近;选择正弦位置编码的一个考虑,是希望模型可能外推到训练时未见过的更长序列。
3. 残差、归一化与 Dropout
残差连接帮助深层网络保留信息和传播梯度,Layer Normalization 稳定中间表示,Dropout 用于正则化。基础模型的 Dropout 率为 0.1。
因此,“Attention Is All You Need”更像一个有力量的研究宣言,而不是逐字准确的组件清单。
七、论文为什么强调计算路径
论文从每层计算复杂度、可并行操作数量和长距离依赖的最大路径长度比较自注意力、循环层与卷积层。
设序列长度为 ,表示维度为 :
| 层类型 | 每层复杂度 | 顺序操作数 | 最大路径长度 |
|---|---|---|---|
| 自注意力 | |||
| 循环层 | |||
| 卷积层 | 依卷积核而定 | 通常大于 |
这张表是理解论文动机的关键,但也要注意边界:当 远大于 时,自注意力的 项会变得昂贵。它解决了并行与路径长度问题,却把长序列成本集中到了注意力矩阵上。
八、训练配置与论文结果
1. 基础模型配置
论文中的 Transformer Base 主要参数为:
| 项目 | 设置 |
|---|---|
| 编码器层数 | 6 |
| 解码器层数 | 6 |
| 512 | |
| 注意力头数 | 8 |
| 64 | |
| 2048 | |
| Dropout | 0.1 |
| 标签平滑 | 0.1 |
优化器使用 Adam,论文给出的超参数为 、、。学习率先进行 4000 步 warmup,之后按步数的平方根倒数衰减:
2. 论文报告的结果
论文在 WMT 2014 英德翻译任务上报告 28.4 BLEU,在英法翻译任务上报告 41.8 BLEU。作者同时强调训练并行性和成本优势,并展示模型可迁移到英语成分句法分析任务。
这些数字应放回 2017 年的数据处理、硬件、评测脚本和对比系统中理解。它们证明了当时的实验主张,但不适合作为今天模型性能的直接基准。
九、我认为最关键的贡献
1. 把注意力从辅助模块提升为主干
论文之前已有注意力机制。真正的突破不是“第一次发明注意力”,而是证明一个完全以注意力为核心的编码器—解码器可以在重要任务上成立。
2. 改变序列模型的并行方式
移除时间步递归后,一个训练样本的多个位置可以同时计算。这种结构更适合 GPU/TPU 的矩阵运算,也为后续扩大数据、模型和算力规模创造了条件。
3. 建立高度可复用的模块接口
注意力、FFN、残差和归一化组成规则、重复的积木。后来研究可以替换位置编码、注意力模式、归一化、激活函数或训练目标,而不必放弃整个架构。
4. 让“关系”成为动态计算结果
卷积的连接模式主要由局部窗口预先规定,循环模型的信息路径由时间顺序规定;自注意力则根据当前输入动态计算位置之间的连接强度。这种内容寻址能力是 Transformer 通用性的一个来源。
十、阅读中容易产生的误解
误解 1:论文发明了所有注意力机制
不是。注意力在神经机器翻译中已有重要工作。本文的贡献重点是仅依靠注意力构建主干架构。
误解 2:注意力权重就是模型解释
注意力权重描述某一层某一头中的信息混合比例,但最终预测还受到多层残差、FFN、输出投影等影响。把热力图直接视为完整因果解释并不可靠。
误解 3:多头一定各司其职
不同头可以学习不同模式,但可能存在冗余,也不保证每个头都能被赋予清晰语义。
误解 4:Transformer 天然知道顺序
标准自注意力对位置排列没有足够的顺序感知,必须加入位置编码或其他位置机制。
误解 5:标题意味着其他组件不重要
没有 FFN、残差、归一化、位置编码、掩码、优化策略和数据处理,原始 Transformer 并不能按论文方式工作。
十一、局限与后来的变化
1. 二次复杂度
标准全局注意力需要构造 的分数矩阵,序列增长时计算和显存成本迅速增加。后续工作从稀疏注意力、局部窗口、线性注意力和高效内核等方向改进这一问题。
2. 原始位置编码不是终点
正弦绝对位置编码具有简洁性,但后续模型广泛探索相对位置、旋转位置编码等方案。原论文提供了起点,而不是最终答案。
3. 原始架构与现代大语言模型并不相同
原论文是面向机器翻译的编码器—解码器。很多生成式大语言模型采用仅解码器结构,同时在归一化、激活函数、位置表示、注意力实现和训练目标上都有显著变化。
4. 并行优势不等于推理完全并行
训练时,已知完整目标序列,可以通过掩码并行计算各位置;自回归生成时,下一个 token 仍依赖此前 token,解码过程依旧逐步进行。KV Cache 可以减少重复计算,但不会消除自回归依赖。
十二、如果我要复现这篇论文
我会按下面的顺序推进,而不是一开始追求完整 WMT 指标:
- 用小张量手写单头缩放点积注意力,逐项检查形状;
- 加入多头拆分、拼接和输出投影;
- 实现因果掩码与 Padding Mask,并用可控样例验证;
- 组合编码器层和解码器层,确认残差与归一化位置;
- 在小型复制任务或字符级翻译任务上过拟合一个 batch;
- 加入论文学习率调度、标签平滑和权重共享;
- 最后再处理 WMT 数据、分词、批次策略与 BLEU 评测。
实现时最值得持续打印的是张量形状:
输入: [batch, seq_len, d_model]
拆分多头后: [batch, heads, seq_len, d_head]
注意力分数: [batch, heads, query_len, key_len]
加权结果: [batch, heads, query_len, d_head]
拼接后: [batch, query_len, d_model]
十三、我的阅读结论
这篇论文的价值可以概括为三层:
- 模型层面: 提出了不依赖循环和卷积的 Transformer 编码器—解码器;
- 计算层面: 用全局、动态、可并行的关系计算替代逐时间步传播;
- 研究层面: 提供了一套易于缩放和改造的通用架构积木。
如果只记住 的公式,就会低估这篇论文。它最深远的改变,是把序列建模从“沿着序列逐步传递状态”,转向“让所有位置直接协商应该从哪里读取信息”。
不过,论文标题中的“All”也应谨慎理解:Attention 是结构核心,但模型的成功来自一整套设计共同工作。保持这种区分,既能看到论文的突破,也不会把历史叙事简化成一句口号。
延伸阅读
阅读信息
- 阅读日期:2026-07-16
- 系列:经典论文选读
- 系列序号:第 1 篇
- 关键词:Transformer、Self-Attention、Multi-Head Attention、位置编码、机器翻译
Utterances
评论
欢迎围绕这篇文章留下问题、补充或后续想法。