从 Token 到 Transformer · 08 / 10
一句话里的关系不止一种。某个词既可能依赖前面的主语,也可能受附近的修饰语影响,还要与更远处的主题保持一致。如果所有关系都挤进一张 attention map,模型只有一套投影来决定“该找谁、拿什么”。
多头注意力的做法不是把同一个结果复制多次,而是并行学习多组 Q、K、V 投影。每一组在自己的低维子空间里完成一次 Attention,最后再把结果合并。
一个 Head 做了什么
第 i 个头拥有自己的参数:
textQ_i = XW_Q_i K_i = XW_K_i V_i = XW_V_i
它独立计算分数和加权结果:
texthead_i = Attention(Q_i, K_i, V_i)
所有 head 的输出沿特征维度拼接,再经过输出投影 W_O:
textMultiHead(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 分别承担什么。
