零、论文速览

项目 内容
标题 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
发表 NIPS 2017
核心贡献 提出 Transformer——第一个完全基于注意力机制的序列转导模型,彻底摒弃循环和卷积

⚡ 这篇论文奠定了 GPT、BERT、Claude 等一切现代大语言模型的基础架构。理解 Transformer,就是理解当代 AI 的起点。


一、背景与动机

1.1 此前主流方法的局限

方法 代表 核心痛点
RNN / LSTM / GRU GNMT, Seq2Seq 顺序计算 $ht = f(h{t-1}, x_t)$,训练无法并行;长序列受限于显存
CNN ByteNet, ConvS2S 两端之间的信号路径随距离线性或对数增长,远距离依赖难学
RNN + Attention Bahdanau et al. Attention 仅作为 RNN 的辅助插件,循环瓶颈依然存在

1.2 核心洞察

注意力机制本身就能以 $O(1)$ 的常数操作数建模任意两个位置之间的依赖关系。那么问题来了——

为什么不把 RNN 和 CNN 统统丢掉,只用注意力?

这就是 Transformer 的出发点。


二、模型架构全景

2.1 编码器-解码器总览

Transformer 沿用经典的 Encoder-Decoder 框架:

  • Encoder:将输入序列映射为连续表示 $\mathbf{z}$
  • Decoder:基于 $\mathbf{z}$ 自回归地逐 token 生成输出(每步把已生成的 token 作为额外输入)

2.2 编码器

每层两个子层,每个子层后都有 残差连接 + 层归一化

参数 说明
层数 $N$ 6 编码器和解码器各 6 层
模型维度 $d_{\text{model}}$ 512 所有子层 + 嵌入层的输出维度
FFN 内部维度 $d_{ff}$ 2048 $\text{FFN}(x) = \max(0, xW_1 + b_1)W_2 + b_2$

2.3 解码器

比编码器多一个子层(三类注意力,见下表):

子层 Q 来源 K、V 来源 功能
掩码多头自注意力 上一层 Decoder 上一层 Decoder 解码器内自注意,掩码防止看到未来位置
编码器-解码器注意力 上一层 Decoder Encoder 最终输出 解码器每个位置关注全部输入
前馈网络 同编码器

🔑 自回归性质:输出嵌入偏移一个位置 + 掩码机制,确保位置 $i$ 的预测只能依赖位置 $< i$ 的已知输出。


三、注意力机制——Transformer 的灵魂

3.1 缩放点积注意力

注意力函数的本质:给定一个 查询(Query),在一组 键值对(Key-Value) 中做软检索,输出值的加权和:

术语 含义 维度
$Q$(Query) “我要找什么” $n_q \times d_k$
$K$(Key) “我有什么可供匹配” $n_k \times d_k$
$V$(Value) “匹配后提取什么内容” $n_k \times d_v$
$\frac{1}{\sqrt{d_k}}$ 缩放因子——核心创新 标量

为什么必须缩放?

假设 $\mathbf{q}$ 和 $\mathbf{k}$ 的分量是独立随机变量,均值 $0$,方差 $1$。则:

当 $d_k$ 很大时,点积值巨大 $\to$ softmax 输出趋近于 one-hot $\to$ 梯度 $\approx 0$,训练停滞。

除以 $\sqrt{d_k}$ 将方差拉回 $1$,解决了梯度消失问题

3.2 多头注意力

不做一个大而全的注意力,而是并行做 $h$ 个小型注意力,各自在不同子空间中捕捉信息:

参数 说明
头数 $h$ 8 并行注意力数
每头维度 $dk = d_v = d{\text{model}} / h = 64$ 降维后计算
投影矩阵 $Wi^Q, W_i^K \in \mathbb{R}^{d{\text{model}} \times dk}$,$W_i^V \in \mathbb{R}^{d{\text{model}} \times dv}$,$W^O \in \mathbb{R}^{hd_v \times d{\text{model}}}$ 全部可学习

