深度注意力模型
理解注意力机制为什么出现、Self-Attention 怎样工作、Transformer 如何组织信息流,以及它为什么成为大模型时代的主架构。本讲是课程从经典机器学习通向现代深度学习的最后一公里。
前置知识回顾
- 序列模型 (RNN):知道 RNN 的基本结构和长距离依赖问题。作用:理解注意力机制要解决的核心痛点。去哪里补:L07 神经网络。
- 线性代数:矩阵乘法、softmax。作用:Self-Attention 的计算核心就是矩阵运算。去哪里补:L02 线性模型。
- 编码-解码架构:Seq2Seq 的基本思想。作用:Transformer 最初就是为了改进 Seq2Seq 而提出的。
RNN 处理序列信息的方式是"一步一步读、一步一步记"。问题在于:信息必须经过每一步的隐状态传递才能到达远处,梯度在长路径上不断衰减。Seq2Seq 模型用一个固定长度的上下文向量 $\mathbf{c}$ 压缩整个输入序列,不管输入多长,都挤进同一个 $\mathbf{c}$ 里——这是信息瓶颈。
注意力机制的核心想法:不再压缩,而是让解码器在每一步主动选择应该看输入序列中的哪些位置。
Scaled Dot-Product Attention
输入序列 $\mathbf{X} \in \mathbb{R}^{n \times d}$($n$ 个 token,每个 $d$ 维)。三个线性变换:
注意力输出:
- Query $Q$:当前位置在"问"什么。
- Key $K$:每个位置的"标签"或"关键词"。
- Value $V$:每个位置实际携带的信息。
- $QK^T$:计算 query 与所有 key 的相似度(注意力得分)。
- $\sqrt{d_k}$:缩放因子,防止点积过大导致 softmax 梯度消失。
Multi-Head Attention:并行运行 $h$ 组独立的 Self-Attention(各有 $Q,K,V$),拼接后线性投影。多头让模型同时关注不同类型的关系(语法、语义、位置关系等)。
Transformer 的输入需要解决两个问题:把离散 token 变成连续向量,以及告诉模型每个 token 的位置。
Token Embedding
词表 $\mathcal{V}$ 中的每个 token 映射为 $d$ 维向量。可以通过 one-hot + 矩阵乘法,或直接查表实现。嵌入矩阵在训练中与模型一起学习。
位置编码 (Positional Encoding)
Self-Attention 本身是排列不变的——打乱 token 顺序,输出只是对应重排,不影响语义。为了让模型区分位置,必须注入位置信息。Transformer 用正弦/余弦位置编码:
每个维度对应不同频率的正弦波。低维度变化快(捕捉局部位置差异),高维度变化慢(捕捉全局顺序)。
最终输入 = Token Embedding + Positional Encoding。
Transformer 由编码器和解码器堆叠而成(原始论文 6 层)。编码器每层包含:
- Multi-Head Self-Attention
- 残差连接 + Layer Normalization
- Feed-Forward Network(两层全连接 + ReLU)
- 残差连接 + Layer Normalization
解码器额外增加一个交叉注意力层:Query 来自解码器,Key/Value 来自编码器输出。这让解码器在生成每个 token 时可以参考编码器的表示。
Transformer 提出后的发展方向:
| 阶段 | 代表工作 | 核心变化 |
|---|---|---|
| 编码器路线 | BERT (2018) | 双向注意力,预训练 + 微调 |
| 解码器路线 | GPT 系列 (2018–) | 自回归生成,规模化 |
| 编码器-解码器 | T5, BART | 文本到文本统一框架 |
| 规模化 | GPT-3/4, LLaMA | 参数量 + 数据量 + 计算量 |
| 维度 | RNN | Transformer |
|---|---|---|
| 信息传递方式 | 逐级传递(链式) | 全序列直接连接(注意力矩阵) |
| 长距离依赖 | 差(梯度消失) | 好(一步直达) |
| 并行性 | 差(必须串行处理) | 好(注意力可并行计算) |
| 计算复杂度 | $O(n)$(序列长度) | $O(n^2)$(序列长度的平方) |
| 位置信息 | 隐式(通过时间步) | 显式(位置编码) |
例题:排列不变性的验证
题目:如果只有 Self-Attention 而没有位置编码,把输入序列 [A, B, C] 重排为 [C, A, B],输出会怎样?
- Self-Attention 计算 $QK^T$ 得到的是 token 之间的相似度矩阵,与顺序无关。
- 重排输入等价于对 $Q,K,V$ 矩阵做行置换,输出也只是对应行置换。
- 模型无法区分"A 在第 1 位"和"A 在第 3 位"——所有位置的信息都等价。
答案:没有位置编码,Transformer 是排列不变的。位置编码给每个位置打上唯一"坐标",让模型恢复序列结构。
例题:为什么 Attention 要除以 $\sqrt{d_k}$
题目:当 $d_k$ 很大时,$QK^T$ 的点积值会很大,导致 softmax 输出接近 one-hot。为什么?
- 点积的方差:假设 $q_i, k_i$ 独立零均值、方差 1,则点积 $s = \sum_{i=1}^{d_k} q_i k_i$ 的方差为 $d_k$。
- 当 $d_k = 64$:点积的典型量级为 $\sqrt{64} = 8$。softmax 输入为 $[8, -3, 5, \ldots]$ 时,输出接近 one-hot。
- 梯度消失:softmax 在输入极端时梯度趋近零,训练几乎停滞。
- 除以 $\sqrt{d_k}$:把方差拉回 1,softmax 输入保持在合理范围,梯度稳定。
答案:缩放因子 $\sqrt{d_k}$ 是对点积方差增长的补偿,防止高维空间中 softmax 饱和。
后续用途 / 连接
- 预训练与微调:BERT(编码器路线)和 GPT(解码器路线)都基于 Transformer 架构,通过大规模无监督预训练获得通用语言表示。
- 多模态扩展:Vision Transformer (ViT) 把图像切成 patch 当作 token 序列处理,直接复用 Transformer 架构。
- 稀疏注意力与 MoE:$O(n^2)$ 复杂度的瓶颈催生了稀疏注意力(只看部分 token)和混合专家(MoE,只激活部分参数)等方向。
- 课程主线收束:从 L01 的"什么是学习"到 L08 的"Transformer",这门课的主线从经典统计学习走到了现代深度表示学习的最前沿。
复习速查
- Self-Attention:$Q=XW^Q, K=XW^K, V=XW^V$,输出 $=\mathrm{softmax}(QK^T/\sqrt{d_k})V$。
- 多头注意力:并行 $h$ 组独立注意力,让模型同时关注不同关系类型。
- 位置编码:正弦/余弦函数,给每个位置打上唯一"坐标"。
- Transformer 层:Multi-Head Attention + 残差 + LayerNorm + FFN + 残差 + LayerNorm。
- 缩放因子 $\sqrt{d_k}$:补偿点积方差增长,防止 softmax 饱和。
- RNN → Transformer:从"逐级传递"到"全序列直接连接"。
参考来源
- 课程课件:25C08 第 6–8 页(Transformer 引入与发展)
- 课程课件:25C08 第 11–14 页(Seq2Seq 缺陷与 Transformer 架构)
- 课程课件:25C08 第 15–18 页(Embedding、位置编码、Self-Attention)
- Vaswani et al., Attention Is All You Need (2017)
- D2L Ch. 11(http://www.d2l.ai/chapter_attention-mechanisms-and-transformers/index.html)
- IIT Kanpur CS771 Lecture 25(https://www.cse.iitk.ac.in/users/piyush/courses/ml-autumn23/slides/Lecture-25.pdf)