返回首页

文章详情

2026.04.18

2 分钟阅读

llm / transformer / attention / foundation

多头注意力:为什么一套关系还不够

拆解多头注意力如何在不同表示子空间中并行路由信息、重新拼接结果,以及“每个头负责一种语义”为何只是方便的类比。

铺在深色工作台上的 Transformer 架构草图和代码稿纸

从 Token 到 Transformer · 08 / 10

一句话里的关系不止一种。某个词既可能依赖前面的主语,也可能受附近的修饰语影响,还要与更远处的主题保持一致。如果所有关系都挤进一张 attention map,模型只有一套投影来决定“该找谁、拿什么”。

多头注意力的做法不是把同一个结果复制多次,而是并行学习多组 Q、K、V 投影。每一组在自己的低维子空间里完成一次 Attention,最后再把结果合并。

一个 Head 做了什么

i 个头拥有自己的参数:

text
Q_i = XW_Q_i
K_i = XW_K_i
V_i = XW_V_i

它独立计算分数和加权结果:

text
head_i = Attention(Q_i, K_i, V_i)

所有 head 的输出沿特征维度拼接,再经过输出投影 W_O

text
MultiHead(X) = Concat(head_1, ..., head_h) W_O

W_O 不是简单收尾。它让模型重新混合各头提供的信息,生成与残差路径维度一致的表示。

多头带来的不是投票,而是多个子空间

假设模型隐藏维度为 768,使用 12 个头,一个常见配置是每个头处理 64 维。总宽度没有变成 12 倍,而是被分配给多组较小的投影。

不同头可以形成不同的匹配几何:一组投影可能更容易连接局部搭配,另一组可能捕捉远距离依赖,还有一些头承担分隔符、位置或冗余功能。

但这些只是训练后可能出现的行为,不是架构预先分配的岗位。不能断言“第 3 个头永远负责语法,第 7 个头永远负责指代”。头之间会协作、重叠,也可能被剪掉后几乎不影响结果。

为什么不直接做一个更宽的 Head

一个宽 head 仍然只产生一套 attention 权重。无论 Value 多宽,每个位置对其他位置的加权分布只有一份。

多个 head 则允许同一个位置同时形成多套分布。比如“它”可以在一个头中强连接候选实体,在另一个头中保留局部谓词信息,再由输出投影和后续层把这些线索合并。

多头的关键优势不是参数更多,而是路由模式可以并行分化

Head 数量越多越好吗

不是。隐藏维度固定时,head 越多,每个 head 的维度越小。维度过小可能限制单个投影的表达能力;head 越多也会增加调度和缓存管理的复杂度。

现代架构还会调整 Key/Value 的头数。例如 multi-query attention 让多个 Query 头共享一组 K/V,grouped-query attention 则让若干 Query 头共享一组 K/V。这样可以缩小推理时的 KV cache,提升解码效率。

这些变体提醒我们:Q 头数量、K/V 头数量和模型宽度都是工程权衡,没有一个适用于所有模型的固定比例。

多头并不能替代深度

一层多头注意力完成的是一次信息交换。复杂推理通常需要多层:先建立局部关系,再聚合实体,再把结果用于更高层预测。

而且 Attention 主要在线性加权不同位置的 Value。真正对每个位置做更丰富非线性变换的是 FFN;保持训练稳定和信息连续,还需要残差连接与归一化。

把 Transformer 等同于多头 Attention,会漏掉支撑它堆叠几十甚至上百层的另一半结构。

小结

多头注意力让模型用多组投影并行建立不同的信息路由,再把结果重新组合。它不是多位专家投票,也没有固定的语义岗位表;它提供的是多个可学习子空间和多套连接分布。

下一篇会把镜头从 Attention 拉远,查看一个完整 Transformer block 中 FFN、残差连接和 LayerNorm 分别承担什么。

延伸阅读