NeurIPS 2017 Self-Attention Google Brain / Google Research Legendary Paper

Attention Is All You Need

Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit,
Llion Jones, Aidan N. Gomez, Lukasz Kaiser, Illia Polosukhin

主流序列转导模型基于 RNN 或 CNN 并结合注意力机制。本文提出Transformer——一种完全摒弃递归和卷积、仅基于注意力机制的全新架构。在机器翻译任务上取得 SOTA,且并行化程度更高、训练时间显著减少。

研究动机与问题背景

在 Transformer 之前,RNN / LSTM / GRU 统治着序列建模领域。它们存在三个根本性缺陷:

  • 无法并行计算:RNN 必须按顺序生成隐藏状态 $h_t = f(h_{t-1}, x_t)$,处理第 $t$ 个词必须等待第 $t-1$ 个完成。序列越长,训练越慢。
  • 长距离依赖困难:虽然 LSTM 缓解了梯度消失,但在极长序列中信息仍随距离衰减。
  • 计算瓶颈:对长文本和高分辨率输入,内存与算力开销巨大。
💡

核心洞见:能否抛弃 RNN 的循环结构,仅靠 Attention 捕捉全局依赖?Transformer 的答案是肯定的——通过 Self-Attention,模型一次性看到序列中所有位置,路径长度为 $O(1)$。这不仅解决了长距离依赖问题,更释放了 GPU 大规模并行计算的潜力。

RNN:顺序处理 $x_1$ $x_2$ $x_3$ $x_4$ 时间步 t → (串行) ✗ $x_1$ 到 $x_4$ 距离 = $O(n)$ Transformer:并行处理 $x_1$ $x_2$ $x_3$ $x_4$ Self-Attention (并行) 所有位置同时计算 ✓ 任意两点距离 = $O(1)$

RNN 必须逐步串行处理,长距离依赖路径为 $O(n)$;Transformer 通过 Self-Attention 使任意两个位置直接交互,路径长度 $O(1)$。

模型架构与数学建模

Transformer 采用经典的 Encoder-Decoder 结构,但内部组件完全基于注意力机制。

核心超参数

符号含义Base 默认值
$d_{model}$嵌入向量及各层输出的维度512
$N$Encoder / Decoder 堆叠层数6
$h$Multi-Head Attention 头数8
$d_k, d_v$Key / Value 维度 ($d_{model}/h$)64
$d_{ff}$前馈网络中间层维度2048

1. Scaled Dot-Product Attention

Transformer 的核心引擎。输入包括查询 ($Q$)、键 ($K$) 和值 ($V$):

$$ \text{Attention}(Q, K, V) = \text{softmax}\!\left(\frac{QK^T}{\sqrt{d_k}}\right)V $$
  • 点积 $QK^T$:计算 Query 和 Key 的相似度矩阵。
  • 缩放 $1/\sqrt{d_k}$:防止点积过大导致 Softmax 进入饱和区,引起梯度消失。
  • Masking:Decoder 中将 $QK^T$ 右上三角设为 $-\infty$,防止位置 $i$ 看到未来信息。
Scaled Dot-Product Attention Q K V MatMul (QKᵀ) Scale (÷ √dₖ) Mask (可选) Softmax MatMul Multi-Head Attention Q, K, V 线性投影 (× h 份) Head 1 Head 2 ... Head h Concat 线性投影 Wᴼ

左:Scaled Dot-Product Attention 数据流。右:Multi-Head Attention 将 Q/K/V 投影到 $h$ 个子空间并行计算后拼接。

2. Multi-Head Attention

单一 Attention 只能关注一个侧面。Multi-Head 机制允许模型在不同子空间中关注不同信息(句法、语义等):

$$ \text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \ldots, \text{head}_h)\,W^O $$ $$ \text{head}_i = \text{Attention}(QW_i^Q,\; KW_i^K,\; VW_i^V) $$

3. 逐位置前馈网络 (FFN)

每个 Attention 层后接一个全连接前馈网络,应用于每个位置:

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

实质是两个线性变换中间夹一个 ReLU 激活。内部维度 $d_{ff}=2048$,是 $d_{model}$ 的 4 倍。

4. 位置编码 (Positional Encoding)

没有了 RNN 的时序性,模型必须显式感知"位置"。论文使用正弦 / 余弦函数:

$$ PE_{(pos,\,2i)} = \sin\!\left(\frac{pos}{10000^{2i/d_{model}}}\right), \quad PE_{(pos,\,2i+1)} = \cos\!\left(\frac{pos}{10000^{2i/d_{model}}}\right) $$

这种编码使得 $PE_{pos+k}$ 可以表示为 $PE_{pos}$ 的线性函数,从而让模型能学习相对位置关系。

