Back to blog

Attention Is All You Need

Transformer 架构的开创性工作 - 纯注意力机制的序列转导模型

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
论文arXiv:1706.03762
发布2017年6月12日
代码tensor2tensor

二、核心思想

问题定义

主流的序列转导模型基于复杂的循环神经网络(RNN)或卷积神经网络(CNN),包含编码器和解码器。这些模型存在关键瓶颈:

  1. 循环结构的顺序计算限制:RNN 按时间步顺序计算,无法并行化,训练效率低
  2. 长距离依赖学习困难:信号需要经过 O(n)O(n) 步才能传播到任意位置
  3. 计算效率低:循环层的计算复杂度为 O(n⋅d2)O(n \cdot d^2)

解决方案概述

本文提出 Transformer 架构,完全基于注意力机制,摒弃循环和卷积:

  1. 纯注意力机制:使用自注意力(Self-Attention)替代循环层
  2. 高度并行化:所有位置可并行计算,显著提升训练速度
  3. 常数路径长度:任意两个位置之间的路径长度为 O(1)O(1),便于学习长距离依赖

核心创新

创新点说明效果
多头自注意力并行的注意力头,每个关注不同表示子空间捕获多维度依赖关系
位置编码正弦/余弦函数注入位置信息无需循环即可感知序列顺序
缩放点积注意力QKTdk\frac{QK^T}{\sqrt{d_k}} 防止梯度消失稳定训练
残差连接 + 层归一化每个子层的输出为 LayerNorm(x + Sublayer(x))稳定深层网络训练

三、技术架构

模型架构

Transformer 架构

整体框架:

  • 编码器:N=6N=6 层堆叠,每层包含多头自注意力 + 位置前馈网络
  • 解码器:N=6N=6 层堆叠,每层包含掩码多头自注意力 + 编码器-解码器注意力 + 位置前馈网络
  • 所有子层:输出维度 dmodel=512d_{\text{model}} = 512

注意力机制图解

缩放点积注意力

多头注意力

核心公式

1. 缩放点积注意力(Scaled Dot-Product Attention):

Attention(Q,K,V)=softmax(QKTdk)V\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V

  • 缩放因子 1dk\frac{1}{\sqrt{d_k}} 防止点积过大导致 softmax 梯度消失
  • 比加法注意力更快、更节省空间(可利用高效矩阵乘法)

2. 多头注意力(Multi-Head Attention):

MultiHead(Q,K,V)=Concat(head1,…,headh)WO\text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \dots, \text{head}_h)W^O where headi=Attention(QWiQ,KWiK,VWiV)\text{where head}_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V)

  • 使用 h=8h=8 个并行注意力头
  • 每个头的维度 dk=dv=dmodel/h=64d_k = d_v = d_{\text{model}}/h = 64
  • 允许模型同时关注不同表示子空间的信息

3. 位置前馈网络(Position-wise FFN):

FFN(x)=max⁡(0,xW1+b1)W2+b2\text{FFN}(x) = \max(0, xW_1 + b_1)W_2 + b_2

  • 输入/输出维度:dmodel=512d_{\text{model}} = 512
  • 内层维度:dff=2048d_{ff} = 2048
  • 等价于两个核大小为 1 的卷积

4. 位置编码(Positional Encoding):

PE(pos,2i)=sin⁡(pos/100002i/dmodel)PE_{(pos, 2i)} = \sin(pos / 10000^{2i/d_{\text{model}}}) PE(pos,2i+1)=cos⁡(pos/100002i/dmodel)PE_{(pos, 2i+1)} = \cos(pos / 10000^{2i/d_{\text{model}}})

  • 波长从 2π2\pi 到 10000⋅2π10000 \cdot 2\pi 的几何级数
  • 对任意固定偏移 kk,PEpos+kPE_{pos+k} 可表示为 PEposPE_{pos} 的线性函数
  • 允许模型外推到比训练时更长的序列

5. 学习率调度(Warmup + Inverse Square Root):

lrate=dmodel−0.5⋅min⁡(step_num−0.5,step_num⋅warmup_steps−1.5)lrate = d_{\text{model}}^{-0.5} \cdot \min(step\_num^{-0.5}, step\_num \cdot warmup\_steps^{-1.5})

  • 前 warmup_steps=4000warmup\_steps=4000 步线性增加学习率
  • 之后按步数的平方根倒数递减

注意力机制的三种应用

类型查询来源键/值来源作用
编码器自注意力编码器前一层输出编码器前一层输出捕获输入序列内部依赖
解码器掩码自注意力解码器前一层输出解码器前一层输出(掩码未来位置)保持自回归特性
编码器-解码器注意力解码器前一层输出编码器输出关注输入序列相关信息

模型配置

参数基础模型大模型
层数 N66
dmodeld_{\text{model}}5121024
dffd_{ff}20484096
注意力头数 h816
dk=dvd_k = d_v6464
Dropout0.10.3
标签平滑 ϵls\epsilon_{ls}0.10.1
参数量65M213M
训练步数100K300K
训练时间12 小时3.5 天

四、自注意力 vs 循环 vs 卷积

特性自注意力循环卷积
每层复杂度O(n2⋅d)O(n^2 \cdot d)O(n⋅d2)O(n \cdot d^2)O(k⋅n⋅d2)O(k \cdot n \cdot d^2)
顺序操作数O(1)O(1)O(n)O(n)O(1)O(1)
最大路径长度O(1)O(1)O(n)O(n)O(log⁡k(n))O(\log_k(n))

关键优势:

  • 当 n<dn < d 时(通常成立),自注意力比循环层更快
  • 路径长度为常数,最利于学习长距离依赖
  • 完全并行化,训练效率最高

