这是本文档旧的修订版!


第八章 注意力机制与Transformer

从RNN到注意力的演进

循环神经网络(RNN)及其变体LSTM、GRU在处理序列数据方面取得了显著成功,但它们存在几个根本性局限:

1. 顺序计算瓶颈:RNN的隐藏状态更新必须按时间顺序进行,无法充分利用现代硬件的并行计算能力。对于长序列,训练时间随序列长度线性增长。

2. 长距离依赖困难:尽管LSTM通过门控机制缓解了梯度消失问题,但在实际应用中,当序列长度超过100时,模型仍难以有效捕捉远距离的词之间的关系。

3. 信息瓶颈:在Seq2Seq模型中,编码器将所有输入信息压缩成一个固定维度的上下文向量,导致长序列的信息损失。

注意力机制(Attention Mechanism)正是为了解决这些问题而诞生的。其核心思想是:在生成每个输出时,模型应该能够“关注”输入序列中最相关的部分,而不是依赖于一个固定的上下文向量。

注意力的生物学启发

注意力机制的设计受到人类视觉注意力的启发。人类在观察复杂场景时,并不会同时处理整个视野的所有信息,而是将注意力集中在特定区域,忽略不相关信息。这种选择性注意机制使人类能够高效处理复杂视觉输入。

在神经网络中,注意力机制允许模型动态地分配计算资源,专注于输入中最相关的部分,从而提高模型的表达能力和效率。

核心概念

注意力机制可以形式化为一个查询(Query)到一组键值对(Key-Value)的映射。给定查询$Q$、键$K$和值$V$,注意力机制计算输出为值的加权和,权重由查询与对应键的相似度决定。

数学形式化

注意力机制的通用框架包含三个组件:

1. 查询(Query):$Q \in \mathbb{R}^{d_q}$,表示当前需要关注什么

2. 键(Key):$K \in \mathbb{R}^{n \times d_k}$,表示输入内容可供检索的索引

3. 值(Value):$V \in \mathbb{R}^{n \times d_v}$,表示输入内容的实际表示

注意力计算过程:

$$\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V$$

其中:

  1. $QK^T$计算查询与所有键的相似度分数
  2. 除以$\sqrt{d_k}$进行缩放,防止softmax进入梯度饱和区
  3. softmax将分数转换为概率分布(注意力权重)
  4. 权重与值相乘得到加权输出

直观理解

想象在图书馆查找资料:

  1. 查询(Q):你的问题或需求
  2. 键(K):书籍的目录和标签
  3. 值(V):书籍的实际内容
  4. 注意力权重:每本书对你问题的相关程度

1.3.1 加性注意力(Additive Attention)

Bahdanau等人在2014年提出,使用一个前馈网络计算注意力分数:

$$e_{ij} = v_a^T \tanh(W_s s_{i-1} + W_h h_j)$$

$$\alpha_{ij} = \frac{\exp(e_{ij})}{\sum_{k=1}^n \exp(e_{ik})}$$

特点:

  1. 使用可学习的参数$W_s, W_h, v_a$
  2. 理论上可以学习更复杂的相似度函数
  3. 计算复杂度较高

1.3.2 乘性注意力(Multiplicative Attention / Dot-Product Attention)

直接使用向量点积计算相似度:

$$e_{ij} = s_{i-1}^T h_j$$

特点:

  1. 计算简单高效,无需额外参数
  2. 当查询和键维度相同时可直接使用
  3. 实践中常与缩放因子结合使用

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

Transformer中使用的标准注意力形式:

$$\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V$$

缩放因子$\sqrt{d_k}$的作用:

  1. 当$d_k$较大时,点积的数值可能很大
  2. 大值输入使softmax梯度极小,导致梯度消失
  3. 缩放使点积值保持在合理范围,保证梯度流动

1.3.4 自注意力(Self-Attention)

自注意力是注意力机制的特例,其中查询、键、值都来自同一序列:

$$\text{SelfAttn}(X) = \text{softmax}\left(\frac{XW_Q(XW_K)^T}{\sqrt{d_k}}\right)XW_V$$

其中$W_Q, W_K, W_V$是可学习的投影矩阵。

自注意力的优势: - 能够捕捉序列内部任意两个位置的关系 - 与距离无关,直接建模长距离依赖 - 高度并行化,计算效率高

1.4.1 Transformer的总体结构

