MHA/MQA/GQA这三者是Transformer架构注意力机制的三代形态,核心逻辑是 「效果与效率的权衡」 ——从「追求最好效果」的MHA,到「追求极致速度」的MQA,再到「平衡效果与速度」的GQA。

我们从「注意力的本质」讲起,一步步拆解三者的区别和特性。

一、入门铺垫:先搞懂「注意力机制的核心」

不管是MHA、MQA还是GQA,本质都是解决一个问题:在一段序列里,每个元素该和哪些元素“重点互动”

用生活例子类比(小白秒懂):
你读一句话 “猫喜欢吃鱼,它不喜欢吃苹果”,当看到 “它” 这个词时,你的大脑会自动把 “它”“猫” 绑定——这就是注意力机制的作用:找元素之间的关联权重。

在AI模型里,这个过程靠 Q(查询)、K(键)、V(值) 三个向量实现:

  • Q(查询):当前要“提问”的元素(比如 “它”);
  • K(键):序列里所有可供“回答”的元素(比如 “猫”“鱼”“苹果”);
  • V(值):每个K对应的“具体内容”(比如 “猫” 对应的内容是 “一种动物”)。

注意力的计算逻辑就是:用Q和所有K算相似度(注意力权重),再用权重加权求和所有V,得到当前元素的最终表示

单头注意力的问题很明显:只能从一个角度找关联,就像你只从“词性”一个维度分析句子,很容易漏掉关键关联。

这时候,多头注意力(MHA) 就登场了。

二、递进1:MHA(Multi-Head Attention)—— 多头注意力,效果拉满

MHA是Transformer的标配注意力机制,也是三者中效果最好的版本。

1. 核心思想:分多个“视角”看问题

把Q、K、V三个向量,各自分成 h子向量h 就是头数,比如8头、16头)。
每个子向量组(Qᵢ、Kᵢ、Vᵢ)独立算一次注意力——相当于用h个不同的视角,分别找元素间的关联
最后把h个视角的结果拼接起来,得到最终的注意力输出。

再用生活例子类比:
分析 “它” 的指代时,MHA会同时从 “词性”“语义”“上下文位置” 等多个视角判断,最终确定 “它” 指的是 “猫”——比单头注意力精准得多。

2. 核心流程(极简版)

假设头数 h=8,原始Q/K/V维度是 d_model=512

  1. 分拆:把Q、K、V各分成8个子向量,每个子向量维度 d_k = 512/8 = 64
  2. 分头计算:8组子向量各自独立算注意力,得到8个注意力结果;
  3. 拼接+线性变换:把8个结果拼接成512维向量,再过一个线性层,得到最终输出。

3. MHA的核心特性(小白必懂)

特性 具体说明
效果优势 多头视角能捕捉到更丰富的关联信息,是大模型、视觉Transformer(ViT)效果好的核心原因
计算/内存痛点 每个头都要独立计算QK相似度和KV加权,计算量和内存占用随头数 h 线性增长——头数越多,开销越大
适用场景 追求模型精度,且硬件算力充足的场景(比如大模型预训练、高精度图像识别)

4. 小白容易误解的点

  • 头数不是越多越好:超过一定阈值(比如16头),效果提升会边际递减,而计算开销会持续增加;
  • 每个头的维度 d_k 通常取64:这是工程上的经验值,能平衡计算效率和表示能力。

三、递进2:MQA(Multi-Query Attention)—— 多查询注意力,速度拉满

MQA是为了解决MHA的计算/内存痛点而提出的简化版,是速度最快的版本。

1. MHA的痛点在哪里?

MHA的每个头都有独立的K和V——这是内存和计算的“大头”:

  • 内存上:存储h个K和h个V,占用空间随h线性增长;
  • 计算上:计算h次QK相似度,算力消耗随h线性增长。

而大模型训练/推理时,头数h往往取16、32甚至更高——这会导致显存爆炸、速度变慢。

2. MQA的核心改进:“共享K/V,保留多Q”

MQA做了一个大胆的简化:

  • Q:仍然保留h个(多查询),确保能从多个视角提问;
  • K和V:所有头共享同一组K和V,不再为每个头单独分配。

相当于:所有视角共用同一套“答案库(K/V)”,只是提问的角度(Q)不同。

3. MQA的核心特性

特性 具体说明
效率优势 内存占用:K/V的存储量从h份降到1份,直接减少 (h-1)/h 的内存开销;计算速度:不用算h次QK相似度,速度提升显著
效果代价 共享K/V会损失一部分视角的独立性,模型效果会比MHA略降(但降幅通常在可接受范围)
适用场景 对推理速度要求高,且能接受轻微精度损失的场景(比如大模型实时推理、嵌入式设备部署)

