《Attention Is All You Need》论文解读

核心信息

  • 标题: Attention Is All You Need
  • 标题翻译: 注意力就是你所需的全部
  • 作者: Ashish Vaswani、Noam Shazeer、Niki Parmar、Jakob Uszkoreit、Llion Jones、Aidan N. Gomez、Łukasz Kaiser、Illia Polosukhin
  • 机构: Google Brain、Google Research、University of Toronto
  • 发表时间: 2017
  • 发表渠道: NIPS 2017(第 31 届神经信息处理系统大会)
  • arXiv: 1706.03762
  • 论文链接: arXiv 原文
  • 代码 / 项目: tensorflow/tensor2tensor
  • 数据 / 资源: WMT 2014 英德与英法翻译数据、Penn Treebank(WSJ)句法分析语料
  • 论文类型: AI 方法类(序列转导网络架构)

原文摘要翻译

占主导地位的序列转导模型基于复杂的循环或卷积神经网络,包含一个编码器和一个解码器。 表现最好的模型还会通过注意力机制把编码器和解码器连接起来。 我们提出一种全新的简洁网络架构 Transformer,它完全基于注意力机制,彻底摒弃了循环和卷积。 在两个机器翻译任务上的实验表明,这类模型在质量上更优,同时具有更强的可并行性,所需训练时间也显著更短。 我们的模型在 WMT 2014 英德翻译任务上取得 BLEU 28.4,比包括集成模型在内的既有最好结果高出 2 个 BLEU 以上。 在 WMT 2014 英法翻译任务上,我们的模型在八块 GPU 上训练 3.5 天后,取得 41.8 的单模型最好 BLEU 分数,训练成本仅为文献中最好模型的很小一部分。 我们通过把 Transformer 成功应用于英文成分句法分析(分别在训练数据充足和受限两种条件下),证明它能很好地泛化到其他任务。

创新点

  • 完全去循环、去卷积的纯注意力架构:这是第一个完全依靠自注意力计算输入输出表示的序列转导模型,打破了「注意力只是循环网络的附件」这一惯例,让序列内依赖不再受制于时间步展开。
  • 缩放点积注意力:在点积注意力中引入 $1/\sqrt{d_k}$ 缩放因子,用方差论证解释了为什么大维度点积会把 softmax 推向梯度饱和区,是一个几乎零成本但决定训练稳定性的关键细节。
  • 多头注意力:把查询、键、值线性投影 $h$ 次后并行做注意力再拼接,让模型在不同表示子空间里同时关注不同位置,直接缓解加权平均造成的有效分辨率损失。
  • 正弦/余弦位置编码:用固定频率的周期函数注入位置信息,利用「任意固定偏移都是位置编码的线性函数」这一性质方便模型学相对位置,且理论上可外推到更长序列。
  • 统一维度的深层堆叠设计:所有子层与嵌入层输出统一为 $d_{model}=512$,配合残差连接与层归一化,使 $N=6$ 层的编码器与解码器可以稳定堆叠训练。
  • 把训练成本纳入结果主张:论文不仅报告 BLEU,还给出训练 FLOPs 的估算口径与对比,证明高质量与低成本可以同时达成,这一论证方式后来成为架构论文的标准配置。

一句话总结

Transformer 用纯多头自注意力取代循环与卷积,以常数级的最长依赖路径和高度可并行的计算方式,在 WMT 2014 翻译上用低一个量级的训练成本刷新最好成绩,并把优势泛化到英文句法分析。

研究问题

论文要解决的是序列转导(输入一个序列、输出一个序列)建模中的一个根本性结构问题:如何在不引入顺序计算的前提下直接建模任意两个位置之间的依赖。

循环神经网络(含长短期记忆与门控循环单元)沿符号位置逐步展开计算,第 $t$ 步的隐状态 $h_t$ 依赖 $h_{t-1}$,这使样本内计算本质上是串行的。 当序列变长时,显存限制又迫使跨样本的批大小收缩,并行度进一步恶化;因子化技巧与条件计算缓解了效率问题,但顺序计算的根本约束没有被消除。

