MHA、MQA 和 GQA 是 Transformer 架构中三种核心的注意力机制,它们的主要区别在于对 Key (K) 和 Value (V) 矩阵的共享策略,这直接影响了模型的表达能力、参数量和推理效率。
🧠 核心区别速览
| 机制 | 全称 | 核心思想 | 表达能力 | 参数量/显存占用 | 推理速度 |
|---|---|---|---|---|---|
| MHA | Multi-Head Attention | 每个头都有独立的 Q、K、V 矩阵 | 最高 | 最高 | 最慢 |
| MQA | Multi-Query Attention | 所有头共享同一组 K、V 矩阵 | 较低 | 最低 | 最快 |
| GQA | Grouped-Query Attention | 将头分组,组内共享 K、V 矩阵 | 接近 MHA | 中等 | 接近 MQA |
🔍 机制详解
1. MHA (Multi-Head Attention)
MHA 是 Transformer 的原生多头注意力机制。它将输入通过不同的线性变换,独立地映射为多组 Q、K、V 向量,让模型能够从多个不同的表示子空间(如语法、语义)并行地关注输入序列的不同部分。其计算复杂度为 O(n²d),其中 n 为序列长度,d 为特征维度。
2. MQA (Multi-Query Attention)
MQA 是 MHA 的一种高效变体,旨在解决自回归解码时 KV 缓存占用显存过大的问题。它让所有注意力头共享同一组 K 和 V 矩阵,仅保留独立的 Q 矩阵。这使 KV 缓存大小和参数量都减少了约 h 倍(h 为头数),显著提升了推理速度,但表达能力会有所下降。
3. GQA (Grouped-Query Attention)
GQA 是 MHA 和 MQA 的折中方案。它将查询头 (Q) 分为 G 个组,每个组共享一组 K 和 V 矩阵。通过调整组数 G,可以在模型性能和推理效率之间进行灵活权衡。当 G=1 时,GQA 退化为 MQA;当 G=h 时,则等同于 MHA。
🎯 如何选择?
- 追求极致性能:在训练阶段或对模型质量要求极高的场景下,优先选择 MHA。
- 追求极致效率:在推理阶段,对显存和速度有严苛要求,且能接受一定的性能损失时,可选择 MQA。
- 追求性能与效率的平衡:在大多数实际应用场景中,GQA 是更优的选择,它能在保持接近 MHA 性能的同时,获得显著的推理加速。