Appearance
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, BigBird | O(n) |
| Linear Attention | 核技巧近似 softmax | Performer, Linear Transformer | O(n) |
| Flash Attention | IO 感知的分块计算 | 几乎所有现代模型 | O(n²) 但内存友好 |
| MQA | 所有头共享 K/V | Falcon, PaLM | 减少 KV Cache |
| GQA | 头分组共享 K/V | Llama 2/3, Mistral | 平衡效率与质量 |
| MLA | 低秩压缩 K/V | DeepSeek 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 内存 |
|---|---|---|
| 2K | 4M | 8 MB |
| 8K | 64M | 128 MB |
| 32K | 1B | 2 GB |
| 128K | 16B | 32 GB |
| 1M | 1T | 2 TB |
这就是为什么长上下文是核心工程挑战。
工程优化
Flash Attention
核心洞察: GPU 内存层次结构
HBM (高带宽内存): 大但慢
SRAM (共享内存/缓存): 小但快
Flash Attention:
1. 将 Q/K/V 分块
2. 每次加载一小块到 SRAM
3. 在 SRAM 中计算 Attention
4. 只写回最终结果到 HBM
效果: 减少 HBM 读写,速度提升 2-4xKV 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 的起点。
Related Pages
- Transformer Architecture — Transformer 完整架构
- KV Cache & Prompt Caching — KV Cache 优化详解
- Mixture of Experts — MoE 架构中的 Attention
- Model Inference & Deployment — 推理优化技术
- Speculative Decoding — 推理加速
- Text-to-Video / Video Generation — 视觉 Transformer 中的 Attention
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) — 大语言模型的核心定义、技术原理与发展历程