卷积路线(ConvS2S、ByteNet、Extended Neural GPU)把所有位置的表示并行计算。 但两个任意位置之间建立关联所需的操作数随距离增长:ConvS2S 线性、ByteNet 对数级。 层数不够深时,远距离位置之间根本不在彼此的感受野里,长程依赖因此很难学。

注意力机制本身早已能不受距离约束地建模依赖,但在绝大多数工作中仍与循环网络捆绑使用。 于是论文的核心研究问题可以拆成三点:

  1. 能否用纯注意力机制构建完整可用的编码器-解码器转导模型,彻底去掉循环与卷积?
  2. 这样的结构能否在保持(甚至提升)翻译质量的同时,显著提高训练并行度、降低训练成本?
  3. 它学到的能力是否只对翻译有效,还是可以迁移到结构约束更强的其他序列任务?

数据与任务定义

数据来源

  • WMT 2014 英德翻译:约 450 万句对,用字节对编码(BPE)构建约 37000 词元的源-目标共享词表。
  • WMT 2014 英法翻译:规模大得多,3600 万句,用约 32000 词元的词级切分词表。
  • 英文成分句法分析:Penn Treebank 的 WSJ 部分,仅约 4 万句训练数据;半监督设置额外引入高置信度语料与 BerkleyParser 语料,合计约 1700 万句。

任务定义

翻译任务是标准的自回归序列转导:输入源语言词元序列,逐位置生成目标语言词元,评测指标是 newstest2014 上的 BLEU。 句法分析任务的输出是线性化的成分句法树,特点是输出受强结构约束且显著长于输入,评测指标是 WSJ 第 23 节上的 F1。

训练批处理按近似序列长度组批,每批约含 25000 个源词元与 25000 个目标词元。 句法分析实验只用 16K(WSJ 单独设置)或 32K(半监督设置)词表,除学习率、dropout 与束搜索宽度外,其余参数沿用英德翻译的基准配置。

方法主线

机制流程

  1. 输入构造:输入是源序列的词元序列,操作是查嵌入矩阵并乘以 $\sqrt{d_{model}}$,再与同维度的正弦位置编码逐元素相加;输出送入编码器栈底部(解码器侧同样构造目标序列嵌入)。
  2. 编码器堆叠:输入是上一层输出,操作是「多头自注意力 → 残差 + 层归一化 → 逐位置前馈网络 → 残差 + 层归一化」重复 $N=6$ 层,每个子层都按「残差 + 归一化」组合,可简写为 $y=LN(x+f(x))$;输出去向是编码器记忆表示,交给解码器。
  3. 解码器堆叠:输入是右移一位的目标嵌入与编码器记忆表示,操作是三个子层循环 $N=6$ 层——带掩码的多头自注意力(把非法未来位置的 softmax 输入置为负无穷)、以解码器为查询、以编码器记忆为键和值的编码器-解码器注意力、逐位置前馈网络,每层同样配残差与归一化;输出去向是每个位置的隐表示。
  4. 输出投影与自回归生成:输入是解码器顶层输出,操作是共享权重的线性变换加 softmax 得到下一词元概率分布;输出去向是按自回归方式拼回输入端生成下一个词元,直到终止条件满足。

Figure 1 论文原图编号:Fig. 1。左右对称的编码器-解码器总览图,把上面机制流程的四步链路一次画清。

模型结构

注意力函数把一个查询与一组键值对映射为输出:输出是值的加权求和,权重由查询与各键的兼容性函数给出。 论文的核心注意力是缩放点积注意力,批量形式为:

$$ \mathrm{Attention}(Q,K,V)=\mathrm{softmax}!\left(\frac{QK^{\top}}{\sqrt{d_k}}\right)V $$

缩放因子 $1/\sqrt{d_k}$ 的动机是方差控制:若查询与键的分量独立、零均值、单位方差,其点积的方差是 $d_k$,维度一大点积幅值就大,softmax 会进入梯度极小的区域。 与加性注意力相比,点积注意力在实现上可以直接调用高度优化的矩阵乘法内核,速度和空间效率都更好。

多头注意力把查询、键、值分别用 $h$ 组不同的线性投影降到 $d_k$、$d_k$、$d_v$ 维,并行做注意力后拼接再投影回 $d_{model}$ 维。 论文取 $h=8$、$d_k=d_v=d_{model}/h=64$,由于每头维度降低,总计算量与单头全维度注意力相当。 多头的价值在于不同头可以落在不同表示子空间里关注不同位置;单头的加权平均会把这种多样性抹掉。

