profileName: youpingfang postId: 195 postType: post categories:

- 6

简介

本文是对 B 站视频《Attention is all you need》论文解读及 Transformer 架构详细介绍的总结。原视频系统讲解了 Transformer 的诞生背景、核心创新(自注意力机制、多头注意力、位置编码等)以及相较于 RNN/CNN 的突破性优势。


一、背景问题:Transformer 之前的模型瓶颈

1.1 前馈神经网络(FNN)的局限

  • 输入定长:无法处理不定长序列。
  • 无顺序感知:简单拼接或平均会丢失词序信息。
  • 不适合序列转导任务(如机器翻译)。

1.2 循环神经网络(RNN)的改进与局限

  • 优点:建模词序、上下文依赖、支持不定长输入。
  • 核心局限
    • 串行计算:必须按时间步逐步处理,无法并行,训练效率低。
    • 长期依赖问题:远距离信息易被遗忘(可通过 LSTM/GRU 缓解,但本质未变)。

1.3 编码器-解码器(Seq 2 Seq)与注意力机制

  • Seq 2 Seq:用 RNN 编码器生成上下文向量 C,解码器逐时间步生成输出。
  • 注意力机制(已有):为解码器每个时间步动态分配输入侧不同位置的权重,缓解遗忘和语义对齐问题。
  • 但仍依赖 RNN:并行计算问题未解决。

二、Transformer 的核心创新

2.1 完全基于自注意力,抛弃 RNN/CNN

  • 论文标题:Attention Is All You Need(2017)。
  • 核心思想:用自注意力(Self-Attention)取代循环/卷积结构,实现全并行训练。

2.2 模型整体架构(编码器-解码器)

  • 编码器:N=6 层,每层包含多头自注意力 + 前馈网络,均使用残差连接和层归一化。
  • 解码器:N=6 层,每层包含带掩码的多头自注意力 + 编码器-解码器注意力 + 前馈网络。

2.2.1 自注意力机制(Scaled Dot-Product Attention)

  • 输入:序列中每个词的嵌入向量 + 位置编码。

  • 计算过程
    对每个词生成 Query(Q)、Key(K)、Value(V) 三个向量(通过可训练权重矩阵得到)。
    计算 Q 与所有 K 的点积,缩放后 softmax 得到权重,再对 V 加权求和。

  • 作用:每个词都能直接关注序列中任意位置,建模长距离依赖,且计算可并行。

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

  • 动机:单头注意力只能关注一个子空间,多头允许模型从不同表示子空间学习信息。
  • 操作:将 Q、K、V 分别线性投影到 h 个低维子空间(h=8),分别计算注意力,拼接后通过线性层融合。
  • 优势:在不显著增加计算量的前提下提升表达能力。

2.2.3 位置编码(Positional Encoding)

  • 原因:自注意力无顺序感,需显式注入位置信息。
  • 方式:使用正弦/余弦函数生成固定位置的编码向量,与词嵌入相加输入模型。 $$ PE{(pos, 2i)} = \sin(pos / 10000^{2i/d{model}}) $$ $$ PE{(pos, 2i+1)} = \cos(pos / 10000^{2i/d{model}}) $$

2.2.4 掩码(Masking)与自回归生成

  • 训练阶段:解码器使用带掩码的自注意力,防止看到未来位置(论文中称为 masked attention),保证自回归性质。
  • 推理阶段:仍需逐步生成(因无真实答案),但训练时可并行。

2.2.5 前馈网络(Feed-Forward Network, FFN)

  • 每个注意力层后接两层线性变换 + ReLU 激活,提供非线性变换。 $$ FFN(x) = \max(0, xW_1 + b_1)W_2 + b_2 $$

2.2.6 残差连接与层归一化

  • 每个子层(注意力或 FFN)后:LayerNorm(x + Sublayer(x)),利于深层网络训练。

三、Transformer 的革命性优势

维度 RNN/CNN Transformer
并行性 串行,无法利用 GPU 加速 全序列并行,训练效率极高
长距离依赖 难以捕获(梯度消失/爆炸) 每个位置一步直达,无距离衰减
计算复杂度 O(n·d²)(RNN)或 O(k·n·d)(CNN) O(n²·d)(自注意力,但可优化)
可解释性 隐状态不易解释 注意力权重可可视化

四、面试题与参考答案

Q 1:为什么 Transformer 能够彻底取代 RNN 成为 NLP 主流模型?

答案:Transformer 解决了 RNN 的三大瓶颈:① 串行计算导致训练慢;② 长距离依赖难以建模;③ 无法充分利用 GPU 并行能力。自注意力机制允许全序列并行处理,直接建模任意位置依赖,且复杂度可接受。

Q 2:简述自注意力的计算步骤,什么是 Q/K/V?

答案:自注意力对每个输入向量通过可训练矩阵 $W^Q, W^K, W^V$ 得到 Query、Key、Value。计算 Q 与所有 K 的点积(缩放后 softmax)得到权重,再对 V 加权求和。Q 是当前词的“查询”,K 是其他词的“键”,V 是其他词的“值”,通过权重融合上下文信息。

Q 3:多头注意力为什么有效?

答案:单头注意力只在一个子空间建模,多头将输入映射到多个低维子空间(如 8 头,每个 64 维),分别计算注意力,得到多个不同的表示子空间,最后拼接并线性投影。这使得模型能够同时关注不同位置、不同角度的语义关系(如语法、语义、局部/全局),提升表达能力。

Q 4:位置编码的作用是什么?为什么不用简单的整数编码?

答案:自注意力本身无法感知序列顺序,位置编码为每个位置增加唯一的位置信息。整数编码会导致数值差异随句长增大(模型难以泛化),且无界。正弦/余弦编码具有周期性和相对位置表达能力,且值域固定(-1 到 1),便于训练。

Q 5:Transformer 中为什么使用缩放因

答案:当 $d_k$ 较大时,Q·K 的点积值可能很大,导致 softmax 落入梯度极小的区域(梯度消失)。除以 $\sqrt{d_k}$ 可以控制方差为 1,使 softmax 梯度更稳定,有利于训练。

Q 6:训练时的 masked 自注意力如何实现?推理时是否还需要?

答案:训练时将未来位置的注意力分数设为 $-\infty$(经过 softmax 后变为 0),使得解码器在预测第 i 个词时只能看到 1~i-1 位置。推理时因为逐词生成,只需要将已生成序列送入解码器即可(自然满足因果性),不需要显式 mask,但有些实现仍保留相同的 mask 操作以保证一致性。