✨ 复制成功!

以文会友,打造好学人设!

📋 已复制到剪贴板:

Multi-Head Attention 中,多头到底学到了什么?头数越多越好吗?如何判断某些头是冗余的?

创建时间:2026-09-15 更新时间:2026-09-16 阅读次数:1496 次 分类:模型架构与Transformer

1、先回顾 Multi-Head Attention 的结构

标准 Multi-Head Attention:

MultiHead(Q, K, V) = Concat(head_1, ..., head_h) W^O
head_i = Attention(Q W_i^Q, K W_i^K, V W_i^V)

其中:

  • h 是头数
  • 每个头的维度是 d_k = d_v = d_model / h
  • 每个头有独立的 W_i^Q、W_i^K、W_i^V
  • 最后拼接后过一个输出投影 W^O

关键点:每个头在独立的子空间里做注意力,最后再融合。

2、多头到底学到了什么

这个问题没有唯一答案,但研究和实践给出了几类常见解释。

(1)不同头关注不同的语言关系

这是最直观的解释。以 BERT 为例,研究发现:

  • 有的头关注语法依赖,比如主谓一致、动宾关系。
  • 有的头关注位置邻近,只看前一个或后一个 token。
  • 有的头关注指代消解,把代词和先行词连起来。
  • 有的头关注分隔符,比如 [SEP]、[CLS]。
  • 有的头关注罕见词或特定模式。

也就是说,多头让模型可以并行地从不同角度建模 token 之间的关系。

(2)不同头学到不同的表示子空间

每个头有自己的 W_i^Q、W_i^K、W_i^V:

  • 把输入投影到不同的子空间。
  • 在不同子空间里计算相似度。
  • 相当于让模型从多个视角看同一段文本。

单头只能学一种注意力模式,多头可以同时学多种。

(3)多头增加表达能力,但不显著增加计算量

因为每个头维度缩小为 d_model / h:

  • 总计算量和单头 d_model 差不多。
  • 但表达方式更丰富。

这是多头设计的巧妙之处:几乎不增加计算成本,却提升表达能力。

(4)头之间确实存在功能分化,但也有冗余

研究发现:

  • 一部分头有明确可解释的功能。
  • 很多头可以被剪掉而不明显掉点。
  • 有些头功能相似,存在冗余。

所以“多头学到了什么”不能一概而论,而是部分头有功能,部分头冗余,整体是分布式表示。

3、头数越多越好吗

不是。

(1)头数增加的好处

  • 更多子空间,表达能力更强。
  • 可以同时建模更多种关系。
  • 在合理范围内,效果会提升。

(2)头数增加的代价

  • 每个头维度变小:d_model / h 变小,单头表达能力下降。
  • 计算和显存增加:虽然总维度不变,但多头实现有额外开销。
  • 冗余增加:头太多时,很多头学不到有用模式。
  • 训练更难:头多了,优化难度上升。
  • 收益递减:到一定程度后,增加头数效果不明显甚至变差。

(3)经验规律

  • 原始 Transformer:d_model = 512,h = 8,每头 64 维。
  • BERT-base:d_model = 768,h = 12,每头 64 维。
  • GPT-3:d_model = 12288,h = 96,每头 128 维。
  • LLaMA 2 7B:d_model = 4096,h = 32,每头 128 维。

可以看出:

  • 每头维度通常保持在 64~128 左右。
  • 头数随模型规模增大,但每头维度不会无限缩小。
  • 头数和 d_model 要匹配,不是越多越好。

(4)MQA / GQA 的出现

  • MQA:所有头共享 K、V,只有 Q 多头。
  • GQA:分组共享 K、V。

这说明:

  • 多头 Q 有价值。
  • 多头 K、V 未必必要,反而增加 KV Cache 显存。
  • 所以工程上会减少 K、V 的头数。

4、如何判断某些头是冗余的

这是这道题最有区分度的部分。常用方法:

(1)注意力头剪枝(Head Pruning)

思路:逐个或成组去掉头,看效果掉多少。

  • 单头剪枝:每次去掉一个头,评估验证集指标。
  • 重要性打分:用梯度、注意力熵、输出范数等给头打分。
  • 迭代剪枝:每次去掉最不重要的头,再微调。

如果去掉某个头后指标几乎不变,说明它冗余。

(2)注意力模式分析

  • 注意力熵:熵高说明注意力分散,可能没学到明确模式。
  • 注意力距离:看头关注的是邻近还是远距离。
  • 注意力图可视化:人工看头关注什么。
  • 头间相似度:两个头注意力模式高度相似,说明冗余。

