Transformer论文逐段精读

这是一份基于李沐讲解《Attention Is All You Need》整理的Transformer模型深度解析个人笔记。笔记结构进行了逻辑梳理,重点突出了模型架构、核心组件原理及李沐的深度见解,便于日后复习查阅。

一、 论文背景与核心贡献

  • 历史地位:Transformer 被认为是继 MLP、CNN、RNN 之后的第四大类基础模型架构,不仅统一了自然语言处理(NLP)领域的范式,还成功破圈至图像、语音和多模态领域。
  • 原有痛点:传统的序列模型(如 RNN、CNN)难以实现高度并行计算,且由于时序的逐步传递,RNN 在长距离依赖建模上表现较差且容易丢失早期信息。
  • 核心突破:提出了一种**完全基于注意力机制(Self-Attention)**的全新架构,彻底抛弃了循环(Recurrence)和卷积(Convolution),不仅实现了极高的计算并行度,且在机器翻译任务上达到了当年的最高水平(SOTA)。

二、 整体模型架构 (Encoder-Decoder)

Transformer 采用经典的**编码器-解码器(Encoder-Decoder)**架构,整个模型完全由注意力机制和全连接层堆叠而成。

  • 编码器 (Encoder):由 N=6N=6 个完全相同的层(Layer)堆叠而成。每层包含两个子层:多头自注意力机制(Multi-Head Self-Attention)逐位置前馈神经网络(Point-wise FFN)
  • 解码器 (Decoder):同样由 6 个层组成,采用自回归(Auto-regressive)模式逐词生成(即预测当前词时,会把之前生成的词作为输入)。除了编码器的两个子层外,解码器多出一个掩码多头自注意力层(Masked Multi-Head Attention),以防止预测时提前“看到”未来的信息。
  • 残差与归一化:为了方便残差连接相加,模型中所有维度的输出统一固定为 dmodel=512d_{model} = 512。每个子层后均紧跟残差连接和层归一化(Layer Normalization)

三、 核心组件深入解析

