# Attention

Author: Fanyi Pu

Published: 2026-09-07

Canonical: <https://pufanyi.com/blog/ml/ml-revisit/attention>

Notes for Attention

参考了 ([Purshow, 2026](https://pufanyi.com/blog/ml/ml-revisit/attention#bib-purshow2026attention); [Weng, 2023](https://pufanyi.com/blog/ml/ml-revisit/attention#bib-weng2023transformer); [苏剑林, 2024](https://pufanyi.com/blog/ml/ml-revisit/attention#bib-kexuefm-10091))。

## Multi-Head Attention

Multi-Head Attention (MHA) ([Vaswani et al., 2023](https://pufanyi.com/blog/ml/ml-revisit/attention#bib-vaswani2023attentionneed)) 大概就是把 QKV 分成多组：

$$
O = \begin{bmatrix}
O_1&\cdots&O_h
\end{bmatrix}W_o\\
O_t = \mathrm{Attention}\left(X_qW_q^{(t)}, X_kW_k^{(t)}, X_vW_v^{(t)}\right)
$$

为了压缩 KV cache，Multi-Query Attention (MQA) ([Shazeer, 2019](https://pufanyi.com/blog/ml/ml-revisit/attention#bib-shazeer2019fasttransformerdecodingwritehead)) 让 $K$ 和 $V$ 合并成一个 head。但是这样可能导致压缩过猛，所以 Grouped-Query Attention (GQA) ([Ainslie et al., 2023](https://pufanyi.com/blog/ml/ml-revisit/attention#bib-ainslie2023gqatraininggeneralizedmultiquery)) 将 head 分成 $g$ 组，每组 share 同一个 $W_k$ 和 $W_v$。

相同的 8 个 Query heads 自回归推理时缓存的 K/V

**MHA** Multi-Head Attention

Multi-Head Attention 的 Query 与 Key/Value heads

8 个 Query heads，8 个 Key heads 和 8 个 Value heads。每个 Query head 独享一组 K/V。斜线填充的 K/V 在自回归推理时缓存；连线表示各 Query head 使用哪组 K/V。

Values

Keys

Queries

1

2

3

4

5

6

7

8

[View diagram in the original article](https://pufanyi.com/blog/ml/ml-revisit/attention)

每个 Query head 独享一组 K/V

8 组 K/V **100%**

**GQA** Grouped-Query Attention

Grouped-Query Attention 的 Query 与 Key/Value heads

8 个 Query heads，2 个 Key heads 和 2 个 Value heads。每 4 个 Query heads 共享一组 K/V。斜线填充的 K/V 在自回归推理时缓存；连线表示各 Query head 使用哪组 K/V。

Values

Keys

Queries

1

2

3

4

5

6

7

8

[View diagram in the original article](https://pufanyi.com/blog/ml/ml-revisit/attention)

每 4 个 Query heads 共享一组 K/V

2 组 K/V **25%**

**MQA** Multi-Query Attention

Multi-Query Attention 的 Query 与 Key/Value heads

8 个 Query heads，1 个 Key heads 和 1 个 Value heads。每 8 个 Query heads 共享一组 K/V。斜线填充的 K/V 在自回归推理时缓存；连线表示各 Query head 使用哪组 K/V。

Values

Keys

Queries

1

2

3

4

5

6

7

8

[View diagram in the original article](https://pufanyi.com/blog/ml/ml-revisit/attention)

每 8 个 Query heads 共享一组 K/V

1 组 K/V **12.5%**

连线表示各 Query head 使用哪组 K/V；GQA 以 8 个 Query heads 分成 2 组为例。下方比例为相对 MHA 的 KV cache 大小，假设序列长度、每个 head 的维度、层数、batch size 和缓存精度相同。

## Multi-Head Latent Attention

Multi-Head Latent Attention (MLA) ([DeepSeek-AI et al., 2024](https://pufanyi.com/blog/ml/ml-revisit/attention#bib-deepseekai2024deepseekv2strongeconomicalefficient)) 尝试将 QKV 低秩压缩。

首先将 $X$ 压缩成 $C_q\in\mathbb{R}^{s_q\times d_{c}^{(q)}}$ 和 $C_{kv}\in\mathbb{R}^{s_{kv}\times d_{c}^{(kv)}}$ 两个低秩矩阵。这样子的话

$$
W_q\in\mathbb{R}^{d_c^{(q)}\times d_{qk}},\quad W_{k}\in \mathbb{R}^{d_c^{(kv)}\times d_{qk}}, \quad W_{v}\in\mathbb{R}^{d_c^{(kv)}\times d_{v}}
$$

然后考虑

$$
QK^{\top} = C_qW_q\left(C_{kv}W_k\right)^{\top} = C_qW_{q}W_{k}^{\top}C_{kv}^{\top}
$$

因为 $C_qW_qW_k^{\top}$ 计算比较简单，我们把这部分合并，cache $C_{kv}$ 即可。

但问题是，我们之前因为需要得到 $K=C_{kv}W_k$ 然后 apply RoPE ([Su et al., 2023](https://pufanyi.com/blog/ml/ml-revisit/attention#bib-su2023roformerenhancedtransformerrotary))，现在 $C_qW_qW_k^{\top}$ 合并了，无法在中间插入 rope。解决方案是给 $Q$ 和 $K$ 单独加一个 RoPE 分支：$Q$ 的 RoPE 分支从 $C_q$ 投影得到，$K$ 的 RoPE 分支直接从 $X$ 投影得到，并在所有 heads 间共享一个 $K$。

下面沿用上文的矩阵记号展开 MLA 的结构：

Query 分支 K/V 内容分支 RoPE 分支 推理时缓存

从下往上读 · 横向滑动查看完整结构 →

MLA：共享压缩 K/V 与独立 RoPE 分支

从下往上读。沿用文章的矩阵记号，输入 X 分别压缩成 C\_q 和共享的 C\_kv。 内容分支为 Q = C\_q W\_q、K = C\_kv W\_k、V = C\_kv W\_v。C\_q 还生成各 head 的 RoPE Query Q\_R；另一条独立分支从 X 直接投影并应用 RoPE，得到所有 heads 共享的 RoPE Key K\_R。Q 与 Q\_R、K 与 K\_R 分别沿特征维度拼接，与 V 一起完成多头 attention，拼接各 head 并乘 W\_o 得到 O。斜线仅标在 C\_kv 和 K\_R 上： 每层的 KV cache 保存这两项随历史 token 累积的行。

输入序列

$X$

Query latent

$C_q$

CACHE

共享 KV latent

$C_{kv}$

内容 Query · 各 head

$Q$

RoPE Query · 各 head

$Q_R$

共享 RoPE Key

$K_R$

内容 Key · 各 head

$K$

Value · 各 head

$V$

Query · 拼接内容与位置

$\begin{bmatrix}Q&Q_R\end{bmatrix}$

Key · 拼接内容与位置

$\begin{bmatrix}K&K_R\end{bmatrix}$

Multi-Head Attention

输出

$O$

降维投影

展开

投影 + RoPE

展开 K / V

[View diagram in the original article](https://pufanyi.com/blog/ml/ml-revisit/attention)

每层的 KV cache **$C_{kv}$ 和 $K_R$**

从下往上读，沿用上文的矩阵记号：内容分支为 $Q=C_qW_q$、$K=C_{kv}W_k$、$V=C_{kv}W_v$。下标 $R$ 表示额外的 RoPE 分支，其中 $K_R$ 在所有 heads 间共享；方括号表示沿特征维度拼接。图中展开 K/V 是为了展示结构；推理时可将$W_k$ 吸收到 Query 侧，将 $W_v$ 吸收到输出投影 $W_o$ 中， 无需缓存展开后的多头 K/V。

## References

Ainslie, J., Lee-Thorp, J., de Jong, M., Zemlyanskiy, Y., Lebrón, F., & Sanghai, S. (2023). *GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints*. [arxiv.org](https://arxiv.org/abs/2305.13245 "https://arxiv.org/abs/2305.13245")

DeepSeek-AI, Liu, A., Feng, B., Wang, B., Wang, B., Liu, B., Zhao, C., Dengr, C., Ruan, C., Dai, D., Guo, D., Yang, D., Chen, D., Ji, D., Li, E., Lin, F., Luo, F., Hao, G., Chen, G., … Xie, Z. (2024). *DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model*. [arxiv.org](https://arxiv.org/abs/2405.04434 "https://arxiv.org/abs/2405.04434")

Purshow. (2026). *Attention Architecture Notes*. [github.com](https://github.com/Purshow/Purshow_Notes/blob/main/Attention/EN/Attention_EN.pdf "https://github.com/Purshow/Purshow_Notes/blob/main/Attention/EN/Attention_EN.pdf")

Shazeer, N. (2019). *Fast Transformer Decoding: One Write-Head is All You Need*. [arxiv.org](https://arxiv.org/abs/1911.02150 "https://arxiv.org/abs/1911.02150")

Su, J., Lu, Y., Pan, S., Murtadha, A., Wen, B., & Liu, Y. (2023). *RoFormer: Enhanced Transformer with Rotary Position Embedding*. [arxiv.org](https://arxiv.org/abs/2104.09864 "https://arxiv.org/abs/2104.09864")

Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., Kaiser, L., & Polosukhin, I. (2023). *Attention Is All You Need*. [arxiv.org](https://arxiv.org/abs/1706.03762 "https://arxiv.org/abs/1706.03762")

Weng, L. (2023). The Transformer Family Version 2.0. *Lilianweng.Github.Io*. [lilianweng.github.io](https://lilianweng.github.io/posts/2023-01-27-the-transformer-family-v2/ "https://lilianweng.github.io/posts/2023-01-27-the-transformer-family-v2/")

苏剑林. (2024, May). *缓存与效果的极限拉扯：从MHA、MQA、GQA到MLA*. [spaces.ac.cn](https://spaces.ac.cn/archives/10091 "https://spaces.ac.cn/archives/10091")