三种注意力用法分工明确:解码器的编码器-解码器注意力用解码器查询去检索编码器全部位置;编码器自注意力让每个位置聚合全句信息;解码器自注意力靠掩码保证自回归性,预测第 $i$ 位只依赖小于 $i$ 的已知输出。

逐位置前馈网络对每个位置施加同一组带 ReLU 的两层线性变换,等价于核宽为 1 的两次卷积:

$$ \mathrm{FFN}(x)=\max(0,,xW_1+b_1)W_2+b_2 $$

输入输出维度是 $d_{model}=512$,内层维度是 $d_{ff}=2048$。

训练目标

论文沿用自回归序列转导的标准目标,即已知前缀下逐词元的对数似然,并用值为 $\epsilon_{ls}=0.1$ 的标签平滑修正。 标签平滑会让困惑度变差(模型变得更不确定),但能提升准确率与 BLEU。 正则化除标签平滑外还有残差 dropout(子层输出加残差前、以及嵌入与位置编码之和处,基准模型丢弃率 0.1)。

推理与采样链路

解码用束搜索,束宽 4、长度惩罚 $\alpha=0.6$,最大输出长度设为输入长度加 50,能提前终止就提前终止。 基准模型的最终结果取最后 5 个检查点(每 10 分钟写一个)的平均,大模型取最后 20 个检查点的平均。 超参数是在开发集上实验选定的——复现时这条不能省略。

关键实现细节

学习率不走常数或纯衰减,而用「先线性升温、后按步数逆平方根衰减」的调度:

$$ lrate = d_{model}^{-0.5}\cdot\min\bigl(step_num^{-0.5},;step_num\cdot warmup_steps^{-1.5}\bigr) $$

其中 $warmup_steps=4000$。 优化器是 Adam($\beta_1=0.9$、$\beta_2=0.98$、$\epsilon=10^{-9}$)。 硬件是单机八块 P100:基准模型 0.4 秒一步、共 10 万步(12 小时),大模型 1.0 秒一步、共 30 万步(3.5 天)。 嵌入层与预 softmax 线性变换共享同一权重矩阵,嵌入权重乘以 $\sqrt{d_{model}}$。

关键结果

主结果与强基线

newstest2014 上的主结果与训练成本对比如下(BLEU 与 FLOPs 均按英德 / 英法两列,「—」表示原表未列):

模型英德 BLEU英法 BLEU训练成本(英德 / 英法,FLOPs)
ByteNet23.75——
Deep-Att + PosUnk—39.2— / 1.0×10^20
GNMT + RL24.639.922.3×10^19 / 1.4×10^20
ConvS2S25.1640.469.6×10^18 / 1.5×10^20
MoE26.0340.562.0×10^19 / 1.2×10^20
Deep-Att + PosUnk(集成)—40.4— / 8.0×10^20
GNMT + RL(集成)26.3041.161.8×10^20 / 1.1×10^21
ConvS2S(集成)26.3641.297.7×10^19 / 1.2×10^21
Transformer(base)27.338.13.3×10^18
Transformer(big)28.441.82.3×10^19

Table 2:Transformer 在英德与英法翻译上同时取得更高 BLEU 与更低训练成本。原表中 Transformer 两行的训练成本只给出一个数值。

Table 2 论文原图编号:Table 2。原表截图,内容与上方重建表格一致,保留原版式便于核对。

三个层次的结论值得分开看:

  1. 英德:大模型 28.4 比此前所有结果(含集成)高 2.0 BLEU 以上;更激进的是基准模型 27.3 也已经超过全部已发表单模型和集成,而它的训练成本(3.3×10^18)比最便宜的基线 ConvS2S(9.6×10^18)还低。
  2. 英法:大模型 41.8 刷新单模型最好成绩,训练成本不到此前最好模型(Deep-Att + PosUnk,1.0×10^20)的四分之一。
  3. 数字口径提醒:摘要与 Table 2 都写 41.8,但正文 6.1 的文字写的是 41.0,属于论文自身的文本不一致,引用时应以表格的 41.8 为准并知晓差异存在。

