Attention Is All You Need — Transformer 论文精读

论文全称:Attention Is All You Need 作者:Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Łukasz Kaiser, Illia Polosukhin 发表:NeurIPS 2017(Neural Information Processing Systems) arXiv1706.03762 标签:#深度学习 NLP Transformer 自注意力 序列模型 论文精读


目录


一、历史背景与动机

1.1 序列建模的旧路:RNN 的统治时代

在 Transformer 提出之前,处理序列数据(文本、语音、时间序列)的主流方案是循环神经网络(RNN),尤其是其变体 LSTM 和 GRU。它们的工作方式就像一个人逐字阅读一段文字:读完第一个词,形成一个”理解”,再拿着这个理解读第二个词,如此往复。

这种”接力棒”式的信息传递有两个致命弱点:

  1. 无法并行:第 步的计算必须等待第 步完成,GPU 的并行算力被严重浪费。
  2. 长距离遗忘:句子越长,早期信息在传递过程中越容易被”冲淡”。就像一个电话传话游戏,传到第十个人时,原话已面目全非。

后续工作(如 ByteNet、ConvS2S)尝试用卷积神经网络替代循环,虽然实现了并行,但两个距离较远的词之间建立联系所需的操作次数仍随距离线性或对数增长——就像你想让两端的人交流,必须经过中间很多人层层转达。

1.2 注意力机制的前身

注意力机制(Attention Mechanism)在此之前已被用于辅助 RNN 的编码器-解码器结构,帮助解码器在生成每个词时”回头看”输入序列中哪些部分最相关。但它始终是 RNN 的附属品,从未单独挑起大梁。

1.3 Transformer 的一句话动机

既然注意力机制能直接捕捉任意两个位置之间的依赖关系,为什么还需要 RNN?

Transformer 的核心思路就是:完全抛弃循环结构,只用注意力机制本身来建模序列。这使得:

  • 任意两个位置之间的关系可以用常数步(而不是随距离增长的步数)建立;
  • 整个序列可以同时并行计算,而不是顺序处理。

二、核心思想概览

Transformer 是一个 Encoder-Decoder 架构,原本为机器翻译设计(将英文翻译成德文/法文)。

输入序列 (英文)                  输出序列 (德文)
"The cat sat on the mat"  →  "Die Katze saß auf der Matte"

     ┌─────────────┐              ┌─────────────┐
     │   Encoder   │  ─── z ───►  │   Decoder   │
     │  (理解输入)  │              │  (生成输出)  │
     └─────────────┘              └─────────────┘

两侧均由 N = 6 个相同的层堆叠而成,每一层内部包含:

  • Multi-Head Self-Attention(多头自注意力)
  • Position-wise Feed-Forward Network(逐位置前馈网络)
  • 残差连接 + 层归一化(贯穿始终的稳定剂)

整体模型的维度统一为


三、整体架构:编码器与解码器

3.1 编码器(Encoder)

编码器的任务是:读懂输入句子,将其压缩成一组富含语义的向量表示

每一层编码器由两个子层组成:

子层功能
Multi-Head Self-Attention让每个词”四处张望”,理解自己与其他词的关系
Feed-Forward Network对每个词的表示做进一步非线性变换

直觉类比

把编码器的 6 层想象成一个由 6 名翻译专家组成的审阅委员会。第 1 位专家读完原文后写下注解,传给第 2 位,每位都在前人的理解上进一步深化,最终形成全面的语义表示。

3.2 解码器(Decoder)

解码器的任务是:结合编码器的输出和已生成的部分译文,逐词生成目标序列。

每一层解码器有三个子层

子层功能特殊说明
Masked Multi-Head Self-Attention生成词时只能看到自己和之前的词加 Mask 防止”偷看未来”
Multi-Head Cross-Attention查询来自解码器,键值来自编码器将源语言信息引入
Feed-Forward Network对每个位置的表示做非线性变换与编码器相同

为什么要掩码(Masking)?

训练时我们知道完整的目标句子,但解码器在生成第 个词时,不能提前看到第 个词——否则等于”开卷考试”,模型永远学不会真正的生成能力。掩码将这些未来位置的注意力分数设为 ,经过 Softmax 后权重变为 0,相当于”遮住”了它们。


四、注意力机制

4.1 缩放点积注意力(Scaled Dot-Product Attention)

