Attention Is All You Need

作者: Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Łukasz Kaiser, Illia Polosukhin 年份: 2017 会议: NeurIPS 分类: 网络架构

论文笔记:Attention Is All You Need

元信息

项目内容
机构Google Brain, Google Research, University of Toronto
日期June 2017
链接arXiv
对比基线RNN, LSTM, ConvS2S, GNMT

一句话总结

提出 Transformer 架构,完全抛弃 RNN 和 CNN,仅依赖 Self-Attention 机制实现序列到序列建模,在机器翻译任务上达到 SOTA 且训练速度大幅提升

核心贡献

Transformer 架构: 首个完全基于 Self-AttentionEncoder-Decoder 架构,消除了对循环和卷积的依赖,实现了全局依赖的并行计算

Scaled Dot-Product Attention: 提出缩放点积注意力机制,通过 dk\sqrt{d_k} 缩放因子解决高维点积值过大导致 Softmax 梯度消失的问题

Multi-Head Attention: 将注意力机制分为多个子空间并行计算,使模型能同时关注不同位置的不同表示子空间信息

位置编码: 提出基于正弦/余弦函数的 Positional Encoding,为无递归结构的模型注入序列位置信息

问题背景

要解决的问题

序列建模和序列转导(如机器翻译)的主流方法依赖 RNNLSTM/GRU),存在两个根本性问题:

  1. 顺序计算瓶颈: RNN 按时间步顺序处理,无法充分利用现代 GPU 的并行计算能力
  2. 长距离依赖衰减: 尽管有门控机制,RNN 在处理长序列时仍难以捕获远距离依赖关系

现有方法的局限

LSTM/GRU: 引入门控改善梯度流,但仍受限于顺序计算,O(n)O(n) 的序列计算步数不可并行

ConvS2S (ByteNet, ConvS2S): 用卷积替代循环实现并行化,但捕获长距离依赖需要 O(n/k)O(n/k)O(logkn)O(\log_k n) 层卷积堆叠

注意力机制在已有工作中仅作为 RNN 的辅助组件(如 Bahdanau Attention),未被单独用作建模核心

本文的动机

注意力机制天然具有 O(1)O(1) 的任意距离依赖建模能力

如果能完全用注意力替代循环和卷积,就可以同时获得全局依赖建模能力和完全并行化的训练效率

目标:设计一个仅基于注意力的架构,证明其在质量和效率上都能超越 RNN/CNN 方案

方法详解

模型架构

Transformer 采用经典的 Encoder-Decoder 结构:

  • Encoder: N=6N=6 层相同的层堆叠,每层包含 Multi-Head Attention + Feed-Forward Network,每个子层后接 残差连接 + Layer Normalization
  • Decoder: N=6N=6 层相同的层堆叠,除 encoder 的两个子层外,额外增加一个对 encoder 输出的 cross-attention 子层;decoder 的 self-attention 使用 mask 防止关注未来位置
  • Embedding: 输入/输出共享嵌入矩阵,权重乘以 dmodel\sqrt{d_\text{model}}
  • 超参数: dmodel=512d_\text{model}=512, dff=2048d_{ff}=2048, h=8h=8, dk=dv=64d_k=d_v=64

核心模块

模块1: Scaled Dot-Product Attention

设计动机: 点积注意力计算高效,但当 dkd_k 较大时点积值会增大,导致 Softmax 进入饱和区梯度极小

具体实现:

  • 输入为 queries QQ, keys KK, values VV
  • 计算 QK/dkQK^\top / \sqrt{d_k} 得到注意力权重,经 Softmax 归一化后与 VV 加权求和
  • 缩放因子 1/dk1/\sqrt{d_k} 保持点积方差为 1,防止梯度消失

模块2: Multi-Head Attention

设计动机: 单一注意力函数在 dmodeld_\text{model} 维空间中计算,无法同时关注不同子空间的模式

具体实现:

  • Q,K,VQ, K, V 分别通过 hh 组独立的线性变换投影到 dk,dk,dvd_k, d_k, d_v 维子空间
  • 每个 head 独立计算 Scaled Dot-Product Attention
  • hh 个 head 的输出拼接后再通过线性变换得到最终输出
  • 三种使用方式: encoder self-attention, decoder masked self-attention, encoder-decoder cross-attention

模块3: Position-wise Feed-Forward Network

设计动机: 注意力层是线性加权,需要非线性变换增加表达能力

具体实现: 两层全连接 + ReLU 激活,FFN(x)=max(0,xW1+b1)W2+b2\text{FFN}(x) = \max(0, xW_1 + b_1)W_2 + b_2

内层维度 dff=2048d_{ff}=2048dmodel=512d_\text{model}=512 的 4 倍,相当于 kernel size 为 1 的两层卷积

模块4: Positional Encoding

设计动机: Transformer 无递归/卷积结构,需要显式注入位置信息

具体实现: 使用不同频率的正弦/余弦函数编码位置

正弦编码的优势:(1) 可以表示任意长度的序列;(2) 相对位置可通过线性变换表示,即 PEpos+kPE_{pos+k} 可以表示为 PEposPE_{pos} 的线性函数

关键公式

公式1: Scaled Dot-Product Attention

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

含义: 核心注意力计算,dk\sqrt{d_k} 缩放防止点积值过大导致 softmax 饱和

符号说明:

  • QRn×dkQ \in \mathbb{R}^{n \times d_k}: query 矩阵
  • KRm×dkK \in \mathbb{R}^{m \times d_k}: key 矩阵
  • VRm×dvV \in \mathbb{R}^{m \times d_v}: value 矩阵
  • n,mn, m: query 和 key/value 的序列长度

公式2: Multi-Head Attention

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

含义: hh 个独立 head 在不同子空间并行计算注意力,拼接后线性变换