消融到底说明了什么

消融全部在英德开发集(newstest2013)上做、且不做检查点平均,PPL 为按词级切分的逐词元困惑度:

变化项具体设置PPL(dev)BLEU(dev)参数量(百万)
基准$h{=}8$,$d_k{=}d_v{=}64$4.9225.865
头数(A)$h{=}1$,$d_k{=}d_v{=}512$5.2924.965
头数(A)$h{=}4$,$d_k{=}d_v{=}128$5.0025.565
头数(A)$h{=}16$,$d_k{=}d_v{=}32$4.9125.865
头数(A)$h{=}32$,$d_k{=}d_v{=}16$5.0125.465
键维度(B)$d_k{=}16$5.1625.158
键维度(B)$d_k{=}32$5.0125.460
深度(C)$N{=}2$6.1123.736
深度(C)$N{=}4$5.1925.350
深度(C)$N{=}8$4.8825.580
宽度(C)$d_{model}{=}256$,$d_{ff}$ 相应减半5.7524.528
宽度(C)$d_{model}{=}1024$,$d_{ff}$ 相应加倍4.6626.0168
前馈内层(C)$d_{ff}{=}1024$5.1225.453
前馈内层(C)$d_{ff}{=}4096$4.7526.290
丢弃率(D)$P_{drop}{=}0$5.7724.665
丢弃率(D)$P_{drop}{=}0.2$4.9525.565
标签平滑(D)$\epsilon_{ls}{=}0$4.6725.365
标签平滑(D)$\epsilon_{ls}{=}0.2$5.4725.765
位置编码(E)学习式位置嵌入替代正弦4.9225.765
大模型$N{=}6$,$d_{model}{=}1024$,$d_{ff}{=}4096$,$h{=}16$,$P_{drop}{=}0.3$,30 万步4.3326.4213

Table 3:架构变体消融。原表未列出的值与基准一致;宽度(C)两行的 $d_k=d_v=d_{model}/h$ 随宽度缩放。

Table 3 论文原图编号:Table 3。原表截图,参数量列为原始数值,便于核对消融设置。

每组消融真正说明的问题:

  • 头数(A):计算量保持恒定时,单头比最好设置低 0.9 BLEU,但头数过多(32 头、每头 16 维)同样掉点。多头的价值不是「越多越好」,而是保持每头足够维度的前提下换取子空间多样性。
  • 键维度(B):单独把 $d_k$ 从 64 减到 16/32 就伤到 0.7 BLEU,连参数量变少都救不回来。作者由此推断兼容性判定并不容易,点积之外可能有更优的兼容性函数——注意这是推断,不是被验证的结论。
  • 规模(C):深度、宽度、前馈内层三个方向单调地「越大越好」,但消融没有隔离参数量与结构比例的贡献,不能证明收益来自深度而非参数。
  • 正则化(D):去掉 dropout 是全场最大退化(BLEU 掉 1.2、困惑度恶化到 5.77),过拟合是这个架构在中等规模数据上的主要敌人;标签平滑则是一个明确的「困惑度换准确率」权衡。
  • 位置编码(E):学习式与正弦几乎打平(25.7 对 25.8),选正弦的理由是潜在的长度外推能力,而该能力并未被实验验证。

泛化到句法分析

WSJ 第 23 节上的成分句法分析结果(F1):

句法分析器训练方式F1
Vinyals & Kaiser et al. (2014)仅 WSJ,判别式88.3
Petrov et al. (2006)仅 WSJ,判别式90.4
Zhu et al. (2013)仅 WSJ,判别式90.4
Dyer et al. (2016)仅 WSJ,判别式91.7
Transformer(4 层)仅 WSJ,判别式91.3
Zhu et al. (2013)半监督91.3
Huang & Harper (2009)半监督91.3
McClosky et al. (2006)半监督92.1
Vinyals & Kaiser et al. (2014)半监督92.1
Transformer(4 层)半监督92.7
Luong et al. (2015)多任务93.0
Dyer et al. (2016)生成式93.3

Table 4:英文成分句法分析结果。

Table 4 论文原图编号:Table 4。原表截图,与上方重建表格对应。

