注意力变体:Multi-Head / Cross / Sparse / Linear
Self-Attention 之后还有什么?讲清楚现代 Transformer 各种注意力家族成员。
L3-05 我们看了 Self-Attention 的标准版本:
这一篇讲:这个公式之外的”注意力家族”。
一、Multi-Head Attention(多头)
一句话:并行跑多个 Attention,concat 后再投影。
为什么要多头
单个 Attention 学到一种”关系模式”——比如近邻、句法、共现。 多个头并行 —— 每头学不同模式,信息更丰富。
数学
单头:head_i = Attention(Q W_i^Q, K W_i^K, V W_i^V)
多头:MultiHead(Q, K, V) = Concat(head_1, ..., head_h) W^O
- = head 数(典型 8、12、16、32)
- 每个 head 的维度
- 总参数量 ≈ 单头(因为每头维度变小)
直觉
像让 8 个不同的”分析员”同时读同一段话:
- Head 1 关注主谓关系
- Head 2 关注代词指代
- Head 3 关注情感
- …
然后把每个人的笔记拼起来。
实际:训练后用机制可解释性技术看每头确实学到不同模式(详见 L6-04)。
二、Self vs Cross Attention
Self-Attention
Q、K、V 全来自同一个序列:
encoder input → Q, K, V → Attention(Q, K, V)
每个 token “关注”序列里所有其他 token 自己。 用在:BERT、GPT、ViT 等。
Cross-Attention
Q 来自一个序列,K、V 来自另一个序列:
Q from decoder
K, V from encoder
→ Attention(Q_dec, K_enc, V_enc)
让 decoder “查询” encoder 的输出。 用在:原 Transformer encoder-decoder(机器翻译)、Stable Diffusion 文本→图像的交叉信息流。
三、Causal Attention(因果遮蔽)
GPT 类自回归模型用的:预测下一个 token 时不能看到未来。
普通 attention 矩阵 causal mask
┌──────────────┐ ┌──────────────┐
│ * * * * * * │ │ * │
│ * * * * * * │ │ * * │
│ * * * * * * │ → │ * * * │
│ * * * * * * │ │ * * * * │
│ * * * * * * │ │ * * * * * │
│ * * * * * * │ │ * * * * * * │
└──────────────┘ └──────────────┘
下三角,上三角被 -inf 屏蔽
实现:把 attention 分数矩阵上三角部分设为 ,再过 softmax → 这些位置权重变 0。
mask = torch.triu(torch.ones(L, L), diagonal=1).bool()
scores = scores.masked_fill(mask, float('-inf'))
attn = F.softmax(scores, dim=-1)
GPT、LLaMA、Claude 等所有解码器型 LLM 都用 causal attention。
四、稀疏注意力(Sparse Attention)
问题:O(n²) 是瓶颈
标准注意力对长度 n 序列要算 矩阵。
- 1k token → 1M 操作
- 10k → 100M
- 100k → 10G 操作
长上下文的最大成本来自这里。
Sliding Window Attention
每个 token 只看附近 个 token。。
- 优点:线性复杂度
- 缺点:失去长距离依赖
用在:Longformer、Mistral。
Strided / Dilated
固定步长跳跃,看远的几个 token。 组合”近+远” → 既有局部细节也有全局信号。
Global tokens
让某些 token(如 [CLS])能看所有,其他用稀疏 —— 兼顾全局。
用在:BigBird、ETC。
五、Linear Attention(线性化)
标准 attention:
瓶颈在 —— 。
线性 attention 找一个近似让计算变 (n 远大于 d 时省):
其中 是某个核函数(如 ELU+1、随机特征)。
代表作:
- Performer(2020):用 random features 近似 softmax
- Linear Transformer(2020):核方法
- Mamba(2024):State Space Model 的线性递归
但实测:线性 attention 长序列上比 standard 弱——精度有差距。 至今多数大模型还是用标准 + Flash 加速。
六、Flash Attention(不是新公式,是新实现)
L7-01 / L7-03 详讲过。一句话回顾:
同样的 softmax(QK^T)V,但中间结果留在 GPU 的 SRAM 不写显存—— 2-5× 加速,且精度无损。
属于”算法不变、工程优化”的胜利。 所有现代 Transformer 训练都用 FlashAttention v2/v3。
七、Multi-Query / Grouped-Query Attention(GQA)
问题:推理时 KV cache 太大
每个 head 都要存自己的 K、V cache —— 32 头模型推理一个长上下文,KV cache 几 GB。
Multi-Query Attention(2019)
所有 head 共享同一组 K、V,只有 Q 各不同:
普通 MHA:32 个 (Q, K, V) head
MQA: 32 个 Q head + 1 套共享 KV
KV cache 缩小 32×。但质量损失明显。
Grouped-Query Attention(2023,折中)
把 32 个 Q head 分成 8 组,每组共享 KV:
32 个 Q head + 8 套 KV
KV cache 缩 4×,质量几乎无损。
LLaMA 2/3、Mistral 等开源 LLM 都用 GQA。
八、Rotary Position Embedding(RoPE)
L3-05 没仔细讲位置编码。补一下:
Self-Attention 本身不知道顺序 —— 需要额外注入位置信息。
| 方法 | 怎么注入 |
|---|---|
| Absolute(原 Transformer) | 给每个位置加一个固定 sin/cos 向量 |
| Learned(BERT、GPT-2) | 学习每个位置的 embedding |
| Relative(T5) | 在 attention 分数里加 bias 表示距离 |
| RoPE(LLaMA、Qwen 等) | 把 Q、K 在复平面旋转一个角度表示位置 |
RoPE 的优势:
- 自然外推到更长序列
- 不增加参数
- 计算高效
今天主流 LLM 都用 RoPE。
九、注意力的未来
研究方向:
State Space Models(SSM)
如 Mamba —— 完全抛弃 attention,用线性递归处理序列。 速度快 5-10×,质量接近 Transformer。详见论文精读 Mamba。
Hybrid 架构
部分层用 attention、部分层用 SSM。 代表:Jamba(Mamba + Transformer)、Falcon Mamba。
长上下文
Ring Attention、Sequence Parallel、稀疏 + 分块组合 —— 让 1M token 上下文可行。
选型速查
| 场景 | 选什么 |
|---|---|
| 标准 LLM 训练 | MHA + GQA + RoPE + FlashAttention |
| 长上下文需要 | Sliding window 或 SSM |
| 多模态(图+文) | Self-Attention + Cross-Attention 组合 |
| 极致推理速度 | MQA / GQA |
| 研究新方向 | Mamba 类 SSM |
注意力变体的演化有个规律:
- 2017:标准 MHA —— 能用就行
- 2019-2021:稀疏 / 线性 —— 解决长序列成本
- 2022-2023:FlashAttention + GQA —— 工程优化
- 2024+:SSM、混合架构 —— 重新思考”序列建模到底要不要 attention”
Attention is all you need 这个标题 2017 写下时是宣言 —— 2025 时它正被重新审视。
下一篇推荐:L3-08 完整 Transformer 架构 或 L3-09 BERT vs GPT 对比。
读到这里说明你认真在学 🎯
订阅每周精选 —— 下一篇新文章 / 新可视化第一时间送到邮箱。
讨论区
· 用 GitHub 账号登录评论src/components/Comments.astro 顶部填入
仓库 ID 和分类 ID(见组件注释里的配置步骤)。