(3)消融实验(Ablation)

  • 去掉某个头,看下游任务指标。
  • 去掉某组头,看影响。
  • 对比不同任务下头的重要性。

(4)梯度 / 贡献度分析

  • 看每个头对输出的梯度贡献。
  • 贡献小的头可能冗余。
  • 也可以用 integrated gradients 等方法。

(5)结构化剪枝

  • 不只剪单头,还可以剪整个注意力层、FFN 维度。
  • 配合蒸馏或微调恢复效果。

(6)实证结论

研究普遍发现:

  • 大量头可以剪掉而不明显掉点,有时能剪 20%~50%。
  • 剪枝后微调可以恢复甚至提升。
  • 不同任务、不同层,冗余程度不同。
  • 浅层和深层的头功能不同,冗余度也不同。

5、一句话总结

多头让模型在不同子空间、从不同角度建模 token 关系,部分头有可解释功能,部分头冗余。头数不是越多越好,要和 d_model 匹配,每头维度通常保持 64~128。判断冗余可以用剪枝、注意力分析、消融和梯度贡献等方法。

6、这道面试题的质量点评

优点

  • 层层递进:从“学到了什么”到“越多越好吗”再到“如何判断冗余”,三问层层深入。
  • 区分度很好:
    • 初级:能说“多头关注不同子空间”。
    • 中级:能说头数取舍、每头维度。
    • 高级:能说剪枝、注意力分析、MQA/GQA。
  • 连接前沿:MQA/GQA、头剪枝都是当前工程热点。
  • 考察面广:机制理解、实验设计、工程取舍都能覆盖。

缺点

  • 第一问偏开放:“多头学到了什么”没有标准答案,容易泛泛而谈。
  • 容易背答案:注意力可视化、头剪枝有现成结论,可能被背。
  • 缺少场景:没问“你实际做过剪枝吗?效果如何?”
  • 对初级候选人偏难:后两问需要一定研究或工程经验。

总体评价

质量:上。 尤其适合中高级岗位,能有效区分“只会背 Transformer 结构”和“真正理解多头机制”的人。建议追问:

  • “你实际做过头剪枝吗?剪了多少?掉点多少?”
  • “MQA 和 GQA 为什么能省显存?”
  • “注意力熵高说明什么?”
  • “为什么每头维度通常保持 64~128?”

7、怎么回答才是最好的

回答原则

  • 先给核心结论:多头 = 多子空间、多视角。
  • 分点说学到了什么:语法、位置、指代、分隔符等。
  • 明确说“不是越多越好”:给理由和维度约束。
  • 讲冗余判断方法:剪枝、注意力分析、消融、梯度。
  • 主动提 MQA/GQA:体现工程视野。
  • 结合实践:说“我们试过剪枝,剪了 XX% 掉点 XX”。

推荐回答结构

“多头本质是让模型在不同子空间、从不同角度建模 token 关系。研究发现有的头关注语法依赖,有的关注位置邻近,有的关注指代,有的关注分隔符。”

“头数不是越多越好。因为每头维度是 d_model/h,头太多每头维度太小,表达能力下降;而且头多了冗余增加,收益递减。经验上每头维度保持 64~128,头数和 d_model 匹配。”

“判断冗余可以用几种方法:一是头剪枝,逐个去掉看指标;二是注意力分析,看熵、距离、头间相似度;三是消融实验;四是梯度贡献。研究发现很多头可以剪掉而不明显掉点。”

“工程上,MQA 和 GQA 就是减少 K、V 头数来省 KV Cache 显存,说明多头 K、V 未必都必要。”

“我们实际做过单头剪枝,剪了 20% 左右,微调后基本恢复。”

加分点

  • 提到 子空间、语法头、位置头、指代头、分隔符头。
  • 提到 每头维度 64~128、d_model/h。
  • 提到 头剪枝、注意力熵、头间相似度、消融、梯度贡献。
  • 提到 MQA/GQA、KV Cache。
  • 结合真实剪枝经验。

减分点

  • 只说“多头关注不同信息”,不展开。
  • 说“头越多越好”。
  • 不知道如何判断冗余。
  • 不知道 MQA/GQA。

📌 面试天下网:一款服务于上班族的口袋书,让大家在地铁里/公交上可以学习大模型技术!
📌 网站公告:【悬赏 200 元/篇】寻找“大模型面试战场”的一手回忆录
📌 网站公告:【大模型/Agent面试陪练1V1指导】正式启动......

评论专区

评论加载中...