这是整个 Transformer 的核心计算单元。

三个角色

符号名称类比
(Query)查询你想搜索的关键词
(Key)数据库中每条记录的标签
(Value)数据库中每条记录的实际内容

过程类比

想象你在图书馆检索资料。你的查询 是”量子力学”,图书馆里每本书都有一个标签 ,你先计算自己的查询和每本书标签的匹配度,然后按匹配度加权地取出每本书的内容 ,综合得到你的”阅读结果”。

计算公式

分步解读

  1. :计算每对 Query-Key 的点积相似度,得到一个 的得分矩阵( 分别为query、Key&Value的序列长度)。
  2. :缩放因子。当 (键的维度)较大时,点积结果的数值会变得很大,导致 Softmax 的梯度趋近于零(饱和区)。除以 相当于把所有分数”压缩”到一个合理的范围内,让 Softmax 保持有效的梯度。
  3. :将得分转化为概率分布(注意力权重),所有位置的权重之和为 1。
  4. :用注意力权重对 Value 做加权求和,得到每个位置的最终输出向量。 Mask的方法:目前只能看见1~t-1,则让t之后的K设置为一个很小的负数,则经过softmax后变为0

数值稳定性的深层原因

假设 的各分量相互独立,均值为 0,方差为 1,则它们的点积的方差为 ,标准差为 。除以 将标准差归一化为 1,防止 Softmax 进入饱和区。


4.2 多头注意力(Multi-Head Attention)

单头注意力的局限:单次注意力只能关注一种”关系模式”。例如对于”银行”这个词,你可能同时需要:(1) 关注它旁边”存钱”来判断是金融机构,(2) 关注”河边”来判断是河岸。单头注意力很难同时捕捉这两种不同维度的依赖。

多头注意力的解决方案:把模型维度 切分成 份,让 个注意力头并行地在不同的子空间中学习不同的关系模式,最后拼接起来。

计算过程

原论文超参数 个头,每个头的维度

直觉类比

把多头注意力想象成一场多角度的审讯。8 位侦探同时审问同一个嫌疑人,每位侦探关注不同的细节——一位看微表情,一位听措辞,一位注意肢体语言……最后汇总所有侦探的判断,得出综合结论。

参数总量对比:尽管有 8 个头,但每个头的维度缩小为 ,总计算量与单头 的注意力大体相当,不会显著增加参数。


4.3 注意力在模型中的三种使用方式

Transformer 中的注意力并非”一刀切”——它在不同位置扮演不同角色:

位置Q 来源K, V 来源用途
编码器自注意力编码器当前层编码器当前层输入句子中每个词理解其他词
解码器自注意力(带掩码)解码器当前层解码器当前层(仅过去)目标句子中每个词理解之前生成的词
解码器交叉注意力解码器当前层编码器输出每个目标词”问询”源语言的信息

五、位置前馈网络(Position-wise Feed-Forward Networks)

注意力层完成了”信息汇聚”的工作,而前馈网络负责对每个位置的表示进行独立的非线性变换,增加模型的表达能力。

关键细节

  • 这个网络对序列中的每个位置独立施用(“position-wise”),参数在各位置共享,但不同层之间参数不同
  • 中间隐藏层维度 ,比 大 4 倍,这个”先扩后缩”的结构给模型提供了充足的表达空间。
  • 激活函数为 ReLU)。

FFN 的直觉

如果把多头注意力比作”社交网络”——每个词在全局范围内广播自己、聆听他人,那么 FFN 就是”个人的深度思考”——每个词在私下里对汇聚到的信息进行加工提炼,而不与他人交流。


六、嵌入与位置编码

6.1 词嵌入(Embeddings)

与大多数序列模型相同,Transformer 将每个词(token)映射到 维的连续向量空间。编码器输入、解码器输入、解码器最终的预softmax线性层共享同一套嵌入矩阵(权重绑定),并将嵌入权重乘以 以调节其数量级。

6.2 位置编码(Positional Encoding)

注意力机制的天然缺陷

自注意力的计算是置换不变的(permutation-invariant):如果把句子中所有词打乱顺序,注意力机制得到的结果完全相同(只是对应关系变了)。这意味着模型天生”不感知”词序!

