Attention Is All You Need - 论文解读

2026-03-21

论文信息

  • 标题: Attention Is All You Need
  • 作者: Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Łukasz Kaiser, Illia Polosukhin (Google Brain)
  • 发表: NeurIPS 2017
  • arXiv: 1706.03762
  • 引用量: 10万+ (截至2026年,AI领域最具影响力的论文之一)

一句话总结

Transformer 彻底抛弃了 RNN/CNN,仅用注意力机制构建序列模型,实现了更高性能、更快训练、更强并行化,奠定了 GPT、BERT、Claude 等大语言模型的基础架构。


一、研究动机与问题背景

1.1 时代背景:RNN 的困境

2017年之前,序列建模的王者是 RNN/LSTM/GRU,但它们存在致命缺陷:

问题描述
串行计算必须按时间步顺序处理,无法并行,训练极慢
长距离依赖信息从位置 1 传到位置 1000 需要经过 999 次变换,梯度消失/爆炸
内存瓶颈批处理受限于序列长度,长序列训练困难

论文原话: "This inherently sequential nature precludes parallelization within training examples, which becomes critical at longer sequence lengths."

1.2 Attention 的崛起

Attention 机制(Bahdanau et al., 2014)已广泛应用于机器翻译,但只是作为 RNN 的附属组件

核心问题:能否完全抛弃 RNN,只用 Attention?


二、核心创新:Transformer 架构

2.1 架构总览

BASH
┌─────────────────────────────────────────────────────────────┐ │ 输出层 │ │ Linear + Softmax │ └─────────────────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────────────────┐ │ Decoder Stack (N=6) │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ Masked Multi-Head Self-Attention │ │ │ │ Encoder-Decoder Attention │ │ │ │ Feed-Forward Network │ │ │ │ + Residual Connection + LayerNorm │ │ │ └─────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────────────────┐ │ Encoder Stack (N=6) │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ Multi-Head Self-Attention │ │ │ │ Feed-Forward Network │ │ │ │ + Residual Connection + LayerNorm │ │ │ └─────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────────────────┐ │ Input Embedding + Positional Encoding │ └─────────────────────────────────────────────────────────────┘

2.2 核心组件详解

2.2.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

关键设计:

  • Q (Query): 查询向量,表示"我要找什么"
  • K (Key): 键向量,表示"我是什么"
  • V (Value): 值向量,表示"我的内容是什么"
  • dk\sqrt{d_k} 缩放: 防止点积过大导致 softmax 梯度消失

为什么要除以 dk\sqrt{d_k}

dkd_k 很大时,点积 qkq \cdot k 的方差是 dkd_k(假设元素独立且方差为 1)。过大的点积使 softmax 进入饱和区,梯度接近 0。缩放后可以保持稳定的梯度流。

2.2.2 Multi-Head Attention

公式: MultiHead(Q,K,V)=Concat(head1,...,headh)WO\text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, ..., \text{head}_h)W^O

