MHA、MQA、GQA 有什么区别?GQA是性能优化和性能之间的折中方案
MHA、MQA、GQA 有什么区别 举例说明下呢
GPT-5
这个问题问得非常好 👍 ——这三个概念(MHA、MQA、GQA)都出自 Transformer 的注意力机制(Attention)家族,它们的名称非常相似,但设计思路与用途略有不同。下面我详细解释一下它们之间的区别与联系,并辅以例子帮助理解。
🌟 一、MHA(Multi-Head Attention,多头注意力)
💡 基本概念
MHA 是 Transformer 标准架构中使用的注意力机制。
它的核心思想是:
把输入向量映射成多个「头」(head),每个头独立学习不同的注意力模式,最后再拼接融合结果。
🧩 数学表达
假设输入为矩阵 X∈Rn×dX∈Rn×d:
- Qi=XWiQQi=XWiQ
- Ki=XWiKKi=XWiK
- Vi=XWiVVi=XWiV
每个头计算:
headi=Softmax(QiKiTdk)Viheadi=Softmax(dkQiKiT)Vi然后拼接:
MHA(X)=[head1;…;headh]WOMHA(X)=[head1;…;headh]WO✅ 举例
比如一个 512 维的输入,使用 8 个头,每个头维度是 64。那就:
- 每个头专注于不同模式(比如一个头关注语法结构,一个头关注句法依赖),
- 最后再拼回来,获得综合理解。
🌟 二、MQA(Multi-Query Attention,多查询注意力)
💡 出发点
MQA 是针对 解码(推理)速度优化 的改进版。
提出者:Google(在 PaLM、T5.1.1 中使用)
它的核心思想是:
多个头共享同一个 Key(K) 和 Value(V),但仍然保留不同的 Query(Q)。
🚀 为什么要这样做?
在推理(生成)时,我们需要缓存 K 和 V。
如果每个头都独立存储一份 KV,就占用大量显存、计算慢。
而共享 K/V 后:
- 内存减少约 8 倍(假设8个头)
- 推理速度显著提升
- 性能略有下降(因为丢了一些头之间的独立性)
✅ 举例
例如一个语言模型有 8 个注意力头,在解码时:
- 原本每个头 K/V 各有一份缓存;
- 在 MQA 中,只保留 1 份 K/V;
- 所有头共享这份 K/V,各自计算 Q 并做注意力。
🌟 三、GQA(Grouped-Query Attention,分组查询注意力)
💡 出发点
GQA 是介于 MHA 和 MQA 之间的折中方案。
提出者:Google 在 Gemini、LLaMA 2 等中被采用。
🤔 思路
- 将多个头分为若干组;
- 每组中的头共享同一个 K/V,但每个头仍有自己的 Q。
比如:
- MHA:8 个头 → 8 组(每头独立)
- MQA:8 个头 → 1 组(全部共享)
- GQA:8 个头 → 4 组(每 2 个头共享)
这样:
- 推理缓存减小 → 高效
- 注意力多样性部分保留 → 准确率较 MQA 更高
✅ 举例
假设有 16 个头:
- MHA → 16 份 K/V
- MQA → 1 份 K/V
- GQA(4组) → 4 份 K/V
 这样在推理时节省了 4 倍缓存,占用比 MHA 少很多,但性能比 MQA 稍好。
🎯 总结对比表
表格
| 特性 | MHA | MQA | GQA | 
|---|---|---|---|
| K/V 是否共享 | ❌ 每头独立 | ✅ 全部共享 | ⚙️ 按组共享 | 
| 推理速度 | 慢 | 最快 | 介于两者之间 | 
| 内存占用 | 高 | 最低(约 1/8) | 中等 | 
| 模型能力 | 最强 | 略有下降 | 接近 MHA | 
| 实际应用 | 原始 Transformer | PaLM、T5.1.1、Gemini | LLaMA 2、Gemma、Mixtral | 
🧠 一句话记忆
MHA 最完整、MQA 最省、GQA 折中。
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号