标准回答
先说单头的局限
注意力的核心是用 Query 和 Key 算相似度,决定对 Value 的加权方式。但一组 Q/K/V 投影只能学到一种「相似度的衡量标准」,也就是只能捕捉一种注意力模式。对同一个词,模型往往需要同时关注好几类关系:它的语法依赖(主谓宾)、语义相关词、远处的指代、紧邻的搭配……单头注意力一次只能聚焦其中一类,表达能力明显不够。
多头:在多个表示子空间并行关注
多头注意力的做法是:把输入分别用多组不同的线性投影映射成多组 Q/K/V,每一组在自己的低维子空间里独立做一次注意力计算,这样就有了多个「头」。因为每个头的投影矩阵不同,它们会自发学到不同的关注偏好——研究和可视化中常见的现象是:有的头偏向句法结构(比如关注动词对应的主语),有的头偏向语义关联,有的头专门捕捉长距离依赖,有的头则聚焦局部相邻 token。多个头并行,等于让模型同时从多个角度审视同一条序列。
类比:像 CNN 的多卷积核
一个直观的类比是卷积网络里的多通道卷积核:一个卷积核只能提取一种局部特征(边缘、纹理……),所以 CNN 用一组卷积核从不同角度提特征。多头注意力是同样的思路——用多个头从不同的表示子空间提取不同的关系特征。多头还带来鲁棒性:模型不把宝全押在单个头上,即使某些头学得平庸,其他头仍能补上,整体表达更丰富、训练也更稳定。
怎么合并:拼接加线性融合
每个头各自输出一个加权后的向量序列,模型把所有头的输出在特征维度上拼接(concatenate)起来,再乘一个输出投影矩阵 W_O 做线性融合,得到这一层多头注意力的最终输出。W_O 的作用是把各子空间的信息重新混合、对齐回模型维度,让后续层能统一处理。
代价与降维设计
多头看起来要算很多次注意力,是否很贵?实际上设计上做了平衡:每个头的维度通常等于模型维度除以头数(比如 512 维分成 8 个头,每头 64 维)。也就是说,头数增多的同时每个头被降维,所有头加起来的总维度仍约等于单头时的维度,因此多头的总参数量和计算量与「一个大单头」大体相当,并没有线性翻倍。换来的却是多视角、多子空间的表达力提升——这正是多头注意力性价比很高、被广泛采用的原因。当然头数也并非越多越好,过多会让每头维度过低、单头容量不足,需要权衡。
常见误区
⚠️ 常见踩坑
误区一:以为多头会让计算量成倍增长——实际每头维度按头数降维,总量与单头大体持平。误区二:以为每个头会被显式指定分工(这个头管句法、那个头管语义)——分工是训练中自发涌现的,并非人工设定,且不同头可能有冗余。误区三:以为头数越多越好——头数过多会使每头维度过低、表达受限,存在最优区间,需要权衡。
追问
追问 1:每个头的维度通常怎么设定,和模型维度是什么关系?
常规设定是「每头维度 = 模型维度 / 头数」,即 d_k = d_model / h。比如 d_model=512、h=8,则每头 64 维。这样多个头拼接后维度恰好回到 d_model,且所有头的总计算量与一个 d_model 维的单头大体相当。也可以不严格整除或让每头更大,但等分是最常见、最便于实现和保持计算量可控的方案。
追问 2:多头注意力是否存在冗余?有没有办法精简头数?
追问 3:不同的头真的会学到不同的语言学模式吗,有证据吗?
有。通过注意力权重可视化和探针分析,研究者观察到部分头表现出可解释的模式,比如关注相邻位置、关注句法依存关系(动词与其主语/宾语)、关注分隔符或特殊 token 等;同时也存在大量难以解释或相互冗余的头。所以「不同头学不同模式」是有经验证据支持的趋势性结论,但不应理解为每个头都有清晰单一的分工。
🔗 相似问题
同一考点的不同问法,面试官可能换着问,一起刷更稳
没找到想看的面试题?把你想看的告诉我们 →
延伸学习
按主题分类的相关资源,便于系统复习