Transformer由Vaswani等人在2017年提出,完全基于注意力机制,摒弃了循环和卷积结构。它由编码器(Encoder)和解码器(Decoder)两部分组成。

编码器结构:

  1. 输入嵌入 + 位置编码
  2. N个相同的编码器层(原论文N=6)
  3. 每层包含:多头自注意力 + 前馈网络
  4. 每个子层后接层归一化和残差连接

解码器结构:

  1. 输出嵌入 + 位置编码
  2. N个相同的解码器层
  3. 每层包含:掩码多头自注意力 + 编码器-解码器注意力 + 前馈网络
  4. 每个子层后接层归一化和残差连接

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

单一注意力机制可能只关注特定类型的关系。多头注意力通过多组不同的投影,让模型在不同表示子空间中捕捉不同类型的关系。

计算公式:

$$\text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, ..., \text{head}_h)W^O$$

其中: $$\text{head}_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V)$$

参数说明:

  1. $h$:注意力头数(原论文h=8)
  2. $d_{model}$:模型维度(原论文512)
  3. $d_k = d_v = d_{model}/h = 64$
  4. $W_i^Q, W_i^K, W_i^V$:各头的投影矩阵
  5. $W^O$:输出投影矩阵

多头注意力的优势:

  1. 不同头可以学习不同的依赖模式
  2. 例如:一个头学习句法关系,另一个学习语义关系
  3. 增强模型的表达能力

1.4.3 位置编码(Positional Encoding)

由于自注意力是位置无关的(permutation invariant),需要显式注入位置信息。Transformer使用正弦和余弦函数生成位置编码:

$$PE_{(pos, 2i)} = \sin\left(\frac{pos}{10000^{2i/d_{model}}}\right)$$

$$PE_{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{2i/d_{model}}}\right)$$

其中:

  1. $pos$:位置索引
  2. $i$:维度索引
  3. $d_{model}$:模型维度

位置编码的特性:

  1. 唯一性:每个位置有唯一的编码
  2. 相对位置:$PE_{pos+k}$可以表示为$PE_{pos}$的线性函数
  3. 有界性:值域在[-1, 1]之间
  4. 可学习位置编码也是可行的选择

1.4.4 前馈网络(Feed-Forward Network)

每个编码器和解码器层包含一个全连接前馈网络:

$$\text{FFN}(x) = \max(0, xW_1 + b_1)W_2 + b_2$$

这是一个两层的线性变换,中间使用ReLU激活。特点:

  1. 对每个位置独立应用(位置间不交互)
  2. 隐藏层维度通常为$4 \times d_{model}$(原论文2048)
  3. 引入非线性,增强模型表达能力

1.4.5 层归一化与残差连接

残差连接(Residual Connection)

$$\text{LayerNorm}(x + \text{Sublayer}(x))$$

作用:

  1. 缓解梯度消失,使深层网络可训练
  2. 保留原始信息,帮助优化

层归一化(Layer Normalization)

$$\text{LayerNorm}(x) = \gamma \odot \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}} + \beta$$

与批归一化不同,层归一化对每个样本的所有特征进行归一化,不依赖批次统计量,更适合序列数据。

1.5.1 编码器-only模型

BERT(Bidirectional Encoder Representations from Transformers):

  1. 仅使用Transformer编码器
  2. 双向上下文建模
  3. 预训练任务:掩码语言模型 + 下一句预测
  4. 适用于:文本分类、命名实体识别、问答等理解任务

1.5.2 解码器-only模型

GPT(Generative Pre-trained Transformer)系列:

  1. 仅使用Transformer解码器
  2. 自回归生成,从左到右
  3. 预训练任务:语言建模(预测下一个词)
  4. 适用于:文本生成、对话、代码生成

1.5.3 编码器-解码器模型

T5(Text-to-Text Transfer Transformer):

  1. 完整的编码器-解码器结构
  2. 所有任务统一为文本到文本的转换
  3. 适用于:机器翻译、摘要、问答等

1.5.4 高效Transformer变体

标准Transformer的自注意力计算复杂度为$O(n^2)$,对于长序列是瓶颈。主要改进方向:

稀疏注意力

  1. Longformer:结合局部窗口注意力和全局注意力
  2. BigBird:随机注意力 + 窗口注意力 + 全局注意力
  3. 理论证明:稀疏注意力可以近似全注意力