为了弥补这一缺陷,Transformer 在词嵌入之上直接加入位置编码向量,给每个位置赋予独特的”坐标”信息。

原论文采用固定的正弦/余弦函数

其中 为位置, 为维度索引。

这种设计的精妙之处

  1. 每个位置有唯一编码:不同位置的编码向量不同,模型可区分”我爱你”和”你爱我”。
  2. 相对位置可推断:对于任意固定偏移量 可以表示为 的线性函数,这意味着模型可以学会利用相对位置信息。
  3. 外推到更长序列:正弦函数的周期性使模型在理论上可以处理比训练时更长的序列(虽然实际效果有限)。

位置编码的直觉

想象每个位置都是地球上的一个经纬度坐标,用不同频率的正弦波”描述”它。低频波区分大尺度位置(“在句子开头还是结尾”),高频波区分细粒度位置(“第 3 个词还是第 4 个词”)。

论文也测试了可学习的位置编码,发现效果与固定编码几乎相同,最终选择固定编码,因为它可以更好地泛化到更长序列。


七、残差连接与层归一化

每个子层(无论是注意力层还是前馈层)的输出都经过:

残差连接(Residual Connection)

这个 就是 ResNet 中著名的跳跃连接。它的作用是给梯度开辟一条”高速公路”——即使某一层的变换很糟糕,梯度仍然可以通过恒等通路顺畅地向前传播,避免了深层网络的梯度消失问题。

层归一化(Layer Normalization)

对每个样本的每个位置,在 维度上做归一化(均值为 0,方差为 1)。与批归一化(Batch Normalization)不同,层归一化不依赖 batch 中其他样本的统计量,更适合序列长度变化的 NLP 场景。

记忆技巧

“Add & Norm” = 加法(残差)+ 归一化,这两步始终成对出现在每个子层之后,是整个 Transformer 的稳定剂。


八、为什么使用自注意力:与 RNN、CNN 的比较

论文第 4 节专门论证了自注意力相比 RNN 和 CNN 的优势,从三个维度进行定量比较:

层类型每层计算复杂度最小顺序操作数最大路径长度
自注意力
循环层(RNN)
卷积层(CNN, 为卷积核宽度)
受限自注意力(窗口

三个维度的解读

  1. 计算复杂度:当序列长度 小于特征维度 时(NLP 中常见),自注意力的 优于 RNN 的
  2. 顺序操作数:自注意力为 ,整个序列完全并行;RNN 为 ,必须顺序计算。
  3. 最大路径长度:这衡量的是序列中任意两个位置之间信号传递所需的步骤数。路径越短,长距离依赖越容易学习。自注意力直接连通任意两个位置,路径长度恒为 ;RNN 需要经过 步中间状态。

自注意力的权衡

自注意力的唯一代价是:复杂度随序列长度二次增长),当序列极长时(如处理整本书),内存和计算会成为瓶颈。这也是后续 Longformer、Linear Attention 等工作的改进出发点。


九、训练设置

9.1 数据与批处理

  • 英德翻译:WMT 2014 数据集,约 450 万个句子对。
  • 英法翻译:WMT 2014 数据集,约 3600 万个句子对。
  • 使用 字节对编码(Byte-Pair Encoding, BPE) 进行分词,英德共享约 37,000 个词元的词表,英法约 32,000 个词元。
  • 每个训练批次约包含 25,000 个源词元和 25,000 个目标词元

9.2 硬件与训练时长

模型规模GPU 数量训练时长FLOPs(估算)
Base Model8 × NVIDIA P10012 小时(100,000 步)~
Big Model8 × NVIDIA P1003.5 天(300,000 步)~

9.3 优化器

使用 Adam 优化器,参数为

学习率采用热身(warmup)调度

这意味着学习率在前 线性增大,之后按步数的平方根衰减

热身学习率的直觉

训练初期,模型参数随机初始化,梯度信号噪声很大,此时用小学习率缓慢探索,避免损失震荡;等模型对任务有了基本感知后,再逐渐加速,之后随着收敛需要更精细调整时再慢下来。

9.4 正则化

技术细节
残差 Dropout在每个子层的输出(加法之前)施用,
注意力 Dropout在 Softmax 注意力权重后施用,同为
嵌入 Dropout对输入嵌入与位置编码之和施用
标签平滑(Label Smoothing),将原本硬标签 软化,防止过拟合