1. 层归一化 (Layer Normalization vs. Batch Normalization)

  • 为何不用 Batch Norm:时序数据长度往往不一,Batch Norm 沿特征维度跨样本求均值和方差,当序列长度波动大(且有大量补零)时,均方差抖动剧烈,且难以应对预测时遇到的超长序列。
  • Layer Norm 优势:对单个样本内部的所有特征沿序列长度求均值和方差,不依赖全局,更适合变长的时序数据。 层归一化对比

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

  • 公式Attention(Q,K,V)=Softmax(QKTdk)VAttention(Q, K, V) = Softmax(\frac{QK^T}{\sqrt{d_k}})V
  • 原理:计算 Query (QQ) 和 Key (KK) 的内积作为相似度权重,通过 Softmax 归一化后,将其作为对应 Value (VV) 的加权和输出。
  • 缩放因子的作用(为何除以 dk\sqrt{d_k}:当维度 dkd_k (如512)较大时,点积的结果会非常大,导致 Softmax 函数的输出向两极分化(靠近0或1),使得梯度变得极小导致梯度消失现象。除以 dk\sqrt{d_k} 能够有效稳定梯度。
QKV解释 Q(Query)、K(Key)和 V(Value)向量本质上是通过输入向量(或上一层的输出向量)与三个不同的、可学习的权重矩阵相乘(线性投影)得到的。

1. Q向量 (Query - 查询向量)

  • 物理含义:代表当前正在处理(或聚焦)的词汇或位置。它就像是一个“搜索词”,用来去序列中寻找与之相关的信息。
  • 维度:维度大小记为 dkd_k
  • 来源差异:在**自注意力(Self-Attention)机制中,QQ 来自当前层的输入序列;在解码器的交叉注意力(Cross-Attention)**机制中,QQ 来自解码器上一层的输出,目的是去输入序列中寻找相关信息。

2. K向量 (Key - 键向量)

  • 物理含义:代表序列中所有候选词汇的“特征标签”或“索引”。它被用来和 Query 向量进行匹配。
  • 计算机制:模型通过计算 Query (QQ) 和每一个 Key (KK) 的点积(内积)来衡量这两个词之间的相似度或相关性。内积的结果越大,表示相似度越高,即当前处理的词(Query)需要在这个候选词(Key)上投入更多的“注意力”。
  • 维度:为了能够进行点积计算,KK 的维度必须与 QQ 保持一致,同样为 dkd_k

3. V向量 (Value - 值向量)

  • 物理含义:代表序列中所有词的“实际内容”或“本质信息”。
  • 维度:维度大小记为 dvd_v
  • 作用:当模型通过 QQKK 的运算确定了各个词的注意力分布(即权重)后,这些权重最终会被乘到对应的 Value 向量上。这意味着,真正被提取和传递到下一层的信息是 VV 向量的内容。

4. Output向量 (输出向量)

  • 物理含义:它是经过注意力机制计算后,为当前词汇生成的全新上下文表示向量
  • 计算机制:Output 是所有 Value 向量的加权求和。其中,赋予每个 VV 的权重,是由 QQ 和对应 KK 的内积经过缩放(除以 dk\sqrt{d_k})并应用 Softmax 函数归一化后得到的。
  • 特征:在这个加权求和的过程中,与查询词(Query)高度相关的词汇,其 Softmax 权重得分会很高,因此最终的 Output 向量中会包含大量这些相关词汇的 Value 信息;而不相关的词汇权重接近于0,对 Output 的贡献微乎其微。输出向量的维度与 Value 向量相同,即 dvd_v

总结与矩阵化运算: 在实际工程实现中,为了极大地提升计算并行度,上述针对于单个词汇的向量会被按行打包合并成矩阵 Q,K,VQ, K, V。通过高度优化的矩阵乘法公式 Attention(Q,K,V)=Softmax(QKTdk)VAttention(Q, K, V) = Softmax(\frac{QK^T}{\sqrt{d_k}})V,模型可以一次性计算出输入序列中所有位置的 Output 向量。

Mask(掩码)机制解释

在Transformer模型中,Mask(掩码)机制主要应用于解码器(Decoder)的第一层子层,即掩码多头自注意力层(Masked Multi-Head Attention)中。它的核心作用是防止模型在序列生成过程中提前“偷看”到未来的信息

1. 为什么需要 Mask?

  • 自回归生成的限制:Transformer的解码器在生成输出序列时,采用的是自回归(Auto-regressive)模式。这意味着在预测第 tt 个时刻的词时,模型只能依赖当前时刻之前的已知输出(即位置小于 tt 的词)作为输入。
  • 注意力机制的“全局视野”问题:在自注意力(Self-Attention)机制的计算中,Query 本质上会与输入序列中所有的 Key 进行点积运算。如果不加干预,当前词的 Query 就会看到并利用其后方词汇(即未来的词)的信息。
  • 保持训练与预测行为一致:为了保证模型在训练阶段(可以一次性拿到完整目标序列)的行为与实际预测阶段(只能逐词往后生成)保持绝对一致,就必须引入 Mask 来遮蔽掉未来时刻的非法连接。

2. Mask 是如何工作的? Mask 机制巧妙地利用了 Softmax 函数的数学特性,在注意力计算的中间步骤发挥作用:

  1. 计算原始点积:首先,模型依然计算当前查询向量 Query (QQ) 与所有键向量 Key (KK) 的内积,得到一个初始的相似度得分矩阵。
  2. 强制数值替换 (Masking):在将这些得分送入 Softmax 函数之前,Mask 机制会发挥作用。它会将当前时刻 tt 之后的所有位置(即非法连接位置)的内积得分强行替换为一个极大的负数(在论文中被设为 -\infty,实际代码实现中常设为类似 1×1010-1 \times 10^{10} 的极小值)。
  3. Softmax 归零:接着,由于 Softmax 函数的内部计算包含指数运算(exe^x),当输入一个极大的负数时,ee^{-\infty} 的结果无限趋近于 0
  4. 切断信息传递:经过 Softmax 归一化后,所有未来时刻的词汇获得的注意力权重都被变成了 0。因此,在最后对 Value (VV) 向量进行加权求和时,未来词汇的 Value 被乘以 0,完全无法参与当前时刻输出向量的计算。

点积

3. 多头注意力机制 (Multi-Head Attention)

  • 机制:将 Q,K,VQ, K, V 分别通过线性层投影到低维空间(共投影 h=8h=8 次),在不同子空间分别计算注意力,最后拼接结果并映射回原维度。
  • head: 本质上是模型中并行运行的多个独立的注意力计算模块
  • 意义:类似于 CNN 的多输出通道,多头机制允许模型在不同的语义度量空间中提取序列的多种模式特征,增强了多样性。

4. 逐位置前馈神经网络 (Point-wise FFN)

  • 机制:这是一个单隐藏层的多层感知机(MLP),包含两次线性变换与一个 ReLU 激活。维度变化为 5122048512512 \rightarrow 2048 \rightarrow 512
  • 本质:Attention 层负责全局提取和汇聚序列信息,而 FFN 层则独立作用于序列中的每一个位置(词),进行语义空间的转换

5. 位置编码 (Positional Encoding)

  • 痛点:Attention 计算本质上是无序的(无论怎么打乱输入序列,加权和的值都不变),模型缺乏位置概念。
  • 方案:在底层的词嵌入(Embedding)上直接相加一个长度为 512 的位置向量。该向量由不同频率的正弦(sin)和余弦(cos)函数生成,将时序信息通过数值波动直接融入输入数据中。

四、 注意力机制的三种应用场景

模型中实际使用了三种注意力组合方式:

  1. 编码器自注意力Q=K=VQ=K=V,均来自上一层编码器输出,允许每个词观察全局信息。
  2. 解码器掩码自注意力:防止自回归提前“偷看”。通过 Mask 机制将当前时刻 tt 之后的 QQKK 内积强行设为极大负数(如 -\infty),让 Softmax 后的权重变为 0。
  3. 解码器交叉注意力 (Cross-Attention)QQ 来自解码器上一层输出,而 KKVV 来自编码器的最终输出。作用是让解码器在生成当前词时,去输入序列中寻找最相关的词语进行关注。 注意力机制

五、 性能对比 (vs RNN/CNN)

架构每层计算复杂度顺序计算操作数 (并行度)网络最大路径长度 (长距依赖建模)
Self-AttentionO(n2d)O(n^2 \cdot d)O(1)O(1) (极高)O(1)O(1) (极好,一步直达)
RNNO(nd2)O(n \cdot d^2)O(n)O(n) (极低,需串行等待)O(n)O(n) (较差,容易丢失早期信息)
CNNO(knd2)O(k \cdot n \cdot d^2)O(1)O(1) (极高)O(logk(n))O(\log_k(n)) (中等)
注:RNN必须等待前一步完成,Transformer依靠矩阵乘法高度并行;Transformer任意两个位置交互的信息路径长度恒为O(1)O(1),完美解决长距离依赖。

六、 实验细节与训练技巧

  • 数据:使用 BPE 算法提取词根,英语和德语甚至共享词典与 Embedding 层,减小词表体积。
  • 优化器 (Adam):带有 Warmup 预热阶段,学习率按模型宽度的负半次方自动衰减,几乎不需要手动调参。
  • 正则化手段
    • 大量应用 Dropout(率0.1),作用于残差连接前和词嵌入相加后。
    • 使用 Label Smoothing (标签平滑,值0.1),降低了模型预测时的过度自信,虽然提升了 Perplexity,但切实提高了 BLEU 分数。

七、 深度思考 (李沐 Insights)

  1. 架构的统一力量:Transformer 提供了高度标准化的架构,极大降低了由于不同任务而手动设计繁琐提取特征架构的门槛,成为跨领域的“通用语言”。
  2. “Attention Is All You Need” 的局限:后续研究表明,Attention 仅起到全局信息聚合的作用,其背后的残差连接和 FFN 层才是不可或缺的基石,去掉后将无法训练。
  3. 大模型为什么越来越大:Transformer 的“归纳偏置(Inductive Bias)”非常弱,没有像 CNN(平移不变性)或 RNN(时序规律)那样的先验假设。这导致它自身抓取特征的能力较弱,**必须依赖海量数据和庞大的模型规模(即“大力出奇迹”)**才能超越传统模型,这也是如今大模型越来越庞大和昂贵的根本原因。