线性注意力

  1. 通过核技巧或矩阵分解,将复杂度降至$O(n)$
  2. Performer、Linear Transformer等

分层注意力

  1. 先对token进行聚类或压缩
  2. 在粗粒度表示上进行注意力计算

注意力可视化

注意力权重天然具有可解释性。通过可视化注意力矩阵,可以观察模型关注输入的哪些部分:

  1. 编码器自注意力:显示输入序列内部的关系
  2. 解码器自注意力:显示生成过程中的依赖
  3. 交叉注意力:显示输出与输入的对齐关系

注意力作为解释工具

注意力权重可以回答“模型在决策时关注了什么”。例如:

  1. 机器翻译中,可以看到源语言词与目标语言词的对应
  2. 情感分析中,可以看到影响分类的关键词

注意力的局限性

  1. 注意力权重不等于特征重要性
  2. 多头注意力的可解释性较复杂
  3. 注意力分布可能集中在特定token(如[CLS])

自然语言处理

  1. 机器翻译、文本摘要、问答系统
  2. 预训练语言模型(BERT、GPT、T5)
  3. 信息抽取、情感分析

计算机视觉

  1. 视觉Transformer(ViT):将图像分割为patch,应用Transformer
  2. 目标检测(DETR):端到端目标检测
  3. 图像生成(DALL-E、Stable Diffusion)

多模态学习

  1. 图像-文本对齐(CLIP)
  2. 视觉问答
  3. 文生图、图生文

其他领域

  1. 语音识别
  2. 蛋白质结构预测(AlphaFold)
  3. 推荐系统
  4. 时间序列预测

题目:给定查询$Q = [1, 0, 1]$,键矩阵$K = \begin{bmatrix} 1 & 0 & 1 \\ 0 & 1 & 1 \\ 1 & 1 & 0 \end{bmatrix}$,值矩阵$V = \begin{bmatrix} 2 & 3 \\ 1 & 4 \\ 5 & 2 \end{bmatrix}$,$d_k = 3$。计算注意力输出。

分析过程

步骤1:计算$QK^T$

$$QK^T = [1, 0, 1] \begin{bmatrix} 1 & 0 & 1 \\ 0 & 1 & 1 \\ 1 & 1 & 0 \end{bmatrix}$$

$$= [1\times1 + 0\times0 + 1\times1,\; 1\times0 + 0\times1 + 1\times1,\; 1\times1 + 0\times1 + 1\times0]$$

$$= [2, 1, 1]$$

步骤2:缩放

$$\frac{QK^T}{\sqrt{d_k}} = \frac{[2, 1, 1]}{\sqrt{3}} \approx [1.155, 0.577, 0.577]$$

步骤3:Softmax

$$\text{softmax}([1.155, 0.577, 0.577])$$

计算指数: - $\exp(1.155) \approx 3.174$ - $\exp(0.577) \approx 1.781$ - $\exp(0.577) \approx 1.781$

求和:$3.174 + 1.781 + 1.781 = 6.736$

注意力权重: - $\alpha_1 = 3.174 / 6.736 \approx 0.471$ - $\alpha_2 = 1.781 / 6.736 \approx 0.264$ - $\alpha_3 = 1.781 / 6.736 \approx 0.264$

步骤4:加权求和

$$\text{Output} = 0.471 \times [2, 3] + 0.264 \times [1, 4] + 0.264 \times [5, 2]$$

$$= [0.942, 1.413] + [0.264, 1.056] + [1.320, 0.528]$$

$$= [2.526, 2.997]$$

结论:注意力输出约为$[2.53, 3.00]$,注意力主要集中在第一个键值对(权重0.471)。

题目:假设$d_{model} = 4$,头数$h = 2$,输入$X = \begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix}$(2个token,每个2维,为简化假设已投影)。给定: - 头1:$W_1^Q = W_1^K = W_1^V = I$(单位矩阵) - 头2:$W_2^Q = W_2^K = W_2^V = \begin{bmatrix} 0 & 1 \\ 1 & 0 \end{bmatrix}$(交换矩阵) - $W^O = I$

计算多头注意力输出。

分析过程

头1计算

$Q_1 = K_1 = V_1 = X = \begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix}$

$$Q_1K_1^T = \begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix} \begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix} = \begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix}$$

