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 操作以保证一致性。