符号说明:

  • WiQRdmodel×dkW_i^Q \in \mathbb{R}^{d_\text{model} \times d_k}, WiKRdmodel×dkW_i^K \in \mathbb{R}^{d_\text{model} \times d_k}, WiVRdmodel×dvW_i^V \in \mathbb{R}^{d_\text{model} \times d_v}: 第 ii 个 head 的投影矩阵
  • WORhdv×dmodelW^O \in \mathbb{R}^{hd_v \times d_\text{model}}: 输出投影
  • h=8h=8, dk=dv=dmodel/h=64d_k = d_v = d_\text{model}/h = 64

公式3: 正弦位置编码

PE(pos,2i)=sin(pos100002i/dmodel)PE_{(pos, 2i)} = \sin\left(\frac{pos}{10000^{2i/d_\text{model}}}\right) PE(pos,2i+1)=cos(pos100002i/dmodel)PE_{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{2i/d_\text{model}}}\right)

含义: 偶数维用 sin、奇数维用 cos,不同维度对应不同频率的正弦波,从 2π2\pi100002π10000 \cdot 2\pi 的等比波长

符号说明:

  • pospos: token 在序列中的位置
  • ii: 维度索引,0i<dmodel/20 \leq i < d_\text{model}/2

性质: 对于任意固定偏移 kkPEpos+kPE_{pos+k} 可以表示为 PEposPE_{pos} 的线性函数,使模型能学习相对位置关系

公式4: Position-wise FFN

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

含义: 两层线性变换夹 ReLU,等价于 kernel size 1 的两层卷积

符号说明:

  • W1Rdmodel×dffW_1 \in \mathbb{R}^{d_\text{model} \times d_{ff}}, W2Rdff×dmodelW_2 \in \mathbb{R}^{d_{ff} \times d_\text{model}}
  • dff=2048=4×dmodeld_{ff} = 2048 = 4 \times d_\text{model}

公式5: 子层连接

LayerNorm(x+Sublayer(x))\text{LayerNorm}(x + \text{Sublayer}(x))

含义: 每个子层(attention 或 FFN)都使用 残差连接 + Layer Normalization,稳定深层网络训练

实验结果

数据集

数据集规模任务
WMT 2014 EN-DE4.5M 句对英德翻译
WMT 2014 EN-FR36M 句对英法翻译

主要结果

模型EN-DE BLEUEN-FR BLEU训练成本 (FLOPs)
GNMT + RL24.639.921.4×10201.4 \times 10^{20}
ConvS2S25.1640.461.5×10201.5 \times 10^{20}
Transformer (base)27.338.13.3×10183.3 \times 10^{18}
Transformer (big)28.441.02.3×10192.3 \times 10^{19}

Transformer big 在 EN-DE 上以 28.4 BLEU 超越所有此前模型(包括 ensemble),训练成本仅为 GNMT 的 1/6

EN-FR 上以 41.0 BLEU 创新 SOTA,训练成本仅为此前最优模型的 1/4

Base 模型仅需 12 小时在 8 块 P100 上训练完成

训练细节

优化器: Adam,β1=0.9,β2=0.98,ϵ=109\beta_1=0.9, \beta_2=0.98, \epsilon=10^{-9}

学习率调度: Warmup + inverse square root decay, lr=dmodel0.5min(step0.5,stepwarmup_steps1.5)lr = d_\text{model}^{-0.5} \cdot \min(\text{step}^{-0.5}, \text{step} \cdot \text{warmup\_steps}^{-1.5})

Warmup: 4000 步

正则化: Dropout Pdrop=0.1P_{drop}=0.1(residual, attention weights, embedding sum),Label Smoothing ϵls=0.1\epsilon_{ls}=0.1

Batch Size: 约 25000 source + 25000 target tokens per batch

消融实验

变体EN-DE BLEU
Base (h=8, d_k=64)25.8
单头 (h=1)24.9 (-0.9)
过多头 (h=16, d_k=32)25.5 (-0.3)
减小 d_k=1624.9 (-0.9)
增大模型 (d_model=1024)26.0 (+0.2)
Dropout=0.225.5
学习的位置编码25.7 (≈base)

关键发现: (1) 头数和 head 维度需要平衡,太少或太小都影响性能;(2) 更大模型更好;(3) 正弦位置编码与学习的位置编码性能几乎相同

局限性

O(n2)O(n^2) 计算和内存复杂度: Self-attention 对序列长度是二次的,限制了超长序列处理能力

缺乏局部归纳偏置: 不像 CNN/RNN 天然具有局部性和平移不变性,Transformer 需要从数据中学习这些模式

仅验证机器翻译: 论文主要在 MT 上实验,未充分探索其他任务的泛化性(尽管后续工作证明了其通用性)

固定位置编码: 正弦编码虽然理论上可外推,但实践中对超出训练长度的序列效果有限

解码效率: 自回归解码仍需逐 token 生成,inference 阶段无法完全并行

相关概念

Self-Attention

Multi-Head Attention

Positional Encoding

Encoder-Decoder

Layer Normalization

残差连接

Sequence-to-Sequence

Bahdanau Attention

BERT

GPT

速查卡片

Transformer (Attention Is All You Need)

  • 核心: 完全基于 self-attention 的 encoder-decoder 架构,抛弃 RNN/CNN
  • 方法: Scaled Dot-Product Attention + Multi-Head + 正弦位置编码 + 残差连接 + LayerNorm
  • 结果: WMT EN-DE 28.4 BLEU, EN-FR 41.0 BLEU,训练成本降低数倍
  • 影响: 奠定了现代 NLP(BERT, GPT 系列)和 CV(ViT)的架构基础

笔记创建时间: 2026-04-03