人人都会AI编程

3.4 多头注意力(Multi-Head Attention)的设计逻辑与作用

更新时间:2026-07-09

在 3.3 节中,我们推导了自注意力(Self-Attention)的数学机制:通过 Q/K/V 三套投影矩阵,让序列中任意两个位置建立直接关联。但这里有一个隐含瓶颈——如果每一层只有一套 Q/K/V,那么模型在同一个层级里只能用一种“视角”去扫描全局。而人类语言是高度多义的:同一个句子中,既存在“代词-实体”的指代关系,也存在“动词-宾语”的句法关系,还存在“形容词-名词”的语义修饰关系。单一注意力矩阵很难同时把这些异质的关联模式都刻画清楚。

多头注意力(Multi-Head Attention, MHA)正是为了突破这一瓶颈而设计的。它是 Transformer 从“可用”走向“好用”的关键工程创新,也是当前所有主流大模型每一层都保留的核心算子。


一、核心设计逻辑:分头并进,多子空间并行观察

多头注意力的设计哲学非常朴素,可以概括为八个字:“分而治之,并行整合”

具体做法是把原本高维的 Q/K/V 投影拆成多组低维投影,各自独立计算注意力,最后再把结果拼回来。用工业界的比方来说:单头注意力是“一盏探照灯扫全场”,多头注意力则是“多盏不同频段的探照灯同时照射,各自捕捉不同纹理,最后合成一张完整图像”。

计算流程

假设模型隐藏层维度为 $d_{\text{model}}$,头数为 $h$(常见配置如 32、64、128),则每个头的维度 $d_k = d_v = d_{\text{model}} / h$。

  1. 线性投影(分头)

对输入 $X$,用 $h$ 组互不共享的权重矩阵分别投影:
$$
Q_i = X W_i^Q, \quad K_i = X W_i^K, \quad V_i = X W_i^V
$$
其中 $i = 1, \dots, h$,$W_i^Q, W_i^K \in \mathbb{R}^{d_{\text{model}} \times d_k}$,$W_i^V \in \mathbb{R}^{d_{\text{model}} \times d_v}$。

  1. 缩放点积注意力(独立计算)

每个头独立计算 3.3 节中的 Scaled Dot-Product Attention:
$$
\text{head}_i = \text{Attention}(Q_i, K_i, V_i) = \text{softmax}\left(\frac{Q_i K_i^T}{\sqrt{d_k}}\right) V_i
$$

  1. 拼接与输出投影(整合)

将 $h$ 个头的输出沿特征维度拼接,再通过一个输出矩阵 $W^O$ 映射回 $d_{\text{model}}$:
$$
\text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \dots, \text{head}_h) W^O
$$
其中 $W^O \in \mathbb{R}^{h d_v \times d_{\text{model}}}$。


二、为什么不用一个更宽的“单头”?关键作用剖析

既然单头也可以把维度设成 $d_{\text{model}}$,计算量总和与多头相近,为什么还要切分?这涉及三个深层的设计动机:

1. 不同头天然趋向“功能分化”,捕捉异质关系

尽管模型并没有被显式监督“这个头必须学句法,那个头必须学指代”,但大量可解释性研究表明,不同头在训练后会自发形成不同的关注偏好:

  • 局部头:注意力权重集中在相邻几个 Token,负责捕捉短语级句法结构(如介词搭配);
  • 全局头:形成长距离强关联,负责代词消解(it → cat)、主谓一致等;
  • 语义头:对同义词、上下位词表现出高响应,辅助语义推理;
  • 位置头:在带有相对位置编码(3.5 节)的模型中,某些头专门编码“前/后”“第几个”等顺序信息。

如果没有多头机制,这些异质的关联模式必须在同一个注意力矩阵中相互竞争,极易相互干扰。切分为多个子空间后,每种关系可以在自己的“频道”内自由学习。

2. 降低单通道维度,稳定注意力分布

缩放点积注意力中的分母是 $\sqrt{d_k}$。当 $d_k$ 较大时,点积的方差会被有效抑制,Softmax 不会过早进入饱和(梯度消失)。如果强行使用单头且 $d_k = d_{\text{model}}$(如 4096),点积数值的动态范围过大,会导致 Softmax 两极分化——要么全注意力集中在某一个位置,要么完全均匀,训练稳定性变差。

