Skip to content

Attention Mechanism

Attention(注意力机制)是 Transformer 架构的核心计算单元,也是现代大语言模型一切能力的根基。它通过计算序列中每个位置与其他所有位置的相关性权重,实现了对上下文信息的选择性聚焦。从 2017 年 "Attention Is All You Need" 提出以来,这一机制经历了从标准 Self-Attention 到 Multi-Query Attention、Grouped-Query Attention、Flash Attention、Multi-Head Latent Attention 的持续演进。

核心思想

从人类注意力到机器注意力

人类在阅读时不会平等处理每个词,而是自动聚焦到关键信息上:

句子: "The cat sat on the mat because it was tired."

                         "it" 指代 "cat" 而非 "mat"

Attention 机制让模型学会这种聚焦能力——为每个词分配不同的"关注度"。

数学本质

Attention 是可微分的软寻址机制

Attention(Q, K, V) = softmax(QK^T / √d_k) · V

其中:
- Q (Query):  "我要查什么"
- K (Key):    "我有什么"
- V (Value):  "内容是什么"
- QK^T:       查询与键的相似度打分
- softmax:    归一化为概率分布(注意力权重)
- √d_k:       缩放因子,防止点积过大导致梯度消失

主要变体

1. Self-Attention(自注意力)

序列中的每个元素都与其他所有元素计算注意力:

输入: [我, 喜欢, 深度, 学习]

每个词都与其他所有词计算关联度

"深度" 与 "学习" 的关联度最高

特点

  • 并行计算所有位置对
  • 捕获长距离依赖
  • 计算复杂度 O(n²)

2. Cross-Attention(交叉注意力)

两个不同序列之间的注意力计算:

Query 来自序列 A(如解码器)
Key/Value 来自序列 B(如编码器)

用于机器翻译、图文对齐等任务

3. Multi-Head Attention(多头注意力)

将注意力计算分成多个"头",每个头学习不同的关注模式:

输入 → 8 个独立的 Attention 计算 → 拼接 → 线性投影

头 1: 关注语法关系(主谓宾)
头 2: 关注语义关系(同义词)
头 3: 关注指代关系(it → cat)
头 4: 关注位置关系(相邻词)
...

为什么需要多头

  • 单一注意力可能遗漏某些关系类型
  • 多头提供"多视角"理解
  • 类似 CNN 中的多通道特征图

4. Causal / Masked Attention(因果注意力)

Decoder-only 模型的核心——每个位置只能看到前面的位置:

位置 1: 只能看到 [我]
位置 2: 只能看到 [我, 喜欢]
位置 3: 只能看到 [我, 喜欢, 深度]
位置 4: 可以看到 [我, 喜欢, 深度, 学习]

通过上三角掩码实现:
[1 0 0 0]
[1 1 0 0]
[1 1 1 0]
[1 1 1 1]

5. 高效 Attention 变体

变体核心改进代表模型复杂度
Sparse Attention只关注局部或特定模式Longformer, BigBirdO(n)
Linear Attention核技巧近似 softmaxPerformer, Linear TransformerO(n)
Flash AttentionIO 感知的分块计算几乎所有现代模型O(n²) 但内存友好
MQA所有头共享 K/VFalcon, PaLM减少 KV Cache
GQA头分组共享 K/VLlama 2/3, Mistral平衡效率与质量
MLA低秩压缩 K/VDeepSeek V2/V3极致 KV Cache 压缩

Attention 模式可视化

不同层的 Attention 头展现出可解释的模式:

模式类型描述示例
位置注意力关注相邻词介词 → 名词
句法注意力关注语法关系动词 → 主语
共指注意力关注指代关系it → cat
语义注意力关注语义相关词king → queen
分隔符注意力关注句子/段落边界[SEP] → 关键信息

计算复杂度分析

标准 Self-Attention

计算量: O(n² · d)    n=序列长度, d=模型维度
内存:   O(n²)         注意力矩阵

对于 4096 长度的序列:
- 注意力矩阵: 4096 × 4096 = 16M 元素
- FP16: 32MB
- 12 层: 384MB(仅 Attention)

长上下文的挑战

序列长度注意力矩阵大小FP16 内存
2K4M8 MB
8K64M128 MB
32K1B2 GB
128K16B32 GB
1M1T2 TB

这就是为什么长上下文是核心工程挑战

工程优化

Flash Attention

核心洞察: GPU 内存层次结构

HBM (高带宽内存): 大但慢
SRAM (共享内存/缓存): 小但快

Flash Attention:
1. 将 Q/K/V 分块
2. 每次加载一小块到 SRAM
3. 在 SRAM 中计算 Attention
4. 只写回最终结果到 HBM

效果: 减少 HBM 读写,速度提升 2-4x

KV Cache 优化

标准 MHA: 每层 h 个头,每个头有自己的 K/V
MQA: 所有头共享 1 组 K/V    → 内存减少 h 倍
GQA: 头分 g 组共享 K/V      → 内存减少 h/g 倍
MLA: 低秩压缩 K/V           → 内存减少 10x+

为什么 Attention 如此重要

1. 统一框架

Attention 统一了多种 NLP 任务:

  • 翻译: Cross-Attention 对齐源语言与目标语言
  • 摘要: Self-Attention 识别关键信息
  • 问答: Attention 定位答案位置
  • 代码生成: Attention 理解变量作用域

2. 可解释性

Attention 权重提供了模型"在看什么"的线索:

  • 可视化 Attention 图可发现模型的关注模式
  • 帮助调试和信任建立
  • 但也需注意:Attention ≠ Explanation(注意力不等于解释)

3. 可扩展性

  • 增加头数、维度可提升表达能力
  • 与 FFN 交替形成深层网络
  • 支持并行训练(对比 RNN 的序列依赖)

局限性与批评

1. 二次复杂度

O(n²) 是 Attention 的阿喀琉斯之踵:
- 长文档处理成本高
- 视频/音频序列难以直接应用
- 催生了一系列高效 Attention 研究

2. 缺乏归纳偏置

  • 不像 CNN 有平移不变性
  • 不像 RNN 有顺序处理偏置
  • 需要位置编码来补充顺序信息

3. Attention 不是解释

误区: "Attention 权重高 = 模型依赖这个词"
事实: Attention 权重与模型决策的相关性并不总是直接对应
      高权重可能是"抑制"而非"激活"

Synthesis

Attention 机制是深度学习领域最具影响力的创新之一。它用极其简单的数学形式(QK^T 点积 + softmax)实现了强大的上下文建模能力,成为 Transformer 乃至现代 AI 的基石。从标准 Self-Attention 到 Flash Attention、GQA、MLA,这一机制的持续优化推动了大模型在效率和规模上的边界。理解 Attention 是理解一切现代 LLM 的起点。

Sources

  • "Attention Is All You Need" (Vaswani et al., 2017)

  • "FlashAttention: Fast and Memory-Efficient Exact Attention" (Dao et al., 2022)

  • "GQA: Training Generalized Multi-Query Transformer Models" (Ainslie et al., 2023)

  • "DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model" (2024)

  • Large Language Model (LLM) — 大语言模型的核心定义、技术原理与发展历程

AI Knowledge Base — 持续积累