其中 headi=Attention(QWiQ,KWiK,VWiV)\text{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_{model}/h = 64
  • 总维度 dmodel=512d_{model} = 512

设计直觉: 多头允许模型在不同的表示子空间中并行关注信息,类似 CNN 的多通道。

2.2.3 三种 Attention 应用场景

类型Query 来源Key/Value 来源作用
Encoder Self-Attention上一层编码器输出上一层编码器输出编码器内部信息融合
Decoder Self-Attention上一层解码器输出上一层解码器输出 (带 Mask)解码器内部信息融合,防止看到未来
Encoder-Decoder Attention上一层解码器输出编码器顶层输出解码器关注编码器输出 (类似传统 Attention)

2.2.4 Position-wise Feed-Forward Network

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

参数:

  • 输入/输出维度: dmodel=512d_{model} = 512
  • 隐藏层维度: dff=2048d_{ff} = 2048 (4 倍扩展)

作用: 对每个位置独立应用非线性变换,增强模型表达能力。

2.2.5 Positional Encoding

由于 Transformer 没有循环和卷积,必须显式注入位置信息:

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

为什么用正弦/余弦?

作者假设这种编码可以让模型学习相对位置关系:对于任意固定偏移 kkPEpos+kPE_{pos+k} 可以表示为 PEposPE_{pos} 的线性函数。


三、为什么 Self-Attention 更好?

3.1 复杂度对比

层类型每层复杂度顺序操作数最大路径长度
Self-AttentionO(n2d)O(n^2 \cdot d)O(1)O(1)O(1)O(1)
RecurrentO(nd2)O(n \cdot d^2)O(n)O(n)O(n)O(n)
ConvolutionalO(knd2)O(k \cdot n \cdot d^2)O(1)O(1)O(logk(n))O(\log_k(n))

3.2 核心优势

  1. 并行化: Self-Attention 所有位置可以同时计算,RNN 必须顺序计算
  2. 长距离依赖: Self-Attention 任意两个位置之间只需 1 步,RNN 需要 nn
  3. 计算效率: 当序列长度 n<dn < d(词向量维度)时,Self-Attention 比 RNN 更快

关键洞察: 在机器翻译中,句子通常编码为 word-piece,长度 nn 往往小于表示维度 d=512d=512,因此 Self-Attention 更高效。


四、训练细节

4.1 数据集

任务数据集规模词汇表
EN-DEWMT 2014450 万句对37000 BPE tokens
EN-FRWMT 20143600 万句对32000 word-piece

4.2 硬件与时间

模型GPU训练时间每步耗时
Base8 × P10012 小时0.4 秒
Big8 × P1003.5 天1.0 秒

4.3 优化器

Adam + 学习率预热:

lrate=dmodel0.5min(step_num0.5,step_numwarmup_steps1.5)lrate = d_{model}^{-0.5} \cdot \min(step\_num^{-0.5}, step\_num \cdot warmup\_steps^{-1.5})

  • 前 4000 步线性增加学习率
  • 之后按步数倒数平方根衰减

4.4 正则化

技术参数作用
Residual DropoutPdrop=0.1P_{drop} = 0.1防止过拟合
Label Smoothingϵls=0.1\epsilon_{ls} = 0.1提高泛化,降低困惑度

五、实验结果

5.1 机器翻译

模型EN-DE BLEUEN-FR BLEU训练成本 (FLOPs)
GNMT + RL (RNN)24.639.921.4×10201.4 \times 10^{20}
ConvS2S (CNN)25.1640.461.5×10201.5 \times 10^{20}
Transformer (Base)27.338.13.3×10183.3 \times 10^{18}
Transformer (Big)28.441.82.3×10192.3 \times 10^{19}

关键发现:

  • EN-DE: 比 ConvS2S 集成模型高 2+ BLEU,训练成本仅 1/40
  • EN-FR: 刷新 SOTA,训练成本仅 1/5

5.2 英语句法分析

Transformer 在英语成分句法分析任务上表现优异:

设置F1 分数
WSJ only91.3
Semi-supervised92.7

证明 Transformer 具有良好的任务泛化能力。

5.3 消融实验

变量最优设置发现
头数8单头差 0.9 BLEU,过多头也下降
模型深度6 层更深更好,但有边际效应
模型宽度dmodel=1024d_{model}=1024更宽更好
Dropout0.1对防止过拟合至关重要
位置编码Sinusoid ≈ Learned两者效果几乎相同

六、影响与遗产

6.1 开启大模型时代

Transformer 架构成为所有现代大语言模型的基础:

模型发布时间参数规模基于 Transformer
BERT2018340MEncoder-only
GPT2018117MDecoder-only
GPT-32020175BDecoder-only
ChatGPT/GPT-42022-2023未公开Decoder-only
Claude2023未公开Decoder-only
LLaMA20237B-70BDecoder-only

6.2 架构变体

  • Encoder-only: BERT, RoBERTa → 文本理解
  • Decoder-only: GPT, LLaMA → 文本生成
  • Encoder-Decoder: T5, BART → 序列到序列

6.3 跨领域应用

Transformer 已扩展到:

  • 计算机视觉: Vision Transformer (ViT), Swin Transformer
  • 语音识别: Whisper, Wav2Vec
  • 多模态: CLIP, DALL-E, Stable Diffusion
  • 科学计算: AlphaFold 2 (蛋白质结构预测)

七、局限性与后续工作

7.1 论文指出的局限

  1. 序列长度 O(n2)O(n^2) 复杂度: 长序列计算成本高
  2. Restricted Self-Attention: 可限制到局部窗口 rr,但增加路径长度

7.2 后续改进方向

问题解决方案
长序列复杂度Sparse Attention, Longformer, Performer
位置编码RoPE (旋转位置编码), ALiBi
注意力效率Flash Attention, Multi-Query Attention
参数效率LoRA, Adapter

八、术语解释

术语解释
Self-Attention自注意力,Query/Key/Value 来自同一序列
Multi-Head多头注意力,并行多个注意力函数
Encoder-Decoder Attention交叉注意力,解码器关注编码器输出
Positional Encoding位置编码,注入序列位置信息
Residual Connection残差连接,x+Sublayer(x)x + \text{Sublayer}(x)
Layer Normalization层归一化,稳定训练
BLEU机器翻译评价指标,越高越好
BPEByte-Pair Encoding,子词分词算法

九、复现与代码

官方代码: https://github.com/tensorflow/tensor2tensor

核心 PyTorch 实现 (简化版):

PYTHON
import torch import torch.nn as nn import math class ScaledDotProductAttention(nn.Module): def __init__(self, d_k): super().__init__() self.scale = math.sqrt(d_k) def forward(self, Q, K, V, mask=None): # Q: [batch, heads, seq_len, d_k] attn = torch.matmul(Q, K.transpose(-2, -1)) / self.scale if mask is not None: attn = attn.masked_fill(mask == 0, -1e9) attn = torch.softmax(attn, dim=-1) return torch.matmul(attn, V) class MultiHeadAttention(nn.Module): def __init__(self, d_model, n_heads): super().__init__() self.d_k = d_model // n_heads self.n_heads = n_heads self.W_q = nn.Linear(d_model, d_model) self.W_k = nn.Linear(d_model, d_model) self.W_v = nn.Linear(d_model, d_model) self.W_o = nn.Linear(d_model, d_model) self.attention = ScaledDotProductAttention(self.d_k) def forward(self, x, mask=None): batch_size = x.size(0) Q = self.W_q(x).view(batch_size, -1, self.n_heads, self.d_k).transpose(1, 2) K = self.W_k(x).view(batch_size, -1, self.n_heads, self.d_k).transpose(1, 2) V = self.W_v(x).view(batch_size, -1, self.n_heads, self.d_k).transpose(1, 2) out = self.attention(Q, K, V, mask) out = out.transpose(1, 2).contiguous().view(batch_size, -1, self.n_heads * self.d_k) return self.W_o(out)

十、复查记录

日期版本更新内容
2026-03-21v1.0初稿完成,基于 TeX Source 深度解析

参考资料

  1. Vaswani et al. (2017). Attention Is All You Need. NeurIPS.
  2. Bahdanau et al. (2014). Neural Machine Translation by Jointly Learning to Align and Translate.
  3. Hochreiter & Schmidhuber (1997). Long Short-Term Memory.
  4. He et al. (2016). Deep Residual Learning for Image Recognition.
  5. 《Attention Is All You Need》论文原文及 TeX Source

诗云

弃循环而不用,唯注意力独行。 八头并行观全局,六层叠加造精英。 BLEU刷新惊四座,训练速成冠群英。 从此模型无边界,GPT起而世界惊。