多头设计将 $d_k$ 压缩到 64、128 等较小值(如 Llama 3 8B 中 $d_{\text{model}}=4096, h=32, d_k=128$),天然起到了数值稳定器的作用。

3. 增加可学习参数量与模型容量的“性价比”

MHA 的总参数量为:
$$
\text{Params}_{\text{MHA}} = h \cdot (d_{\text{model}} d_k + d_{\text{model}} d_k + d_{\text{model}} d_v) + h d_v \cdot d_{\text{model}}
$$
当 $d_k = d_v = d_{\text{model}}/h$ 时,上式恰好化简为:
$$
\text{Params}_{\text{MHA}} = 4 d_{\text{model}}^2
$$

这是一个非常紧凑且高效的参数包:用 $4 d_{\text{model}}^2$ 的参数量,实现了 $h$ 路并行注意力。相比之下,如果把这 $4 d_{\text{model}}^2$ 的参数全部砸进一个巨大的单头,表征多样性会大幅下降。多头以几乎相同的参数量预算,换取了更丰富的表示子空间。


三、工程视角:参数量、计算与显存

以 Llama 3 8B 为例($d_{\text{model}}=4096,\ h=32$):

| 组件 | 维度 | 单组件参数量 | 总参数量 |
|------|------|-------------|---------|
| $W_i^Q$ | $4096 \times 128$ | 0.524M | $32 \times$ = 16.8M |
| $W_i^K$ | $4096 \times 128$ | 0.524M | $32 \times$ = 16.8M |
| $W_i^V$ | $4096 \times 128$ | 0.524M | $32 \times$ = 16.8M |
| $W^O$ | $4096 \times 4096$ | — | 16.8M |
| MHA 合计 | — | — | ~67M |

作为对比,该模型的 FFN(见 3.6 节)参数量约为 $2 \times \frac{8}{3} d_{\text{model}}^2 \approx 90M$(采用 SwiGLU 变体时系数略有不同)。可见,MHA 与 FFN 共同构成了 Transformer 层的两大参数支柱,二者缺一不可:MHA 负责跨位置信息聚合,FFN 负责逐位置非线性变换。

计算复杂度:单个头的注意力矩阵为 $(\text{seq\_len} \times d_k)$,$h$ 个头合计的复杂度为 $O(\text{seq\_len}^2 \cdot d_{\text{model}})$,与单头使用完整维度的复杂度同阶,但表征能力显著增强。


四、从 MHA 到 MQA/GQA:大模型推理时代的工程演进

标准多头注意力(MHA)是 Transformer 原论文的设计,但在大模型时代,推理阶段的 KV-Cache(键值缓存) 显存压力促使业界对其做了实用化改良(见 3.2 解码器架构与 3.7 解码器-only 选型逻辑):

  • MQA(Multi-Query Attention):所有头共享同一组 $K/V$ 投影,只有 $Q$ 保持多头。显存占用降至 $1/h$,但可能损失部分表达能力。
  • GQA(Grouped-Query Attention):将 $h$ 个查询头分成 $g$ 组($g < h$),每组共享一组 $K/V$。Llama 2/3、Mixtral 等主流模型均采用此方案,在显存效率与模型质量之间取得平衡。

这些变体说明:MHA 的“全独立头”设计在训练时非常优雅,但在推理时需要根据硬件约束做权衡。不过,它们都没有改变多头注意力的核心思想——用多路并行子空间扩展注意力的表征容量


五、小结

多头注意力的设计逻辑可以凝练为:

通过 $h$ 组独立的低维 Q/K/V 投影,将高维表示空间切分为多个可并行计算的子空间,让模型在同一层内同时捕捉句法、语义、指代、位置等异质关系,最后拼接整合为统一的全局表示。

它回答了自注意力机制的一个关键追问:全局关联建立之后,如何让这种关联足够丰富?答案是:不只用一双眼睛看,而是用多双眼睛,各自带上不同的滤镜。

在 3.5 节中,我们将讨论另一个关键问题:注意力计算本身对输入顺序是置换等变的(permutation invariant)——换句话说,你把句子词序打乱,如果不加额外处理,注意力输出的集合几乎不变。如何让模型感知“谁在谁前面”?这就是位置编码(Position Encoding)必须登场的原因。