关键读法:4 层 Transformer 几乎没做任务特定调参,就在两种设置下超过此前绝大多数模型,包括监督式最强的 BerkeleyParser(90.4);唯一稳定压过它的是循环神经网络语法(判别式 91.7、生成式 93.3)。 半监督 92.7 也高于此前全部半监督结果,但仍低于多任务(93.0)与生成式(93.3)两个不同训练范式的结果。

失败或不稳定设置

  • 丢弃率为 0 时训练明显过拟合,是全部消融中最差的 BLEU(24.6)。
  • 单头与 32 头两个极端都掉点,注意力头数存在倒 U 型权衡。
  • 键维度压到 16 时质量与困惑度双双恶化,说明查询-键匹配是瓶颈部件,不能随意压缩。
  • 标签平滑加大到 0.2 时困惑度显著变差(5.47),收益只体现在准确率侧。

深度分析

为什么有效

这篇论文的结果背后有三条互相支撑的机制链路:

  1. 常数路径长度降低长程依赖的学习难度。任意输入输出位置之间,自注意力只需 1 次顺序操作即可连通,循环需要 $O(n)$ 次、卷积需要 $O(\log_k n)$ 次堆叠。 信号穿过的路径越短,长程依赖越容易学——这直接对应英德翻译里对远距离词序调整的建模能力。
  2. 去掉顺序约束释放并行度,让算力预算更多花在有效容量上。同样的墙钟时间里,纯注意力架构可以做更多训练步数,这解释了为什么基准模型的 FLOPs 低却仍然赢。
  3. 多头 + 缩放保证注意力机制本身可用。缩放防止 softmax 饱和,多头防止平均化抹掉多峰依赖,消融中单头掉 0.9 BLEU、小 $d_k$ 掉 0.7 BLEU 是这两条链路最直接的证据。

注意力还带来一个潜在收益:可解释性。 附录的可视化显示不同头学到了明显不同的行为,有的头跟随长距离动词依赖,有的头呈现共指消解的模式,有的头对句法结构敏感。 这类证据是案例级的可视化观察,支持「头之间存在分工」这个弱主张,但不构成系统性的可解释性证明。

Figure 2 论文原图编号:Fig. 2。左侧为缩放点积注意力数据流、右侧为多头并行投影-拼接结构,对应「缩放」与「多头」两条机制链路。

Figure 3 论文原图编号:Fig. 3。编码器自注意力第 5 层跨越词位捕捉长距离依赖的实例,支撑常数路径长度的主张。

Figure 4 论文原图编号:Fig. 4。第 5 层两个头对代词的注意力分布,呈现共指消解行为。

Figure 5 论文原图编号:Fig. 5。两个头分别关注句法结构不同侧面的例子。

复杂度与扩展性

下表省略大 O 记号,只列关键因子:

层类型每层复杂度顺序操作数最大路径长度
自注意力$n^2 d$$1$$1$
循环$n d^2$$n$$n$
卷积$k n d^2$$1$$\log_k n$
自注意力(受限)$r n d$$1$$n/r$

Table 1:不同层类型的复杂度、顺序操作数与最大路径长度对比($n$ 为序列长度,$d$ 为表示维度,$k$ 为卷积核宽,$r$ 为受限注意力的邻域大小)。

Table 1 论文原图编号:Table 1。原表截图(原候选为空白条,已按修正边界重裁),内容与上方重建表格一致。

读这张表要注意三点:

  • 自注意力赢在 $n<d$ 的区间。 逐层复杂度上自注意力是 $n^2 d$、循环是 $n d^2$,序列长度 $n$ 小于表示维度 $d$ 时自注意力更便宜。 句级翻译词表化后通常满足该条件,但长文档、音频这类 $n$ 很大的场景结论会反转,$n^2$ 项会成为瓶颈。
  • 可分离卷积是卷积侧的强基线。核宽取 $n$ 时,可分离卷积的复杂度恰好等于「一层自注意力 + 一层逐位置前馈」的组合,即本文架构的单层开销。
  • 论文提出的补救方案(受限注意力,只关注半径 $r$ 的邻域,路径长度退化为 $O(n/r)$)在本文中没有实验,属于给出思路、留给未来验证的部分。

