MD 更新:2026/5/15

注意力机制 (Attention Mechanism)

核心直觉

[!tip] 一句话理解 注意力机制让模型在处理每个词时,能”看向”序列中其他所有词,并根据相关性动态分配权重。

传统 RNN 把整个序列压缩成一个固定向量,信息瓶颈严重。注意力机制打破了这个限制——不压缩,而是查询


Q / K / V 三元组

注意力的核心是一个软查询系统

角色含义类比
Q (Query)当前位置”想要什么”搜索关键词
K (Key)每个位置”能提供什么标签”文档标签
V (Value)每个位置”实际携带的内容”文档正文

计算步骤

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

  1. 相似度打分:$QK^T$ — Q 与每个 K 做点积,得到相关性分数
  2. 缩放:除以 $\sqrt{d_k}$ 防止梯度消失(维度越大点积越大)
  3. 归一化:softmax 将分数转为概率分布(权重之和为 1)
  4. 加权求和:用权重对 V 加权,得到当前位置的输出

Self-Attention(自注意力)

Q、K、V 全部来自同一序列,让序列内部的每个位置互相”关注”。

graph LR
    X["输入序列 X"] --> Q["Q = X·W_Q"]
    X --> K["K = X·W_K"]
    X --> V["V = X·W_V"]
    Q & K --> Score["相似度打分 QKᵀ/√d_k"]
    Score --> Softmax["Softmax → 权重"]
    Softmax & V --> Out["输出 Z"]

关键能力:捕捉长距离依赖。例如 “The animal didn’t cross the street because it was too tired” 中,it 能直接关注到 animal,无需逐步传递。


Multi-Head Attention(多头注意力)

[!note] 为什么需要多头? 单头注意力只能关注一种关系模式。多头让模型并行学习多种关系(语法、语义、指代…)。

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

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

  • 每个 head 有独立的投影矩阵 $W^Q, W^K, W^V$
  • 各 head 并行计算,结果拼接后再线性投影
  • 典型配置:GPT-2 small = 12 heads,d_model = 768,每头 d_k = 64

在 Transformer 中的位置

graph TD
    A["输入 Embedding + 位置编码"] --> B["Multi-Head Self-Attention"]
    B --> C["Add & Norm(残差连接)"]
    C --> D["Feed-Forward Network"]
    D --> E["Add & Norm"]
    E --> F["下一层 / 输出"]
  • Encoder:只有 Self-Attention,每个位置可关注所有位置
  • Decoder:有 Masked Self-Attention(只看左侧)+ Cross-Attention(Q 来自 Decoder,K/V 来自 Encoder 输出)

复杂度与局限

项目
时间复杂度$O(n^2 \cdot d)$,n 为序列长度
空间复杂度$O(n^2)$(注意力矩阵)
主要瓶颈长序列时二次方增长,催生了 FlashAttention、线性注意力等变体

相关概念