一句话定义
多头注意力把同一组输入投影成多套 Query、Key、Value,分别做注意力,再把结果拼接起来。每个头可以学习不同的关注模式。
为什么需要多个头
单个注意力头只能输出一种加权方式。语言里同时存在局部搭配、指代关系、句法依赖和主题关联,一个头很难兼顾。多个头提供多个子空间,让模型并行捕捉不同类型的联系。每个头的投影矩阵不同,学到的是不同的关系模式,而不是同一套计算的简单重复。
关键机制
- 输入分别经过多组线性投影,得到每个头的 Q、K、V。
- 每个头独立计算缩放点积注意力。
- 所有头的结果拼接,再经过输出投影混合。
- 总维度通常与单头模型保持一致,因此计算量不会简单翻倍。
每个头的维度通常是 d/h;h 个头拼接后仍是 d,所以多头是在切分表示空间,而不是把计算量乘以 h。
变体
- MQA:所有头共享同一组 K/V,显著减小 KV Cache。
- GQA:若干查询头共享一组 K/V,在效果和显存之间折中,被很多大模型采用。
- 这些变体优化的核心都是 KV Cache 的显存占用,而不是注意力公式本身。
用在哪里
- 几乎所有 Transformer 注意力层的默认结构;理解 MQA/GQA 前先理解 MHA。
- 推理显存紧张时用 MQA/GQA 减少 KV Cache;训练/效果优先时 MHA 更直接。
- 需要同时捕捉局部搭配、指代和主题关系时,多头比单头更合适。
常见误区
- 头数越多越好:头数受总维度和计算预算约束,过多会让每个头维度过小。
- 每个头都有清晰的人类可解释分工:实际分工往往是重叠和动态的。
- 多头注意力就是多个独立的 Transformer 层:它们共享输入,只做并行的注意力子空间。