4. 通俗理解MQA

还是分析 “它” 的指代:
MQA只准备一套“答案库”(K/V:包含所有词的词性、语义),但用8个不同的“问题”(Q:从词性、语义等角度提问)去查这套答案库——虽然少了点灵活性,但速度快了很多。

四、递进3:GQA(Grouped-Query Attention)—— 分组查询注意力,平衡效果与速度

GQA是MHA和MQA的折中方案,由Google在PaLM-E模型中提出,现在已经成为大模型的主流选择(比如GPT-3.5/4都用了GQA)。

1. MQA的痛点在哪里?

MQA的效果下降,本质是所有头共享一套K/V,视角独立性太弱——如果头数h很大,效果降幅会比较明显。

2. GQA的核心改进:“分组共享K/V”

GQA把MHA的h个头,分成 g(比如h=16,g=4,每组4个头):

  • 每组内的所有头,共享同一套K和V
  • 不同组之间,K和V是独立的。

相当于:把“全部共享”变成“局部共享”,既减少了开销,又保留了一定的视角独立性。

3. GQA的核心流程(极简版)

假设头数h=16,组数g=4,每组4个头:

  1. 分拆:Q分成16个子向量(每个头一个);K和V分成4个子向量(每组一个);
  2. 分组计算:每组的4个Q,共用本组的K和V算注意力,得到4个结果;
  3. 拼接+线性变换:把16个结果拼接,过线性层得到最终输出。

4. GQA的核心特性

特性 具体说明
平衡优势 内存/计算开销:介于MHA和MQA之间(组数g越小,越接近MQA;g越大,越接近MHA);效果:几乎和MHA持平,远好于MQA
灵活可调 组数g可以根据硬件和需求动态调整——算力足就增大g,追求速度就减小g
适用场景 绝大多数工业级场景(大模型训练/推理、视觉Transformer部署),兼顾效果和效率

5. 通俗理解GQA

分析 “它” 的指代时:
GQA把8个视角分成2组(每组4个),第一组视角共用“词性+语义”答案库,第二组共用“位置+语境”答案库——既保留了多视角的优势,又减少了重复计算。

五、三者核心对比(小白一目了然)

对比维度 MHA(多头注意力) MQA(多查询注意力) GQA(分组查询注意力)
核心设计 每个头独立Q/K/V 多Q,共享1套K/V 多Q,分组共享K/V
效果 ⭐⭐⭐⭐⭐(最好) ⭐⭐⭐(略降) ⭐⭐⭐⭐(接近MHA)
内存开销 ⭐⭐(最大) ⭐⭐⭐⭐⭐(最小) ⭐⭐⭐⭐(中等)
计算速度 ⭐⭐(最慢) ⭐⭐⭐⭐⭐(最快) ⭐⭐⭐⭐(中等)
灵活性 低(头数固定) 低(只能共享) 高(组数可调)
典型应用 大模型预训练、高精度CV任务 实时推理、嵌入式设备 GPT-3.5/4、PaLM-E、工业级CV

六、递进4:实际应用中的注意事项(小白踩坑指南)

1. 怎么选择三者?

  • 科研/高精度任务(比如大模型预训练、图像分割):选MHA,优先保证效果;
  • 实时部署任务:优先选GQA,兼顾速度和精度;如果硬件算力特别受限(比如车载芯片),再考虑MQA;
  • 调试技巧:先从GQA入手,调整组数g,找到效果和速度的最优平衡点。

2. 视觉任务中的特殊点

在你的鱼眼摄像头人体姿态估计项目中,注意力机制(比如ViT的MHA/GQA)用于捕捉人体关键点的关联(比如“手”和“胳膊”的位置关系):

  • MHA:关键点关联更精准,但推理速度慢,可能影响实时性;
  • GQA:在车载芯片上能跑更快,且关键点检测精度损失很小,是更适合的选择。

3. 不要盲目增加头数

不管用哪种注意力,头数h超过一定阈值后,效果提升会非常小,反而会增加开销——工程上常用的头数是8、16,极少超过32。

总结

三者的进化逻辑,就是**大模型/视觉模型“效果与效率权衡”**的缩影:

  • MHA:极致效果,为预训练而生;
  • MQA:极致效率,为边缘部署而生;
  • GQA:平衡之道,成为工业界的最优解。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