MHA、MQA、GQA 有什么区别?GQA是性能优化和性能之间的折中方案

MHA、MQA、GQA 有什么区别 举例说明下呢
 
 
GPT-5
 

这个问题问得非常好 👍 ——这三个概念(MHA、MQA、GQA)都出自 Transformer 的注意力机制(Attention)家族,它们的名称非常相似,但设计思路与用途略有不同。下面我详细解释一下它们之间的区别与联系,并辅以例子帮助理解。


🌟 一、MHA(Multi-Head Attention,多头注意力)

💡 基本概念

MHA 是 Transformer 标准架构中使用的注意力机制。
它的核心思想是:
把输入向量映射成多个「头」(head),每个头独立学习不同的注意力模式,最后再拼接融合结果。

🧩 数学表达

假设输入为矩阵 X∈Rn×dXRn×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 稍好。

🎯 总结对比表

表格
 
特性MHAMQAGQA
K/V 是否共享 ❌ 每头独立 ✅ 全部共享 ⚙️ 按组共享
推理速度 最快 介于两者之间
内存占用 最低(约 1/8) 中等
模型能力 最强 略有下降 接近 MHA
实际应用 原始 Transformer PaLM、T5.1.1、Gemini LLaMA 2、Gemma、Mixtral

🧠 一句话记忆

MHA 最完整、MQA 最省、GQA 折中。

posted @ 2025-10-28 09:26  bonelee  阅读(23)  评论(0)    收藏  举报