4.2 多头注意力
核心问题: 为什么需要多头注意力?它为什么不是简单重复多个注意力层?
在线 Notebook
对应的交互式版本可在 Google Colab 打开,统一使用方式见 第0章说明。
技术背景
核心问题
单个自注意力已经可以计算全局依赖,为什么 Transformer 还要把它拆成多个头并行计算?
答案是:一个注意力矩阵通常不足以同时表达序列中的多种关系。 语言、视觉和多模态数据里往往同时存在局部依赖、长距离依赖、语法关系、语义对齐和结构线索。多头注意力的目的,就是让模型在不同表示子空间里并行学习这些不同模式。
关键概念
- Head:一个独立的注意力子模块
- Projection Subspace:每个头各自的 Q / K / V 线性投影空间
- Concatenation:把多个头的结果拼接起来
- Output Projection:把多头结果重新映射回模型维度
应用场景
- 文本中的语法关系与语义关系同时建模
- 长上下文中的局部模式与全局主题同时建模
- 图像 patch 之间的不同空间依赖
- 多模态对齐中的文本-视觉交互
单头注意力的问题
单个注意力头并不是“没用”,而是它通常只能在一个主要关系模式上形成较强偏好。
例子:
"The cat sat on the mat"
一个注意力头可能更擅长:
- 关注主语-谓语关系
- 或关注修饰词-名词关系
- 或关注局部相邻词关系问题在于,这些关系并不总能被同一个注意力分布同时高质量表达。
如果一个头主要在看局部搭配,它就未必能同时很好地看长距离依赖;如果它专门对齐语义主体,可能又不擅长建模位置邻近关系。
所以,单头的限制不在于它不能看全局,而在于它难以同时用一种模式解释所有关系。
这意味着,真正的问题不是“有没有注意力”,而是“能不能同时表示多种注意力模式”。
多头注意力的核心思想
多头注意力的做法是:
- 先把输入通过不同的线性变换投影到多个子空间
- 每个头在自己的子空间里独立计算注意力
- 再把多个头的结果拼接起来,交给输出层融合
数学表达
其中:
这里最重要的一点不是“有多个头”,而是:每个头都有自己独立的投影矩阵。
这意味着不同头看到的并不是完全相同的表示,而是输入在不同子空间下的投影结果。
为什么多头不是简单重复?
如果多个头只是复制同一个注意力层,那确实没有意义。真正让多头有效的关键,是不同头使用不同的 Q / K / V 投影参数,因此可以学习不同类型的相关性。
1. 不同头关注不同关系
某些头更偏向局部邻近关系,某些头更偏向远距离依赖,某些头可能更偏向特定语法角色或结构边界。
2. 不同头工作在不同子空间
输入表示是高维的。把它投影到多个不同子空间后,每个头都可以在自己的坐标系里决定“什么叫相关”。
这就像:
- 一个头从“语法关系”视角看序列
- 一个头从“语义相似”视角看序列
- 一个头从“位置邻近”视角看序列
虽然这些视角不一定能直接命名,但模型会在训练中自动学习出类似的分工。
3. 拼接后形成更丰富的表示
单头输出是一种关系聚合结果;多头输出是多种关系聚合结果的组合。拼接后再线性变换,可以把这些不同模式融合成更强的表示。
所以,多头的本质不是“投票”,而是并行提取多种依赖结构,再统一融合。
从工程角度看,这相当于让模型在同一层里同时保留不同类型的上下文摘要,而不是把所有信息都挤进一个注意力图里。
直观结构
输入表示
↓
分成 h 个投影子空间
↓
每个头独立做自注意力
↓
得到 h 组关系聚合结果
↓
拼接(Concat)
↓
线性映射(W^O)
↓
输出表示这个结构非常像“多个专家分别提取不同信号,再统一整合”。
多头注意力的优势
1. 同时学习多种关系
序列中的依赖不是单一的。多头允许模型同时保留局部、全局、语义、结构等多类关系模式。
2. 表达能力更强
每个头都是一种受限但有针对性的关系建模器,多个头组合起来,整体表达能力会显著增强。
3. 更适合复杂输入
在长文本、图像 patch、多模态 token 中,输入关系往往非常复杂。多头机制能让模型更灵活地拆解问题。
4. 更利于后续层迭代
一层多头输出为下一层提供了更丰富的基础表示,使更高层可以继续组合和抽象这些关系。
这也是多头机制在 LLM 里尤其重要的原因:底层头负责局部和字面关联,高层头则更容易在这些基础上形成更抽象的语义组合。
多头注意力的代价与权衡
多头并不是没有代价。
1. 参数和计算成本增加
更多头意味着更多投影矩阵和更多注意力计算,虽然单头维度通常会变小,但整体实现复杂度仍然提升。
2. 头数不是越多越好
如果头太多,每个头分到的维度会太小,单个头能表达的信息反而受限。
3. 部分头可能退化
在实际训练中,并不是每个头都会学到清晰分工。有些头可能功能重复,有些头的重要性较弱。
因此,多头注意力的关键不在于“尽量多”,而在于在表达能力和计算成本之间找到合适平衡。
换句话说,多头不是免费增益,而是把表示能力换成了更多计算和更多参数自由度。
与卷积和集成思想的类比
从某种角度看,多头注意力和前面章节里的几个思想是相通的:
- 类似 CNN 中多个卷积核学习不同局部模式
- 类似集成学习中多个弱模型从不同视角建模数据
- 类似信号处理中多个滤波器提取不同频带特征
区别在于,多头注意力提取的不是固定模式,而是基于当前输入动态变化的关系模式。
为什么这对 LLM 特别重要?
LLM 面对的是极其复杂的上下文结构:
- 近距离词法搭配
- 长距离指代关系
- 句法结构
- 语义主题
- 跨段落一致性
如果只有单头注意力,模型很难同时高质量地处理这些不同层级的依赖。多头机制让大模型能够在多个视角下并行理解上下文,这正是 Transformer 能在大规模语言建模中成功的关键之一。
更直接地说,多头注意力把“关系建模”拆成了多个并行子问题,这让 LLM 更容易同时保留句法、语义和跨句依赖。
本节小结
多头注意力的核心价值在于:
- 不是重复做几次注意力,而是在不同子空间里学习不同关系
- 不是简单平均多个结果,而是把多种依赖模式拼接后统一融合
- 它提高了表达能力,但也带来了计算与参数成本
正因为有了多头机制,Transformer 才不仅能“看全局”,还能从多个视角同时理解全局。
这也是第 4 章从“会注意”走向“会组合、会抽象”的关键一步。
下一节: 4.3 位置编码
