注意力不是一条升级路线,而是四笔账的不同取舍
这些缩写经常被排成“新架构排行榜”,其实它们未必在改同一件事:MQA/GQA 减少 K/V 头,MLA 改变缓存表示,SWA 改变每层可见范围,Linear Attention 改写聚合算子并维护递归状态。先分清训练、Prefill 与 Decode,再谈谁更省。
先把标准 Softmax Attention 说准,再看谁改了哪一步
在因果 self-attention 中,每个位置都会投影出 Query(查询)、Key(键)与 Value(值);位置 t 的 query 只能读取 mask 允许的 j≤t 位置。训练和 Prefill 会并行产生整段 Q/K/V,自回归 Decode 才是“一个新 query 读取历史 KV”。MQA、GQA、MLA 与 SWA 仍可使用 Softmax;Linear Attention 则可能连相似度核和聚合顺序也一起改变。
单头缩放点积注意力
M 是因果、窗口或其他可见性 mask;多头注意力(Multi-Head Attention,MHA)对多组投影分别计算,再拼接并经过输出投影。MQA/GQA 改 K/V 头怎样共享,不自动改变 M,也不自动减少每个 query 需要评分的 token 位置数。
当前位置怎样发起读取
同一个 token 在不同上下文层表示下会产生不同 Q。它不是字符串关键词,而是一组由模型学出的连续向量。
历史怎样被匹配
K 像每段历史的“可检索索引”。QKᵀ 得到的只是匹配分数,还没有真正把历史内容取回来。
匹配后聚合什么
Softmax 权重乘 V,才形成该头传给当前位置的信息。K 参与决定权重,V 决定对应位置贡献的内容;两者都不是可单独解释的数据库字段。
q=(1,0),两把 key 分别是 k₁=(1,0)、k₂=(0,1)
两组点积是 [1,0]。若 head dim 为 2,除以 √2 后约为 [0.707,0],Softmax 约得到 [0.67,0.33]。它不是“只取最像的一段”,而是把两段 Value 按 67% 与 33% 混合。多头注意力会用多组不同投影重复这件事。
可以把 Q 想成问题、K 想成目录卡、V 想成书页内容;MQA/GQA 像多位读者共享不同数量的目录卡,SWA 像每层只准翻附近页,Linear Attention 像维护持续更新的笔记。但真实模型是在连续向量上联合学习投影,目录卡与书页并没有稳定的人类语义,也不保证“最相关”位置一定得到最高权重。
六种机制,分属四个维度
先问 K/V 头是否共享,再问缓存保存逐头 K/V、压缩 latent 还是递归状态;随后看 mask 允许直接读多远,最后看聚合仍是精确 Softmax 还是换成 kernel/state recurrence。一个模型可以同时在四个维度上做选择。
| 机制 | 主要改变 | 每层直接可见范围 | Decode 历史 carry | Prefill 的长度主项 |
|---|---|---|---|---|
| MHA | 每个 Q head 配独立 K/V head | 由 mask 决定;常见为全因果 | 逐 token、多 KV heads | 全因果常见 O(T²) |
| MQA / GQA | 所有或成组 Q heads 共享 K/V heads | 不因共享而缩短 | 逐 token、较少 KV heads | token 对仍常见 O(T²) |
| MLA | 联合压缩 KV,并为位置部分留专门路径 | DeepSeek MLA 仍是全因果 Softmax | 逐 token latent + RoPE key | 仍计算全局 token 对 |
| SWA | mask 限制到窗口 W | 单层仅窗口内;跨层间接传播 | 可用 rolling KV,约 O(W) | 常见 O(TW) |
| Linear / State | 改核函数或状态更新与乘法顺序 | 不是逐位置 Softmax 直连 | 固定形状 recurrent state | 对 T 常见线性扫描 |
MHA · Multi-Head Attention:每个 Q 头有自己的 K/V 头
在常见 decoder-only MHA 中,H_Q=H_KV。自回归生成要为每层、每个历史 token 保存所有 K 和 V;长上下文与高并发下,逻辑容量和逐步读取量都会增长。它是定义基线,不代表在所有任务上天然质量最高。
MQA · Multi-Query Attention:Q 仍多头,K/V 只有一组
MQA 不是“只剩一个注意力头”:多个 Q heads 仍产生各自输出,只共同读取一组 K/V。原论文针对增量解码的内存带宽瓶颈,报告相对 MHA 只有小幅质量下降;这是一组实验结果,不是所有模型的固定结论。
GQA · Grouped-Query Attention:若干 Q 头共享一组 K/V
例如 32 个 Q heads 配 8 个 KV heads,每 4 个 Q heads 共享一组 K/V。原始 GQA 论文中的 5% uptraining 结论来自 T5 XXL checkpoint 与其任务集合;从头训练或迁移 decoder-only 模型仍需单独验证。
MLA · Multi-Head Latent Attention:缓存联合压缩表示
DeepSeek-V2 缓存每个 token 的 cKV latent 与共享的解耦 RoPE key。推理时把 KV 上投影吸收到 query/output 投影,避免显式还原完整多头 K/V;因此它不是“更少 KV heads”,也不能只换一个配置字段得到。
SWA · Sliding Window Attention:每层只直看最近 W 个位置
窗口外位置不能在同一层直接被读取,但表示可逐层传播。Mistral 7B 论文给出的理论范围是经过 k 层最多传播约 kW;这不等于对远处原始 token 的一次直接内容寻址,也不保证信息无损。
Linear / State:历史被折进有限状态
典型目标是让自回归 Decode 的 carry 形状不随已解码长度增长,并让训练/Prefill 对序列长度采用线性扫描或 chunk 算法。固定的是历史状态形状,不是训练激活、总计算或信息容量;精确回看能力取决于状态与更新规则。
GQA 省多少,直接数 KV 头就能得到第一数量级
对保存逐 token K/V 的 MHA、MQA 与 GQA,先按 batch、层数、序列长度、KV head 数、head dimension 与 dtype 复算模型级逻辑容量。这个公式不直接适用于 MLA latent、SWA rolling cache 或递归状态。
B 是并发序列 batch,L 是层数,T 是每条序列实际缓存长度,H_KV 是 KV heads,d_h 是每个 KV head 的维度。它算整个模型的逻辑张量,不等同于 Tensor Parallel 后的单 rank 驻留量或分页后的物理占用。
32 层、32K token、8 个 Q heads、head dim 128
MHA 有 8 个 KV 头:32×32768×8×128×2×2 bytes = 4 GiB。GQA 若只有 2 个 KV 头,就是 1 GiB;MQA 只有 1 个 KV 头,则约 512 MiB。在这些假设下,KV 容量正比于 KV 头数。
MHA · 8 KV heads
每个 Q 头独立缓存 K/V。这里还没有乘并发序列数。
GQA · 2 KV heads
容量是 MHA 的四分之一;8 个 Q 头仍然存在。
MQA · 1 KV head
容量是 MHA 的八分之一;是否值得要用质量和吞吐共同验证。
| 阶段 | MHA → GQA/MQA | MLA | SWA | Linear / State |
|---|---|---|---|---|
| 训练 / Prefill | 减少 K/V 投影与张量宽度,但全局 mask 下仍为每个 Q head 计算 T² 级 token 对 | 压缩缓存表示不等于消除全局 Softmax token 对 | 窗口 mask 可把 token 对降到约 TW | 通常扫描全部 T 个位置;反向激活不自动变常数 |
| 自回归 Decode | 历史 KV 随 T 增长,容量与一阶读取量按 H_KV 缩放 | latent 与 RoPE key 仍随 T 增长,但每 token 更窄 | rolling cache 可在 W 后停止增长 | carry 形状可与已解码长度解耦 |
可手算:DeepSeek-V2 的 latent 缓存口径
论文配置为 60 层、128 attention heads、d_h=128、d_c=512、d_h^R=64。在 32K、BF16、batch 1 下,MLA 逻辑缓存是 60×32768×(512+64)×2 bytes = 2.109375 GiB;同维度 MHA 则是 60×32768×2×128×128×2 bytes = 120 GiB,元素数相差约 56.9×。这是论文参数的理论张量账,不是实际服务显存或吞吐承诺。
上面都没有算权重、激活、attention 中间量、临时 workspace、页表、allocator 与对齐。Tensor Parallel 可能分片,KV 量化会改变每元素字节,Prefix Cache 会共享物理块;PagedAttention 主要改变块管理和碎片,不改变 checkpoint 定义的逻辑元素数。
看模型例子时,重点是它把哪些机制拼在了一起
下列数字来自对应论文或官方配置,只证明“该 checkpoint 怎样组合机制”。它们不是同一训练数据、模型规模、硬件与 runtime 下的横向实验,不能据此排质量或速度名次。
原始 Transformer
每个 attention head 使用各自的 Q/K/V 投影,输出拼接后再投影。论文同时包含 encoder self-attention、decoder masked self-attention 与 cross-attention;本页的 KV Cache 讨论专指自回归 decoder。
Mistral 7B
32 层、32 Q heads、8 KV heads,并在每层使用 4,096 的滑动窗口。按论文 rolling buffer,32K 序列只保留窗口可使缓存相对保留全部 32K 缩小 8×;跨层理论传播范围不等于单层全局直连。
Qwen3 家族
技术报告的 Dense 与 MoE 表都使用 GQA,但比例随型号变化:Qwen3-32B 是 64 Q / 8 KV heads,Qwen3-30B-A3B 是 32 / 4。FFN 是 Dense 还是 MoE,与 attention 的 KV 共享是两条独立轴。
DeepSeek-V2
60 层、128 attention heads,却为每层每 token 缓存 512 维 compressed KV latent 与 64 维共享 RoPE key。权重吸收后的执行图与朴素“先还原 K/V”不同,runtime 必须实现对应路径。
Kimi Linear
每 3 个 Kimi Delta Attention 状态层插入 1 个全局 MLA 层。对 48B total / 3B active 配置,论文报告 KV Cache 最多减少 75%;Figure 7 的 batch 1、1M context TPOT 实测约快 2.3×,§6.3 则把省下的显存用于更大 batch,给出最高 6.3× 的理论解码加速。两种口径都不能外推到所有 Linear Attention。
全局层提供直接路径,不是自动纠错
全局 attention 层能直接读取它所接收表示对应的全部历史位置,并保存自己的增长型 KV;它不保证恢复早先状态层已经丢掉的细节。评估必须看层型比例、信息路径、缓存总和与任务结果。
先分清“训练新架构”还是“部署已有 checkpoint”
注意力投影、head 数、mask 与状态更新都写进权重和执行图,不能把 MHA checkpoint 的配置改成 MLA 或 Linear 就保持等价。只有在可重新训练、继续训练或已有兼容 checkpoint 时,才按 Decode KV 带宽、窗口 token 对与流式状态选择架构;部署现有模型应优先优化它实际支持的 kernel、量化、并行与调度。
七个最常见误解,都来自把不同阶段与维度混在一起
“GQA 是稀疏注意力”——不是
标准 GQA 仍可让每个 Q 位置与全部历史位置计算注意力;它稀的是 K/V 头的数量,不是 token-to-token 的可见连接。
“GQA 把长 Prefill 从平方变线性”——不是
它缩窄 K/V 投影、缓存与 Decode 读取,但全局 Softmax 仍为每个 Q head 处理可见 token 对。是否物化 score 矩阵取决于 kernel,token 对数量并未因 KV 共享消失。
“FlashAttention 是一种新的可见范围”——不是
FlashAttention 用 tiling 与 online softmax 减少 HBM 往返,计算的是算法意义上的精确 attention,不是近似或新 mask;有限精度下也不承诺与任意朴素实现逐 bit 相同。
“Linear Attention 的所有成本都是 O(T)”——不完整
常见因果递推对序列长度是线性扫描,Decode carry 可固定形状;但状态维度、chunk 大小、门控与 kernel 决定常数,训练仍保存或重算 T 个位置的激活。渐近复杂度不是吞吐保证。
“MLA 就是更小的 GQA”——过度简化
DeepSeek MLA 联合压缩 K/V、单独缓存共享 RoPE key,并通过投影吸收改变执行路径;它仍做多头全局 Softmax。只把 latent 叫成“2.25 个 KV heads”会丢失结构契约。
“窗口层叠后就等于全注意力”——不等价
层叠会扩大理论感受野,但远处信息要经过多次有损变换才能传来;全注意力允许当前位置直接给任意历史位置分配权重。是否等效必须用目标任务验证。
“改一个 config 就能换注意力”——不成立
head 共享、latent 投影、mask 与 recurrent state 都参与训练。GQA 的 5% uptraining 是特定 T5 实验,不是任意 checkpoint 的通用无损转换证明;MLA/Linear 还需要匹配权重、kernel、缓存布局与服务接口。
一手来源与证据边界
优先使用论文、官方文档、官方模型卡和代码仓库。页面中的数字只代表来源所述设置,不自动外推到其他模型与数据。
缩放点积注意力与 Multi-Head Attention 的原始定义。
Multi-Query Attention:共享 K/V 以降低增量解码的内存带宽。
Grouped-Query Attention 的定义,以及从 MHA checkpoint uptrain 的实证。
GQA 与 Sliding Window Attention 在真实开源模型中的组合实例。
Multi-Head Latent Attention 的低维 KV 表示、解耦 RoPE 与推理设计。
采用 GQA 的现代 Dense/MoE 模型家族实例。
Kimi Delta Attention 与 MLA 的 3:1 层间混合,以及 1M 上下文下 batch 1 TPOT 与理论吞吐上界的不同口径。
因果 Kernel Linear Attention 的 feature map、归一化状态与递归边界。
精确 Softmax Attention 的 IO-aware 算法,不改变可见范围与注意力定义。
64 个 Q heads、8 个 KV heads、head dim 128 的当前配置实例。
3:1 KDA/全局 MLA、模型配置、开放 kernel 与部署支持边界。