Softmax(按行): $$\text{softmax}\left(\begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix}\right) = \begin{bmatrix} 0.731 & 0.269 \\ 0.269 & 0.731 \end{bmatrix}$$

(假设$d_k=2$,不缩放简化计算)

$$\text{head}_1 = \begin{bmatrix} 0.731 & 0.269 \\ 0.269 & 0.731 \end{bmatrix} \begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix} = \begin{bmatrix} 0.731 & 0.269 \\ 0.269 & 0.731 \end{bmatrix}$$

头2计算

$Q_2 = K_2 = V_2 = X \begin{bmatrix} 0 & 1 \\ 1 & 0 \end{bmatrix} = \begin{bmatrix} 0 & 1 \\ 1 & 0 \end{bmatrix}$

$$Q_2K_2^T = \begin{bmatrix} 0 & 1 \\ 1 & 0 \end{bmatrix} \begin{bmatrix} 0 & 1 \\ 1 & 0 \end{bmatrix} = \begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix}$$

$$\text{head}_2 = \begin{bmatrix} 0.731 & 0.269 \\ 0.269 & 0.731 \end{bmatrix} \begin{bmatrix} 0 & 1 \\ 1 & 0 \end{bmatrix} = \begin{bmatrix} 0.269 & 0.731 \\ 0.731 & 0.269 \end{bmatrix}$$

拼接与输出

$$\text{Concat} = [\text{head}_1, \text{head}_2]$$

对于token 1:$[0.731, 0.269, 0.269, 0.731]$ 对于token 2:$[0.269, 0.731, 0.731, 0.269]$

由于$W^O = I$且假设输出维度匹配,多头注意力输出为上述拼接结果。

分析: - 头1保留了原始特征 - 头2交换了特征维度 - 多头机制允许模型同时学习不同视角的表示

题目:计算位置编码,$d_{model} = 4$,位置$pos = 0, 1, 2$。

分析过程

使用公式: - $PE_{(pos, 2i)} = \sin(pos / 10000^{2i/d_{model}})$ - $PE_{(pos, 2i+1)} = \cos(pos / 10000^{2i/d_{model}})$

对于$d_{model} = 4$,维度$i = 0, 1$。

位置0

$i = 0$:$10000^{0/4} = 1$ - $PE_{(0,0)} = \sin(0/1) = 0$ - $PE_{(0,1)} = \cos(0/1) = 1$

$i = 1$:$10000^{2/4} = 100$ - $PE_{(0,2)} = \sin(0/100) = 0$ - $PE_{(0,3)} = \cos(0/100) = 1$

$PE_0 = [0, 1, 0, 1]$

位置1

$i = 0$: - $PE_{(1,0)} = \sin(1/1) = \sin(1) \approx 0.841$ - $PE_{(1,1)} = \cos(1) \approx 0.540$

$i = 1$: - $PE_{(1,2)} = \sin(1/100) \approx 0.010$ - $PE_{(1,3)} = \cos(1/100) \approx 0.999$

$PE_1 \approx [0.841, 0.540, 0.010, 0.999]$

位置2

$i = 0$: - $PE_{(2,0)} = \sin(2) \approx 0.909$ - $PE_{(2,1)} = \cos(2) \approx -0.416$

$i = 1$: - $PE_{(2,2)} = \sin(2/100) \approx 0.020$ - $PE_{(2,3)} = \cos(2/100) \approx 0.998$

$PE_2 \approx [0.909, -0.416, 0.020, 0.998]$

验证相对位置性质

$PE_{pos+k}$应该是$PE_{pos}$的线性函数。对于维度0: - $\sin(pos + k)$可以表示为$\sin(pos)\cos(k) + \cos(pos)\sin(k)$ - 这验证了位置编码可以学习相对位置

1. Transformer中引入$\frac{1}{\sqrt{d_k}}$缩放因子的主要目的是:

 A. 提高计算速度
 B. 防止softmax梯度消失
 C. 增加模型容量
 D. 减少内存使用

2. 自注意力机制中,查询、键、值来自:

 A. 三个不同的输入序列
 B. 同一输入序列的不同投影
 C. 编码器、解码器和嵌入层
 D. 随机初始化

3. 多头注意力的主要优势是:

 A. 减少计算量
 B. 在不同子空间学习多种依赖关系
 C. 简化模型结构
 D. 不需要位置编码