🎯 多头的好处:不同头关注不同表示子空间——有的头看句法,有的头看语义,有的头做指代消解。单头会通过平均抹杀这种多样性。

每头维度降低为原来的 $1/h$,所以总计算量与全维度单头注意力基本持平


四、位置编码——赋予序列以”顺序”

4.1 为什么需要?

Transformer 没有循环也没有卷积,本身对 token 顺序无感知。如果只是把词嵌入输进去,”A loves B” 和 “B loves A” 对模型来说一模一样。必须注入位置信息。

4.2 正弦-余弦方案

论文采用的是固定三角函数编码,而非可学习的嵌入:

  • $pos$:token 在序列中的位置
  • $i$:编码向量的维度索引($0, 1, \dots, d_{\text{model}}/2 - 1$)
  • 波长从 $2\pi$ 到 $10000 \cdot 2\pi$,呈几何级数分布——不同维度对应不同频率

4.3 选正弦的理由

  1. 相对位置可线性表示:对任意固定偏移 $k$,$PE{pos+k}$ 可表示为 $PE{pos}$ 的线性函数 $\to$ 模型容易学到相对位置
  2. 外推能力:训练时没见过的更长序列,正弦函数也能给出合理编码
  3. 实验验证:学习式嵌入与正弦编码效果几乎相同(BLEU 差仅 0.1),正弦胜在外推

使用时将位置编码直接加到输入嵌入上:


五、为什么自注意力更优?

论文从三个维度系统对比自注意力、RNN 和 CNN:

指标 自注意力 RNN CNN 受限自注意力
每层复杂度 $O(n^2 \cdot d)$ $O(n \cdot d^2)$ $O(k \cdot n \cdot d^2)$ $O(r \cdot n \cdot d)$
最少顺序操作 $\mathbf{O(1)}$ ✨ $O(n)$ ❌ $O(1)$ $O(1)$
最大路径长度 $\mathbf{O(1)}$ ✨ $O(n)$ ❌ $O(\log_k n)$ $O(n/r)$

$n$ — 序列长度;$d$ — 表示维度;$k$ — 卷积核宽度;$r$ — 受限注意力的邻域大小

三条关键结论:

① 并行性碾压 RNN:自注意力只需 $O(1)$ 个顺序操作,RNN 需要 $O(n)$——这是 Transformer 训练快得多的根本原因。

② 长距离依赖一马平川:任意两个位置之间的信号路径长度为常数 $O(1)$,RNN 需要穿越 $O(n)$ 的长度。

③ 当 $n < d$ 时计算效率也占优:机器翻译中句子大多较短($n$ 小),自注意力比 RNN 更快。对于超长序列,可通过受限注意力(只看 $r$ 大小的邻域)进一步优化。


六、训练方法

6.1 数据与批次

任务 数据集 规模 编码
EN → DE WMT 2014 450 万句对 Byte-Pair Encoding(37K 共享词表)
EN → FR WMT 2014 3600 万句对 Word-Piece(32K 词表)

每个训练 batch 约含 25000 源 token + 25000 目标 token。

6.2 硬件与速度

配置 GPU 每步耗时 总步数 总时长
Base 8 × P100 0.4 s 100K 12 小时
Big 8 × P100 1.0 s 300K 3.5 天

6.3 优化器策略

使用 Adam($\beta_1 = 0.9$,$\beta_2 = 0.98$,$\epsilon = 10^{-9}$),配合自定义的 warmup + 衰减学习率:

  • 4000 步:学习率线性增加(warmup)
  • 之后:按步数的平方根反比递减

6.4 正则化

方法 设置 说明
残差 Dropout $P_{drop} = 0.1$ 施加于每个子层输出、嵌入与位置编码之和
标签平滑 $\epsilon_{ls} = 0.1$ 将正确标签概率从 1.0 平滑到 $(1 - \epsilon{ls}) + \epsilon{ls}/ V $,损害困惑度(PPL)但提升 BLEU

七、实验结果

7.1 机器翻译