Encoder-Decoder 整体结构细节

Encoder:由 $N=6$ 个相同的层堆叠。每层包含两个子层——Multi-Head Self-Attention 和 FFN。每个子层后接残差连接 + Layer Normalization:$\text{LayerNorm}(x + \text{Sublayer}(x))$。

Decoder:同样 $N=6$ 层,但额外插入第三个子层——对 Encoder 输出做 Cross-Attention。Decoder 的 Self-Attention 加入 Mask 防止看到未来信息。

输入嵌入:Encoder 和 Decoder 的输入嵌入权重共享,且乘以 $\sqrt{d_{model}}$ 进行缩放。

实验设置与复现细节

数据集

  • WMT 2014 英德翻译 (EN-DE):450 万句对,BPE 编码,词表约 37k。
  • WMT 2014 英法翻译 (EN-FR):3600 万句对,词表 32k。

训练硬件与时长

模型硬件每步耗时总训练步数总训练时长
Base8x P100 GPU0.4 秒100,000~12 小时
Big8x P100 GPU1.0 秒300,000~3.5 天

注:当时的 SOTA 模型(如 GNMT)需训练数周,Transformer 的效率提升是数量级的。

优化器与正则化

使用 Adam ($\beta_1\!=\!0.9,\;\beta_2\!=\!0.98,\;\epsilon\!=\!10^{-9}$)。学习率调度 (Warmup) 是训练成功的关键:

$$ lr = d_{model}^{-0.5} \cdot \min\!\left(step^{-0.5},\; step \cdot warmup^{-1.5}\right) $$
  • Warmup Steps:4000。先线性增加学习率,后按反平方根衰减。
  • Residual Dropout:$P_{drop}=0.1$。
  • Label Smoothing:$\epsilon_{ls}=0.1$。虽然增加了困惑度,但提升了准确率和 BLEU。

实验结果与核心结论

核心数据

28.4
EN-DE BLEU
41.8
EN-FR BLEU
1/4
训练成本 (vs SOTA)
8
Attention Heads

机器翻译性能对比 (WMT 2014)

模型EN-DE BLEUEN-FR BLEU训练成本 (FLOPs)
ByteNet23.75--
GNMT + RL24.639.92$2.3 \times 10^{19}$
ConvS2S (集成)26.3641.29$1.2 \times 10^{21}$
Transformer (Base)27.338.1$3.3 \times 10^{18}$
Transformer (Big)28.441.8$2.3 \times 10^{19}$

Transformer (Big) 在英德翻译上超过之前最佳模型(含集成)2.0+ BLEU,训练成本仅为 ConvS2S 的 1/50

消融实验发现

  • 头数:单头最差 (24.9 BLEU),16 头也会下降,8 头是最佳平衡点
  • Key 维度 $d_k$:减小 $d_k$ 损害质量,说明点积相似度函数可能还不够表达力。
  • 模型规模:更大模型效果更好,Dropout 对防止过拟合至关重要。

犀利短评

优点

  • 范式转移:彻底证明 RNN 对序列建模并非必须,"Attention Is All You Need" 的标题本身就是宣言。直接催生了 BERT、GPT 等后续工作。
  • 计算效率:极大释放了硬件并行计算的潜力,使训练更大规模模型成为可能。
  • 可解释性:Attention 分布图提供了查看模型"关注点"的直观窗口。

不足与局限

  • $O(n^2)$ 复杂度:Self-Attention 的计算和内存复杂度为序列长度的平方。处理超长文本(如书籍)极其昂贵,催生了后续 Linformer、Flash Attention 等优化工作。
  • 位置信息脆弱:仅靠相加的位置编码,对相对位置的捕捉能力是否真正优于 RNN 的内在时序性?后续 RoPE、ALiBi 等对此改进。
  • 训练敏感:对学习率预热和初始化非常敏感,不当配置容易梯度爆炸或不收敛。

One More Thing:注意力的可解释性

论文中最令人着迷的部分之一是 Attention 的可视化(Figure 3, 4, 5)。

作者发现,不同的 Attention Head 学会了执行不同的句法或语义任务。例如,第 5 层的一个 Head 学会了解决指代消解 (Anaphora Resolution)

"The Law will never be perfect, but its application should be just."
🔍

深层洞见:单词 "its" 的 Attention 权重清晰地指向了 "The Law"。这种无监督学习到的语言结构知识——模型自发地学会了语法和语义——正是 Transformer 后来横扫 NLP 乃至 CV、语音等全领域的基石。一个纯粹为翻译设计的架构,最终成为了 AGI 时代的基础设施。