4. Transformer使用什么机制注入位置信息?

 A. 循环连接
 B. 卷积操作
 C. 位置编码
 D. 门控机制

5. 以下哪个是解码器-only架构的模型?

 A. BERT
 B. GPT
 C. T5
 D. ViT

6. 注意力机制的三个核心组件是

7. Transformer编码器包含个相同的层,每层有个子层。

8. 层归一化与批归一化的主要区别是层归一化对进行归一化,不依赖统计量。

9. 残差连接的公式是$\text{LayerNorm}(x + \text{________}(x))$。

10. 标准Transformer自注意力的计算复杂度是$O(n^{________})$。

11. 给定$Q = [2, 1]$,$K = \begin{bmatrix} 1 & 2 \\ 2 & 1 \end{bmatrix}$,$V = \begin{bmatrix} 3 & 1 \\ 2 & 4 \end{bmatrix}$,$d_k = 2$。计算注意力输出。

12. 计算位置编码:$d_{model} = 4$,$pos = 1$,维度索引$i = 0$的$PE_{(1,0)}$和$PE_{(1,1)}$。

13. 假设注意力权重为$[0.5, 0.3, 0.2]$,对应的值为$\begin{bmatrix} 1 & 2 \\ 3 & 4 \\ 5 & 6 \end{bmatrix}$,计算加权输出。

一、选择题答案:

1. 答案:B

 解析:缩放因子防止点积值过大,避免softmax进入梯度极小的饱和区域。

2. 答案:B

 解析:自注意力中,Q、K、V来自同一序列,通过不同的投影矩阵$W_Q, W_K, W_V$得到。

3. 答案:B

 解析:多头注意力允许模型在不同表示子空间中学习不同类型的依赖关系。

4. 答案:C

 解析:Transformer使用正弦/余弦位置编码显式注入位置信息,替代RNN的隐式位置建模。

5. 答案:B

 解析:GPT仅使用Transformer解码器,BERT仅使用编码器,T5使用完整的编码器-解码器。

二、填空题答案:

6. 答案:查询(Query);键(Key);值(Value)

 解析:注意力机制的核心三元组,查询与键计算相似度,值提供实际内容。

7. 答案:6(或N);2

 解析:原论文使用6层编码器,每层包含多头自注意力和前馈网络两个子层。

8. 答案:每个样本的所有特征;批次

 解析:层归一化沿特征维度归一化,批归一化沿批次维度归一化。

9. 答案:Sublayer

 解析:残差连接将子层输出与输入相加,再经过层归一化。

10. 答案:2

  解析:自注意力需要计算$n \times n$的注意力矩阵,复杂度为$O(n^2)$。

三、计算题答案:

11. 解答:

  
  $QK^T = [2, 1] \begin{bmatrix} 1 & 2 \\ 2 & 1 \end{bmatrix} = [2\times1 + 1\times2,\; 2\times2 + 1\times1] = [4, 5]$
  
  缩放:$[4, 5] / \sqrt{2} \approx [2.828, 3.536]$
  
  Softmax:
  - $\exp(2.828) \approx 16.92$
  - $\exp(3.536) \approx 34.31$
  - 和 $\approx 51.23$
  - $\alpha_1 = 16.92 / 51.23 \approx 0.330$
  - $\alpha_2 = 34.31 / 51.23 \approx 0.670$
  
  输出:$0.330 \times [3, 1] + 0.670 \times [2, 4] = [0.990, 0.330] + [1.340, 2.680] = [2.330, 3.010]$

12. 解答:

  
  对于$i = 0$:$10000^{0/4} = 1$
  
  $PE_{(1,0)} = \sin(1/1) = \sin(1) \approx 0.841$
  
  $PE_{(1,1)} = \cos(1/1) = \cos(1) \approx 0.540$

13. 解答:

  
  $\text{Output} = 0.5 \times [1, 2] + 0.3 \times [3, 4] + 0.2 \times [5, 6]$
  
  $= [0.5, 1.0] + [0.9, 1.2] + [1.0, 1.2]$
  
  $= [2.4, 3.4]$

该主题尚不存在

您访问的页面并不存在。如果允许,您可以使用创建该页面按钮来创建它。

  • 深度学习/注意力机制与transformer.1772461749.txt.gz
  • 最后更改: 2026/03/02 22:29
  • 张叶安