模型 EN-DE BLEU EN-FR BLEU 训练成本 (FLOPs)
GNMT + RL 24.6 39.92 $2.3 \times 10^{19}$
ConvS2S 25.16 40.46 $9.6 \times 10^{18}$
MoE 26.03 40.56 $2.0 \times 10^{19}$
GNMT + RL Ensemble 26.30 41.16 $1.8 \times 10^{20}$
ConvS2S Ensemble 26.36 41.29 $7.7 \times 10^{19}$
Transformer (base) 27.3 38.1 $\mathbf{3.3 \times 10^{18}}$ ⚡
Transformer (big) 28.4 🏆 41.8 🏆 $2.3 \times 10^{19}$

🔥 三大亮点

  • Big 模型 EN-DE 得分 28.4 BLEU,比之前最好的集成模型还高出 2.0+
  • Base 模型训练成本仅为竞品的 1/20 ~ 1/50
  • EN-FR 以不到前最佳模型 1/4 的训练成本刷新单模型记录

7.2 消融实验

变体 关键发现
(A) 头数 单头差 0.9 BLEU;头太多也降。8 头最优
(B) 键维度 $d_k$ 减小 $d_k$ 显著损害质量 $\to$ 点积”兼容性匹配”并不简单,更复杂的匹配函数可能有益
(C/D) 模型规模 & Dropout 越大越好;Dropout 对防过拟合至关重要
(E) 位置编码 学习式嵌入 $\approx$ 正弦编码(几乎无差异)

7.3 句法分析(泛化验证)

在 WSJ Penn Treebank 选区句法分析任务中:

设置 方法 F1
仅 WSJ 训练集 Transformer (4层) 91.3
仅 WSJ 训练集 Dyer RNNG 91.7
半监督 Transformer (4层) 92.7 🏆
半监督 Vinyals & Kaiser 92.1
多任务 Luong et al. 93.0
生成式 Dyer RNNG 93.3

🔑 值得一提:仅用 4 万句 WSJ 数据训练,Transformer 就超越了 BerkeleyParser——后者需要大量任务特定调优。


八、注意力可视化——模型”在想什么”

论文附录的可视化是理解 Transformer 内部行为的关键窗口:

8.1 长距离依赖追踪

在 “making…more difficult” 的翻译中,Encoder 第 5 层的多个注意力头准确捕获了动词 making 与其远端补足语之间的依赖——尽管中间隔了十几个 token。

8.2 指代消解

某些注意力头对代词 its 与其先行词(The Law)的连接展现出极其尖锐(sharp)的注意力分布——模型清楚地”知道”它在指什么。

8.3 句法分工

不同注意力头学会了不同的句法角色

  • 有的头专注名词短语的边界
  • 有的头追踪动词-宾语的搭配
  • 有的头捕捉介词短语的附着关系

💡 这说明多头注意力并非冗余——不同头确实自发地学到了互补的语言学特征。


九、总结与影响

论文核心贡献一览

贡献维度 具体内容
架构革命 第一个完全基于注意力的序列模型,彻底抛弃 RNN/CNN
并行性突破 训练速度飞跃(12 小时 SOTA),根本原因是不再有序列依赖
长距离建模 常数级路径长度 $O(1)$,天然解决长程依赖
可解释性 注意力权重可直接可视化,不同头展现不同语言学行为
泛化验证 翻译 SOTA + 句法分析出色 = 架构的通用性得到证实

后续影响

这篇论文开启了 “Attention Is All You Need” 的时代。Transformer 从机器翻译出发,迅速扩展到:

GPT、BERT、T5、Claude、LLaMA……几乎所有现代大语言模型的名字背后,都是同一张架构蓝图——那篇 2017 年 NIPS 论文中描绘的 Transformer。

“We are excited about the future of attention-based models.”

——论文结尾的这句话,在此后近十年的 AI 浪潮中得到了最充分的应验。


参考资料

  1. Vaswani, A., et al. (2017). Attention Is All You Need. NIPS 2017. arXiv:1706.03762
  2. 官方代码实现:tensorflow/tensor2tensor