HelloAI
L3 第 7 篇 🐥 难度 🕒 11 分钟

注意力变体:Multi-Head / Cross / Sparse / Linear

Self-Attention 之后还有什么?讲清楚现代 Transformer 各种注意力家族成员。

阿莱
2026/9/4

L3-05 我们看了 Self-Attention 的标准版本:

Attention(Q,K,V)=softmax(QKTdk)V\text{Attention}(Q, K, V) = \text{softmax}\Big(\frac{QK^T}{\sqrt{d_k}}\Big) V

这一篇讲:这个公式之外的”注意力家族”

一、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
  • hh = head 数(典型 8、12、16、32)
  • 每个 head 的维度 dk=dmodel/hd_k = d_{\text{model}} / h
  • 总参数量 ≈ 单头(因为每头维度变小)

直觉

像让 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 分数矩阵上三角部分设为 -\infty,再过 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 序列要算 n×nn \times n 矩阵。

  • 1k token → 1M 操作
  • 10k → 100M
  • 100k → 10G 操作

长上下文的最大成本来自这里

Sliding Window Attention

每个 token 只看附近 ww 个 token。O(nw)O(n \cdot w)

  • 优点:线性复杂度
  • 缺点:失去长距离依赖

用在:Longformer、Mistral。

Strided / Dilated

固定步长跳跃,看远的几个 token。 组合”近+远” → 既有局部细节也有全局信号。

Global tokens

让某些 token(如 [CLS])能看所有,其他用稀疏 —— 兼顾全局。

用在:BigBird、ETC。

五、Linear Attention(线性化)

标准 attention:

softmax(QKTd)V\text{softmax}\Big(\frac{Q K^T}{\sqrt{d}}\Big) V

瓶颈在 QKTQK^T —— O(n2d)O(n^2 d)

线性 attention 找一个近似让计算变 O(nd2)O(n d^2)(n 远大于 d 时省):

attnϕ(Q)(ϕ(K)TV)\text{attn} \approx \phi(Q)(\phi(K)^T V)

其中 ϕ\phi 是某个核函数(如 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
💡 一个观察

注意力变体的演化有个规律:

  1. 2017:标准 MHA —— 能用就行
  2. 2019-2021:稀疏 / 线性 —— 解决长序列成本
  3. 2022-2023:FlashAttention + GQA —— 工程优化
  4. 2024+:SSM、混合架构 —— 重新思考”序列建模到底要不要 attention”

Attention is all you need 这个标题 2017 写下时是宣言 —— 2025 时它正被重新审视

下一篇推荐:L3-08 完整 Transformer 架构L3-09 BERT vs GPT 对比

📬

读到这里说明你认真在学 🎯

订阅每周精选 —— 下一篇新文章 / 新可视化第一时间送到邮箱。

💬

讨论区

· 用 GitHub 账号登录评论
⚠️ Giscus 评论未配置 —— 在 src/components/Comments.astro 顶部填入 仓库 ID 和分类 ID(见组件注释里的配置步骤)。