复现注意点

  • 检查点平均是结果的一部分:基准取最后 5 个、大模型取最后 20 个检查点平均,不做这步 BLEU 会有可见损失;Table 3 的消融恰恰没有做平均,所以 dev 数字不能与主结果直接比较。
  • FLOPs 是估算而非实测:口径是「训练时长 × GPU 数量 × 持续单精度算力」,其中算力按 P100 9.5 TFLOPS 等固定值估计;跨论文比较成本时要检查对方的估算口径是否一致。
  • 词表口径影响 BLEU 可比性:英德用 37K 共享 BPE、英法用 32K 词级切分,与其他论文的分词口径不同会带来零点几的系统性差异。
  • 两处文本不一致需要留意:英法大模型成绩摘要写 41.8、正文 6.1 写 41.0;英法大模型的丢弃率是 0.1(不是英德大模型的 0.3)。
  • 复现最小配置:宽度 $d_{model}=512$、前馈内层 $d_{ff}=2048$、深度 $N=6$。 头数 $h=8$、每头维度 $d_k=d_v=64$。 训练侧:Adam(0.9,0.98,$10^{-9}$)、$warmup=4000$、标签平滑 0.1、dropout 0.1。 按 25000+25000 词元组批,训练 10 万步。

局限

论文用证据证明了的:

  • 在 WMT 2014 英德与英法两个特定数据集、特定词表口径下,翻译质量与训练成本的优势成立。
  • 头数、键维度、规模、dropout、标签平滑这几个组件在英德开发集上的作用方向明确(Table 3)。
  • 在英文成分句法分析这一种非翻译任务上,架构无需太多调参即可工作。

论文没有证明、但容易被引用成结论的:

  • 长度外推能力:正弦位置编码「可能」外推到更长序列,论文没有任何训练长度之外的系统性实验,学习式与正弦在实验里只是打平。
  • 模态泛化:把架构推广到图像、音频、视频被明确列为未来工作,本文一个实验都没有。
  • 解码效率:并行化收益在训练侧;解码仍是自回归顺序生成,推理延迟与吞吐论文从未测量,「生成不够顺序」也被作者自己列为待解决问题。
  • 架构收益的归因边界:与基线的对比跨越不同年份、不同词表、不同训练预算,FLOPs 又是估算值,因此「纯注意力优于循环/卷积」的结论严格来说限于所比配置,不能读作对所有规模、所有算力预算的普遍定理。
  • 可解释性主张:注意力头的可视化是轶事级案例,不构成「学到句法/语义结构」的系统性证明。
  • 受限注意力与长序列方案:只给了复杂度分析和设想,没有实验支撑。

此外还有一个论文自陈的机制代价:注意力加权平均会降低有效分辨率,多头只是缓解而没有消除这个问题。

我的笔记

这篇论文值得长期保留的不是 28.4 这个数字,而是它把「结构选择 → 复杂度与路径长度 → 实验结果」这条论证链完整示范了一遍。写架构论文或做架构选型时可以直接套用它的三个评估维度:每层复杂度、顺序操作数、最大路径长度。

可复用的工程判断:

  • 拿到序列建模任务,Transformer 可以作为默认强起点,尤其当输出受结构约束、输出长于输入时(句法分析实验就是这种情况)。
  • 中等规模数据上,正则化的优先级高于加宽加深:dropout 归零的伤害(-1.2 BLEU)大于大多数结构改动。
  • 复现这类工作时,检查点平均、束搜索宽度、长度惩罚、学习率升温步数这四个「非架构」细节对最终分数的影响,未必小于架构本身。
  • 如果输入序列很长,先算清楚 $n^2$ 项的代价,再决定要不要上受限注意力或稀疏化方案。

留在待办里的问题(论文没有回答):

  1. 去掉 $1/\sqrt{d_k}$ 缩放会退化到什么程度?缺一个独立消融。
  2. 受限注意力的邻域 $r$ 取多大能保住全局路径优势?
  3. 正弦编码的长度外推是真实存在还是一厢情愿?
  4. 自回归解码的延迟劣势有多大,非自回归化能补回多少?
  5. 低资源语言对上,纯注意力的优势是否还在?

引用