多头注意力中为什么会出现冗余 Head?如何分析与裁剪?
简化版
多头注意力给模型多个独立投影子空间,但训练不会保证每个 Head 学到不同功能,因此会出现注意力图相似、输出相关或裁掉后损失很小的冗余 Head。判断冗余不能只看注意力热图,要结合 Head 输出、梯度敏感度、消融后的任务指标和层间补偿。裁剪应逐步进行并微调,同时实测硬件延迟;参数减少不一定带来加速。
详细版
一个 Head 的输出为 softmax(QKᵀ/√d_h)V,多个 Head 拼接后经 W_O 混合。冗余可能来自过参数化、相同训练信号、W_O 抵消和不同 Head 学到可替代模式。常用重要性包括输出范数、梯度×激活、注意力熵、Head 间 CKA/余弦相似度和剪枝消融。
score_h ≈ E|activation_h × ∂L/∂activation_h|
真正决策以干预为准:屏蔽单 Head 或 Head 组合,比较验证损失与下游任务变化。单独看一个 Head 影响小,不代表很多 Head 可同时删,因为存在交互。结构化裁剪保持规则维度,微调恢复;若推理内核仍按原形状计算,理论 FLOPs 下降也不会转成真实延迟收益。
完整版教学
一、多头设计没有“强制分工”
多头注意力将隐藏维分成多个投影,每个 Head 有独立 Q/K/V 权重。它提供学习不同关系的容量,却没有损失项要求一个 Head 负责句法、另一个负责指代。
训练只优化最终任务,多个 Head 学到相似或可替代特征也能达到低损失。过参数化还可能让模型拥有容错余量。
记忆钩子:多头提供“可以分工”的槽位,不保证训练后“一头一职”。
二、冗余有多种定义
注意力权重相似只是路由相似,V 投影不同仍可能产生不同输出;注意力图不同,经过 W_O 后也可能贡献相近。应明确测的是权重冗余、表示冗余还是功能冗余。
| 冗余类型 | 观测 | 局限 |
|---|---|---|
| 注意力图相似 | A 矩阵相关 | 忽略 V 与 W_O |
| 输出相似 | Head 输出 CKA/余弦 | 相似不等于可删除 |
| 参数相似 | Q/K/V 权重距离 | 重参数化会误导 |
| 功能冗余 | 裁剪后指标不降 | 成本高但最直接 |
面试回答应把描述性分析与因果消融区分开。
三、注意力熵能看什么
对某 query,Head 的注意力熵为:
H = -Σ_i p_i log p_i
低熵表示集中关注少数位置,高熵表示分散。两者都不自动等于好或坏:复制头可能低熵,聚合上下文的头可能高熵。
熵适合描述模式,不足以作为唯一剪枝分数。一个高熵 Head 仍可能提供关键全局平均信息。
四、梯度敏感度估计删除影响
把 Head 输出乘门控 g_h,用 |g_h × ∂L/∂g_h| 近似关闭该 Head 对损失的一阶影响。跨验证样本平均,得到任务相关重要性。
一阶近似忽略 Head 间交互和后续微调恢复。梯度还依赖数据分布:在翻译集不重要的 Head,可能在代码任务关键。
应在目标任务、语言和长度切片上计算,而非用一小批通用文本下结论。
五、消融是更可信的功能测试
推理时将某个 Head 输出置零,观察困惑度、准确率和任务指标。若关闭后变化小,它在当前分布上可替代;再做组合消融检查多个“低重要”Head 同时关闭。
假设 32 个 Head 中单删任意一个损失都低于 0.1%,不代表可删 31 个。它们可能互为备份,组合删除会突然跨过容量阈值。
可用贪心迭代:每轮删少量、重新评估、短暂微调,再决定下一轮。
六、结构化裁剪如何落地
删除完整 Head 是结构化裁剪,可缩小 Q/K/V 投影和 W_O 对应块。保持每层 Head 数规则化,通常比任意稀疏 mask 更容易获得内核支持。
原:16 heads × 64 dim = 1024
删 4 heads 后:12 × 64 = 768 attention output
残差隐藏维仍可能要求 1024,需重构 W_O 从 768 投影回 1024。模型配置、权重加载和张量并行切分都要同步更新。
七、参数和 FLOPs 下降不等于更快
Attention 之外还有 FFN、访存和 kernel launch。Head 数变成硬件不友好的 13,可能导致矩阵形状低效;小 batch 下启动开销甚至占主导。
| 指标 | 必须实测原因 |
|---|---|
| 模型大小 | 结构是否真正重写 |
| FLOPs | 理论计算变化 |
| 延迟/吞吐 | 内核与硬件适配 |
| 显存 | 激活和 KV Cache 变化 |
剪枝价值由端到端指标决定,不由权重中零的数量决定。
八、微调与回归验证
剪枝改变中间表示,通常需在代表性数据上微调恢复。微调可能让剩余 Head 接管功能,也可能造成原能力回退。
比较剪前、立即剪后、微调后三个点,分别看语言建模损失、下游任务、长上下文和安全行为。若只报告微调后平均分,会遗漏某语言或长度切片损失。
生产还需验证导出、量化和推理引擎兼容,避免获得一个理论更小却无法部署的模型。
九、常见误区与追问
- 误区:注意力图相似就能直接删一个 Head。 V 投影与输出混合可能不同。
- 误区:注意力熵高说明 Head 无用。 分散注意也可能执行全局聚合。
- 误区:单 Head 消融无影响就可批量删除。 Head 间替代与组合效应会放大损失。
- 误区:Head 数减少就一定同比加速。 FFN、访存和硬件形状会限制收益。
- 误区:一个任务上的重要性可代表全部任务。 Head 功能随语言、长度与任务变化。
- 追问:最可信的冗余证据是什么? 目标分布上的组合消融、微调恢复与端到端指标。
- 追问:为什么结构化剪枝更实用? 它能改变规则矩阵形状,更容易被现有内核加速。
- 追问:GQA 是否等于剪 Head? 不是;GQA 共享 K/V Head,Query Head 仍可保留,目标主要是 KV Cache。
十、加强记忆
Attention Head 冗余记住“图像相似只是线索,功能消融才是证据”:多头没有强制分工,权重、输出和功能冗余是不同概念;用梯度与表示指标筛候选,再做单头和组合消融,逐步结构化裁剪并微调。最终同时验证任务切片、模型形状、KV/显存和真实硬件延迟,避免把理论少算当成部署加速。