五、实验结果

WMT’14 机器翻译任务

数据集:

  • English-to-German:450 万句对,37K BPE 词汇
  • English-to-French:3600 万句对,32K word-piece 词汇

训练硬件:8 × NVIDIA P100 GPUs

BLEU 分数对比

模型EN-DEEN-FR训练成本 (FLOPs)
ByteNet23.75--
Deep-Att + PosUnk-39.21.0×10201.0 \times 10^{20}
GNMT + RL24.639.922.3×10192.3 \times 10^{19}
ConvS2S25.1640.469.6×10189.6 \times 10^{18}
MoE26.0340.562.0×10192.0 \times 10^{19}
GNMT + RL Ensemble26.3041.161.8×10201.8 \times 10^{20}
ConvS2S Ensemble26.3641.297.7×10197.7 \times 10^{19}
Transformer (base)27.338.13.3×10183.3 \times 10^{18}
Transformer (big)28.441.82.3×10192.3 \times 10^{19}

关键发现:

  • Transformer (big) 在 EN-DE 上超越所有集成模型 2+ BLEU
  • 训练成本仅为最佳竞争模型的 1/4 ~ 1/10
  • 基础模型 12 小时即可超越所有已发表模型

模型变体实验

变体变化PPLBLEU
(A) 头数h=1, dk=512d_k=5125.2924.9
h=4, dk=128d_k=1285.0025.5
h=8, dk=64d_k=64 (base)4.9225.8
h=16, dk=32d_k=324.9125.8
h=32, dk=16d_k=165.0125.4
(B) 键维度dk=16d_k=165.1625.1
dk=32d_k=325.0125.4
(C) 模型大小N=26.1123.7
N=45.1925.3
dmodel=1024d_{\text{model}}=10244.6626.0
dff=4096d_{ff}=40964.7526.2
(D) DropoutPdrop=0.0P_{drop}=0.05.7724.6
Pdrop=0.2P_{drop}=0.24.9525.5
(E) 位置编码学习的位置嵌入4.9225.7

关键发现:

  • 单头注意力比最佳设置差 0.9 BLEU
  • 减小 dkd_k 损害性能,说明兼容性计算不简单
  • 更大的模型更好,Dropout 对防止过拟合至关重要
  • 正弦位置编码与学习的位置嵌入效果几乎相同

英语成分句法分析

解析器训练数据WSJ 23 F1
Petrov et al. (2006)WSJ only90.4
Dyer et al. (2016)WSJ only91.7
Transformer (4 layers)WSJ only91.3
Transformer (4 layers)semi-supervised92.7
Dyer et al. (2016)generative93.3

关键发现:

  • Transformer 良好泛化到句法分析任务
  • 仅用 WSJ 40K 句子训练即超越 Berkeley-Parser
  • 无需任务特定调优即可获得竞争力结果

注意力可视化

自注意力可视化

观察:注意力头学会了追踪动词 “making” 的长距离依赖,完成 “making…more difficult” 短语。

指代消解 - 注意力头5

观察:注意力头5专门用于指代消解,如 “its” 的注意力非常尖锐地指向正确的先行词。

指代消解 - 注意力头6

观察:注意力头6同样显示出指代消解行为,在不同结构中追踪名词性成分的关系。

句法结构可视化

句法结构注意力

句法结构注意力2

观察:多个注意力头表现出与句子结构相关的行为,不同头学习执行不同的句法任务,如依存关系和短语边界检测。

六、与前序工作的对比

方法架构关键限制Transformer 如何解决
Seq2Seq (Sutskever 2014)LSTM 编码器-解码器固定向量瓶颈自注意力直接连接所有位置
Bahdanau Attention (2014)RNN + 注意力仍有循环结构完全消除循环
ConvS2S (2017)CNN 编码器-解码器路径长度 O(log⁡k(n))O(\log_k(n))路径长度 O(1)O(1)
ByteNet (2017)膨胀 CNN路径长度 O(log⁡k(n))O(\log_k(n))路径长度 O(1)O(1)
Extended Neural GPU (2016)循环 + 注意力复杂架构简单统一的注意力架构

七、总结

核心贡献

  1. Transformer 架构:首个完全基于注意力的序列转导模型,摒弃循环和卷积
  2. 多头自注意力:并行关注不同表示子空间,捕获多维度依赖
  3. 位置编码:正弦/余弦函数优雅地注入位置信息
  4. 训练效率:12 小时(基础模型)/ 3.5 天(大模型)即可达到 SOTA
  5. 泛化能力:在机器翻译和句法分析任务上均表现出色

技术影响

  • 现代 NLP 基础:BERT、GPT、T5 等所有大语言模型的基础架构
  • 跨领域扩展:Vision Transformer (ViT)、音频 Transformer、多模态 Transformer
  • 注意力机制标准化:自注意力成为深度学习的核心组件
  • 并行化范式:改变了深度学习模型的训练方式

局限性

  • 自注意力复杂度为 O(n2)O(n^2),对超长序列计算量大
  • 缺乏显式的序列建模归纳偏置(如 RNN 的顺序性)
  • 位置编码的外推能力有限
  • 论文未探索超过几千 token 的序列长度

八、参考资源

  • 论文: arXiv:1706.03762
  • 代码: tensor2tensor
  • 关键引用:
    • 注意力机制 [Bahdanau et al., 2014]
    • LSTM [Hochreiter & Schmidhuber, 1997]
    • 残差网络 [He et al., 2016]
    • 层归一化 [Ba et al., 2016]
    • Adam 优化器 [Kingma & Ba, 2015]---

分析日期: 2026-07-03