
自然语言天生有歧义。
"The detective followed the spy with binoculars."
这句话有两个完全合理的理解:侦探拿着望远镜跟踪间谍,或者间谍带着望远镜刚好被侦探跟上了。人脑能瞬间意识到两种可能,但早期的 AI 模型做不到——它只会 picks up 其中一种,另一种直接丢掉。
Multi-Head Attention 就是 Transformer 用来解决这个问题的机制。它让模型"同时看好几遍",在不增加计算成本的前提下,把多种可能的解读都保留下来。
先搞懂 Self-Attention:一个词怎么"看"其他词
在讲 Multi-Head 之前,得先说清楚 Self-Attention,因为 Multi-Head 就是 Self-Attention 的多路并行版。
Self-Attention 的核心动作很简单:句子里的每个词,都会去"看"句子里的每一个其他词,然后算出一个"注意力分数"——分数越高,说明这两个词之间的关系越紧密。
回到前面的例子。如果我们让 "binoculars"(望远镜)去计算它对句子里每个词的注意力,大概会得到这样的结果:
- "detective"(侦探)→ 注意力 90%
- "spy"(间谍)→ 注意力 20%
- 其他词 → 更低
连线越粗,注意力越强。结果是:Self-Attention 强烈认为望远镜属于侦探,间谍那条线索几乎被忽略。
问题就在这。只有一张注意力图,就只能讲一个故事。
现实中的句子远比这复杂。一个句子可能同时包含语法关系、语义角色、指代歧义、位置结构。单一 Self-Attention 只能抓住最强的一条,剩下的全弱化。
Multi-Head Attention 的思路:多找几组人,各看各的
既然一个视角不够,那就跑多个视角。
Multi-Head Attention 的做法是:把输入数据切成几份,每组各自独立地跑一遍 Self-Attention。在原始 Transformer 论文里,标准的做法是把 512 维的输入向量切成 4 份,每份 128 维,分配给 4 个"head"(注意力头)。
每个 head 有自己独立的一套权重参数,所以它们在训练过程中会自然地学会关注不同的东西。比如:
- 一个 head 可能对语法结构特别敏感
- 另一个可能擅长发现距离很远的词之间的关联
- 还有一个可能专盯主语和谓语的搭配
- 第四个可能对词的相对位置有感觉
这四种分工不是人工指定的。模型训练时只有一个目标(预测下一个词),至于哪个 head 关注什么,是梯度下降自己"涌现"出来的。就像一个团队,你只告诉他们"把项目做好",具体谁负责什么,他们自己会分工。
最好玩的一点:算力不用加
你可能会想,4 个 head 比 1 个 head,算力不是要翻 4 倍吗?
恰恰相反。
原来的输入是 512 维。切成 4 份,每份 128 维。4 个 head 各自处理 128 维的数据,加在一起 4 × 128 = 512,和原来一模一样。
如果 4 个 head 各自处理完整的 512 维,那确实要 4 倍算力。但切片之后,总计算量不变,却多了 3 个额外的视角。这就是 Multi-Head Attention 被称为"免费午餐"的原因。
整个过程走一遍
用最简单的方式把流程过一遍:
1. 生成 Q、K、V。 每个 word 的 embedding(一个数字向量)分别乘以三组不同的权重矩阵,生成三个新向量:Query(查询)、Key(键)、Value(值)。你可以把 Query 理解为"我在找什么",Key 理解为"我是什么",Value 理解为"我能提供什么信息"。
2. 切片分组。 把 Q、K、V 沿着维度的方向切成 4 份,每份归一个 head。
3. 各自计算。 每个 head 拿着自己的 Q、K、V,独立跑一遍 Self-Attention。这一步 4 个 head 互不干扰,可以完全并行。
4. 拼回去。 4 个 head 各自输出一个结果,按顺序拼在一起,又变成 512 维。
5. 最后过一层线性混合。 拼接后的数据过一个全连接层。这一层相当于一个"裁判",它有权决定哪个 head 的发现更重要,把 4 个视角融合成一个统一的输出。
回到望远镜的例子:Head A 可能强烈连接 binoculars → detective,Head B 同时连接 binoculars → spy。经过混合之后,两种含义都被保留在最终的输出表示里。后续的网络层就能同时利用这两种信息做判断。
它在 Transformer 里的位置
Transformer 的编码器(Encoder)里,数据进门之后遇到的第一个处理层就是 Multi-Head Attention。整个编码器块的结构是:
Multi-Head Attention → Add & Norm → 前馈网络 → Add & Norm
换句话说,Multi-Head Attention 决定了后续所有层能看到什么样的上下文信息。如果这一步丢了线索,后面怎么补都补不回来。
解码器(Decoder)里也有 Multi-Head Attention,但编码器里的那一层最纯粹——它只处理输入序列内部的关系,不涉及解码器的掩码和跨层注意力。
head 能无限加吗?
不能。
经验上,增加到一定程度后,新增 head 能发现的新模式越来越少。就像一个项目组,3 个人分工明确,30 个人反而互相踩脚。实际的 Transformer 模型通常用 8 到 16 个 head,这是一个在效果和效率之间经过大量实验验证的平衡点。
回到那句英文
看完这些,再回来看开头那句话:
"The detective followed the spy with binoculars."
一个 Self-Attention head 只能看到一种解读。Multi-Head Attention 让多个 head 同时从不同角度审视同一个句子,把歧义信息保留下来,传给后续的网络层去综合判断。
解决语言歧义的方法,在这里就是:别只看一遍,多看几遍,而且看的角度要不一样。
原视频:Multi-Head Attention Explained Visually | Simple Transformer Guide
频道:Visual AI
时长:约 3 分钟