← 返回题库
第 150 题 · LLM 基础 · 中等

多头注意力的 Head 是否都必要,如何分析与剪枝?

岗位专项 这代表什么?
✓ 资料核验 来源说明:公开面经题库主题;公司归属未独立核验,技术答案依据原论文或官方文档整理
Attention Head剪枝模型压缩
评论与补充 ↓
口述训练

先用自己的话答,再看参考说法

60 秒是练习上限,不是必须凑满。原理题讲清因果,设计题讲清约束,项目题只讲真实证据。

别照着背。参考说法只用于对照;直接回答问题,简单题说清楚就收尾。项目题只用自己的经历和数字。

面试时怎么答

先否定“Head 越多功能越多”的直觉,再说怎样证明某个 Head 可删:单 Head 掩蔽、门控或结构化剪枝都要在多个任务和随机种子上看边际影响。注意力图好看不能证明因果作用。追问加速时,要区分参数变少与真实 Kernel 变快,零散剪枝若不能形成硬件友好的形状,延迟可能不降。

可以这样答:

多头注意力中确实常有冗余,但不能仅凭注意力图判断某个 Head 是否重要。更可靠的方法是在固定模型上掩蔽或门控单个 Head,观察多个任务上的性能变化,再做结构化剪枝和微调。即使主指标几乎不掉,零散移除也不一定带来真实加速;只有剪枝后的张量形状和 Kernel 能利用更小维度,吞吐与延迟才可能改善。

核心回答

多头注意力让不同 Head 在不同投影子空间中建立关系,但训练后并不保证每个 Head 都同等重要。研究发现,一些模型可剪掉相当比例的 Head 而只产生很小性能变化,说明存在任务相关的冗余;同时少数关键 Head 对特定依赖或任务非常敏感,因此不能据此断言“一个 Head 就够了”。

常见重要性估计包括逐头消融、对 Head 输出乘门控并计算损失对门控的梯度、以及在验证集上测量剪除后的性能变化。可靠剪枝应在目标任务上重新评估并适度微调,而不是仅凭注意力图是否好看。

展开说明

令第 \(h\) 个 Head 输出为 \(A_h\),可引入门控 \(\xi_h\),把拼接前输出写成 \(\xi_h A_h\)。在 \(\xi_h=1\) 附近,$$\left \partial\mathcal{L}/\partial\xi_h\right \(可作为一阶敏感度;更直接的办法是令\)\xi_h=0$$ 做消融。梯度指标便宜但只是局部近似,多个 Head 同时剪除还会出现相互补偿或联合失效。

Head Pruning 与 MQA/GQA 不同。剪枝删除已经训练出的 Query/Key/Value 子空间,目标是模型压缩;GQA/MQA 主要让多个 Query Head 共享更少的 KV Head,以降低 KV Cache 和访存,仍保留多个 Query Head。某 Head 在一个数据集上不重要,也不代表在长上下文、其他语言或安全任务中不重要。

工程实践

先在冻结模型上做单头与分层消融,生成重要性排名;再分阶段剪除并短暂微调,每一步检查通用、领域、长上下文和安全回归。只有底层 Kernel 能跳过已剪矩阵时,结构稀疏才会转化为真实延迟收益。若只是把输出置零,参数量和矩阵乘法可能完全没变。

常见追问

  1. 注意力权重很分散就说明该 Head 无用吗? 不能。注意力图不等同于对最终输出的因果贡献,应结合消融或梯度敏感度判断。
  2. 为什么单头消融安全,多头一起剪却可能掉点? Head 之间可能互为备份;单独删除时其他 Head 能补偿,同时删除会破坏这种冗余。
  3. 剪 Head 一定能加速推理吗? 不一定。若张量形状和 Kernel 未改变,只做逻辑 Mask 不会减少实际计算;需要结构化重写和硬件友好形状。

一句话复习

Attention Head 常有任务相关冗余,但重要性必须用因果消融或敏感度验证,结构化剪枝才可能带来真实加速。

参考资料

无需账号 · 原地交流

评论与补充

评论会直接显示在这道题下面。可以写自己的答法、继续追问或指出错误,不需要 GitHub 账号,也不会跳转到 Issue;内容会公开,请勿填写个人隐私、公司机密或受保密约束的材料。

正在加载评论…