十、实验结果

10.1 机器翻译

模型EN→DE BLEUEN→FR BLEU训练成本(FLOPs)
ByteNet23.75
ConvS2S25.1640.46
MoE26.0340.56
Transformer (Base)27.338.1
Transformer (Big)28.441.8

Transformer (Big) 在英德翻译上以超过 2 BLEU 的优势刷新了当时的最好成绩(包括集成模型),同时训练成本仅为竞争模型的一小部分。

10.2 英语成分句法分析(Constituency Parsing)

为验证架构的泛化能力,论文还在 Penn Treebank 数据集上测试了英语句法分析任务(一个与翻译完全不同的结构预测任务):

  • 大数据设置下,Transformer 未做任何任务特定调整,仍取得了接近最优的成绩(F1 = 92.7)。
  • 小数据(仅 40,000 句)设置下,Transformer 同样表现出色,甚至超过了众多专门针对该任务设计的模型,展示了其强大的泛化性。

十一、消融实验(Ablation Study)

论文通过系统地修改超参数,验证了各设计选择的必要性,以下是关键发现:

11.1 注意力头数量的影响

头数 EN→DE BLEU
1(单头)23.3
426.9
827.3
1625.5
3225.7

发现:头数太少(如单头)性能差,但头数太多(如 16、32)同样会下降——头越多,每个头的维度 越小,表达能力反而受限。8 头是最优点

11.2 键维度 的影响

减小 会明显损害性能,表明判断键-查询相容性(compatibility)并非一件容易的事——点积本身是一种较为简单的相似度度量,维度过小时无法充分表达。

11.3 模型规模

更大的模型(更多层、更大的 )持续带来性能提升,但需要配合更强的 Dropout 防止过拟合。

11.4 位置编码方式

正弦位置编码替换为可学习位置嵌入,结果几乎完全相同(差不到 0.1 BLEU),表明两种方式均有效。作者最终保留固定编码,因其对序列长度的外推更具潜力。


十二、论文贡献总结与深远影响

12.1 核心贡献

  1. 提出了第一个完全基于注意力机制的序列转换模型,彻底摒弃了循环结构和卷积结构。
  2. 设计了缩放点积注意力和多头注意力机制,使模型能够在多个子空间并行捕获不同类型的依赖关系。
  3. 提出了位置编码方案,通过正弦函数将位置信息注入注意力模型,解决了其置换不变性的缺陷。
  4. 在机器翻译和句法分析任务上取得了当时的最优结果,同时大幅降低了训练时间。

12.2 深远影响

Transformer 是当代 AI 革命的直接技术基础,几乎所有现代大语言模型都直接或间接源于此架构:

Transformer (2017)
     │
     ├── GPT 系列 (OpenAI, 2018→)       [Decoder-only,生成式]
     ├── BERT (Google, 2018)            [Encoder-only,理解式]
     ├── T5 (Google, 2019)              [完整 Encoder-Decoder]
     ├── Vision Transformer / ViT (2020) [图像领域]
     ├── DALL-E, Stable Diffusion (2021+)[图像生成]
     ├── Whisper (2022)                 [语音识别]
     ├── GPT-4, Claude, Gemini (2023→)  [多模态大模型]
     └── AlphaFold 2 (2021)             [蛋白质结构预测]

这篇论文的标题 “Attention Is All You Need” 是对 The Beatles 名曲 “All You Need Is Love” 的戏仿,而 “Transformer” 这个名字是作者之一 Jakob Uszkoreit 因为喜欢这个词的音感而随意选取的——一个随性命名的模型,最终改变了整个人工智能领域。


附录:超参数一览表

超参数Base ModelBig Model
编码器/解码器层数 66
模型维度 5121024
前馈层维度 20484096
注意力头数 816
键/值维度 6464
Dropout0.10.3
标签平滑 0.10.1
热身步数40004000
参数量65M213M

论文结语(意译)

我们期待 Transformer 被应用于文本以外的其他模态,并希望研究局部的、受限的注意力机制以高效处理图像、音频和视频等大型输入。让生成变得更少顺序依赖是我们的另一个研究目标。

—— Vaswani et al., 2017


原始论文:Vaswani, A. et al. (2017). Attention Is All You Need. NeurIPS 2017. arXiv:1706.03762