Day 11 · 多头注意力
多头注意力:为什么 8 个小头胜过 1 个巨头?
如果只用单头注意力,无论特征维度多大,模型一次只能关注一个重点;如果一句话里同时存在「语法结构」、「指代关系」和「主谓修饰」,单头注意力就会顾此失彼。今天我们看 Transformer 的另一大巧夺天工的设计——多头注意力(Multi-Head Attention) ,看它如何以零额外算力代价,让模型长出多双眼睛。
学完你能回答
为什么 1 个大的单头不如 8 个小头?
学完你能回答
维度是怎么切分的?为什么总算力几乎不变?
1 起点:这些你早就会了
多头注意力机制就像一个高效的多人专项小组:
你已经会的 AI 世界里对应的东西
刑侦办案:法医看伤口、痕检看脚印、法务查档案 多头注意力分工 :不同的头关注语法、指代、修饰等不同子空间
切披萨:整张大披萨切成 8 小块,总热量完全相同 维度切分 :把 d_model = 512 维切分成 8 个 d_k = 64 维小头
拼接报告:各组写好各自的专章,最后汇总装订成册 Concat 拼接与线性映射 :把 8 个头的输出拼起来再投影回 512 维
盲人摸象:一个人只能摸到一条腿,多个人一起摸拼出大象 子空间多样性 :克服单一注意力的加权平均化平庸问题
合唱团分声部:女高、男低各唱各的谱,合起来才是一首歌 分工是练出来的 :训练后不同的头自发学会长距离依赖、指代消解、句法追踪(见第 5 节附录实证)
2 单头注意力的致命伤:加权平均抹平了一切
假设我们在理解一句话:「小明把苹果递给了小红,因为她 帮过他。」
核心困境:多重视角冲突
当处理代词「她」时,模型需要同时关注两个维度的信息:
1.
指代视角(语义) :「她」到底是指小红还是小明?(判断依据都在它之前:前文只出现过「小明」和「小红」,而「她」是女性称谓,应该聚焦小红);
2.
语法角色视角(句法) :「她」在后面的子句里做主语,需要与前面的成分对齐。
如果只有一个注意力头,根据公式 (1),所有的关注点最终会被算成一组
单一的百分比权重 并做加权平均。结果就是:小红分到 40%、小明分到 30%、苹果分到 30%,
所有维度的信息被搅成了一锅糊涂账,失去了清晰的独立特征 。
严格来说(类比的边界) :这个例子里代词的指代依据都在它之前,符合「只能回头看」的因果律;真实的单头注意力是在高维向量上做加权平均,不是这里三个词这样简单的百分比分配,但「多重信息被平均抹平」的方向是一致的。
3 多头机制:8 场分会同时开
Transformer 的解法极其优雅:不要让一个大头负责所有事情,而是将特征投影到多个子空间中,分别独立计算注意力 。
多头注意力的完整流程:线性切分、多路并行注意力、拼接投影
输入 QKV 经过 h 组线性投影矩阵,并行经过 h 个注意力头,拼接后经过 WO 投影输出
多头注意力(Multi-Head Attention, h=8)数据流向
输入 Q, K, V
d_model = 512
全局全维特征
8 组线性投影 + 并行注意力计算
Head 1 (64)
Head 2 (64)
……
H8
每个头独立打分与提取 d_v = 64
拼接 + 投影 Wᴼ
Concat(8×64) Wᴼ
输出 = 512 维
图 11.1:多头注意力的完整计算拓扑。 把 512 维拆分成 8 份分别计算,最后再拼回 512 维。
严格来说(类比的边界): 「8 场分会同时开」有一点不完全准确——各个头在注意力计算阶段互不通信息 ,直到最后才由输出投影矩阵 Wᴼ 把 8 份结果混合起来,开会期间并没有「串场」。「切披萨」也不严格:每个头的子空间投影是训练中学出来的,未必像切披萨那样均匀正交,有的头学完后关注的内容甚至会有重叠。
4 算力守恒:为什么 8 个头不比 1 个头更贵?
很多人直觉上认为:8 个头同时算,算力是不是翻了 8 倍?答案是:总计算量几乎完全一样 !
维度的代数守恒
在 2017 Base 模型中:
• 全局模型维度 d_model = 512;
• 头数 h = 8;
• 每个头的维度缩减为 d_k = d_v = 512 / 8 = 64。
算力对比 :
• 单头全维打分:(n × 512) × (512 × n) → 512n² 次乘法;
• 8 个小头打分:8 × ((n × 64) × (64 × n)) = 8 × 64n² = 512n² 次乘法!
结论 :多头注意力是在算力完全守恒 的前提下,凭空获得了 8 倍的表征子空间多样性!
进阶小注 · 这里只算了注意力打分这一步的乘法量;再加上 Q/K/V 投影矩阵与输出投影矩阵(都是 512×512 的可学习参数矩阵 ),多头的总开销依然与单头全维基本相当——这正是原文「总计算成本相近」的完整含义。「可学习参数矩阵」知道这个说法即可。
5 附录可视化实证:各个头真的学会了分工!
在论文的附录(第 13–14 页)中,作者对训练好的第 5 层自注意力进行了可视化(图 3、图 4、图 5):
长距离动词短语头(图 3) :精准把远距离的 "making" 和 "more difficult" 连接在一起;
指代消解头(图 4) :头 5 和头 6 高度聚焦在代词 "its" 与先行词 "The Law" 之间;
句法结构头(图 5) :专门负责追踪名词短语和从句引导词。
消融实验表 3 第 (A) 行进一步证实:如果把头数降为 1(单头全维),BLEU 分数暴跌 0.9 分;但如果把头数增加到 32(每个头只有 16 维),每个头太窄表达能力受损,性能也会下滑——因此头数需要适中:太少损失子空间多样性,太多每个头又太窄,8 头是论文在 base 配置下的折中选择。
6 面试视角
面试视角 · 高频考点
面试官可能会问:「Multi-Head Attention 的作用是什么?为什么不直接用单头?头数是不是越多越好?」
八股答 「多头注意力允许模型在不同的表示子空间里共同关注来自不同位置的信息。单头会因为平均化抑制这种能力。头数不是越多越好,太小每个头表达力弱。」——答出了要点,但可以补充算力与实验依据。
本课答 「核心是用算力守恒换来子空间多样性 :① 单头注意力对全序列 Value 做加权求和,单一权重分布会将不同语义角色(如指代、主谓修饰、全局主题)强行平均化,造成特征信息损失;② 多头机制通过 W_i^Q, W_i^K, W_i^V 投影将 d_model 拆分为 h 个 d_k 维子空间,各个头在独立的子空间内各司其职,由于 h × d_k = d_model,总 FLOPs 几乎与单头相当;③ 头数并非越多越好:论文消融实验表明,当头数过多(如 h = 32, d_k = 16)时,单头维度过窄导致相关度计算能力不足,反而会导致 BLEU 下滑。」
7 映射到原文:Attention 论文 §3.2.2
论文原文对照 · 《Attention Is All You Need》§3.2.2
“Multi-head attention allows the model to jointly attend to information from different representation subspaces at different positions. With a single attention head, averaging inhibits this… Due to the reduced dimension of each head, the total computational cost is similar to that of single-head attention with full dimensionality.”
逐词翻译 :「多头注意力让模型能够在不同位置联合关注来自不同表示子空间的信息。如果只有一个注意力头,平均化会抑制这一点……由于每个头的维度降低了,总计算成本与使用完整维度的单头注意力相近。」
8 自测题(先自己答,再点开看解析)
Q1 单头注意力为什么无法同时关注多个不同的重点?
解析: 因为单头注意力只能产生一组标量权重,所有位置的 Value 按照这组权重求和平均后,多个维度的信息被混合压缩在一起,无法保持独立的特征表达。
Q2 在 Base 模型中,d_model = 512, h = 8,每个头的 d_k 和 d_v 是多少?
解析: 每个头的 d_k = d_v = d_model / h = 512 / 8 = 64。
Q3 为什么 8 个 64 维的头与 1 个 512 维的头算力一样?请写出代数关系。
解析: 单头矩阵乘法计算量为 n · 512 · n = 512n²;8 个头的总计算量为 8 · (n · 64 · n) = 512n²。两者完全守恒。
Q4 8 个头的输出是如何汇聚成最终结果的?
解析: 先将 8 个头输出的 n × 64 矩阵沿特征维度水平拼接(Concat)成 n × 512 矩阵,然后再乘以一个输出参数矩阵 W^O(512×512 的实数矩阵)进行线性融合。
Q5 论文附录的可视化(图 3、图 4、图 5)证明了各个头学会了什么分工?
解析: 三类分工:① 长距离依赖头 ——把远距离的动词短语成分(如 "making" 与 "more difficult")精准连在一起;② 指代消解头 ——头 5 和头 6 高度聚焦代词 "its" 与先行词 "The Law" 的关联;③ 句法结构头 ——追踪名词短语和从句引导词。这说明多头的分工不是人工设计的,而是训练中自发涌现的。
明天 · Day 12位置编码:为什么大模型天生不分前后? 如果把输入句子的顺序全部打乱,注意力算出的结果居然一模一样?正弦余弦编码是怎么注入物理位置的?
进入 Day 12 →