面试官问“为什么Attention要做成多头,而不是单头就够了”怎么回答
面试里如果被问到“为什么Attention要做成多头,而不是单头就够了”,很多人会先回答一句:“因为多个头可以关注不同子空间的信息。”
这个方向并没有错,因为我最一开始学算法的时候,也思考过这个问题,但那会儿搜到的也就是这些原理罢了,但问题在于,这个说法太抽象了。面试官如果继续追问一句“什么叫不同子空间?到底不同在哪”,很多人就接不下去了,反正我到毕业写完论文了都没想过这个点。要把这道题答好,其实需要先回答一个更本质的问题:
如果只有一个头,究竟会出什么问题?
把这个问题讲透,多头注意力的问题也就解答了。(我的回答建议在文末)
一、先别急着讲多头,先看单头的瓶颈到底是什么
先从单头注意力开始。
假设输入序列长度为N,模型维度是d_{model}。如果只使用单头注意力,那么所有token都在同一个完整的表示空间里,通过同一组Q、K、V投影矩阵完成注意力计算。对于每个token来说,它会生成一个query,与所有token的key做相似度计算,经过softmax得到一组注意力权重,再对value加权求和,最终形成自己的上下文表示。
问题就出在这里:单头注意力对每个token只能给出一套注意力分布,也就是一种关系建模方式。
但真实语言中的 token 关系从来不是单一的,而是多层次、并行存在的。同一个词在理解时,往往需要同时处理不同类型的依赖关系。
比如看这句话:“小明把妈妈昨天刚买的又大又红的苹果吃了。”
对于“吃了”这个词来说,它至少要处理几类不同的信息。它需要识别谁是动作的发出者,也就是主语“小明”;需要识别动作作用在谁身上,也就是宾语“苹果”;还要理解“昨天刚买的”“又大又红的”这些成分只是修饰苹果,而不是动作本身。
此外,“吃了”和“苹果”之间又存在局部的动宾搭配关系,而“小明”和“吃了”之间则可能是跨越较长修饰链条的结构性依赖。
这些关系并不是同一种关系的不同强度,而是本质上不同类型的依赖模式:有的偏句法,有的偏语义;有的关注邻近词,有的关注长距离结构;有的强调角色关系,有的强调局部搭配。
而单头注意力的问题恰恰在于,它只能用一张注意力图去同时表达这些不同关系。于是它不得不折中:既想关注长距离主语,又想关注近距离宾语;既想建模结构,又想保留局部模式。结果往往是每一种关系都顾到一点,但没有哪一种被建模得足够清晰。
所以,单头注意力并不是不能工作,而是它的表达能力受限得很严重。一个注意力分布,很难同时承载多种相互独立的关系模式。
二、多头的本质,不是“变复杂”,而是“分工”
找到了单头的问题,多头的动机就很好理解了。既然一个头不够,那最自然的办法就是不要让一个头承担所有任务,而是让多个头并行工作,各自负责不同类型的关系。
这就是多头注意力的核心思想。
具体来说,模型不会让所有注意力计算都发生在同一个完整空间里,而是先把原始表示投影到多个不同的低维子空间中。每个头都有自己独立的Q、K、V投影矩阵,在各自的子空间里单独计算注意力,最后再把多个头的结果拼接起来,并通过线性变换融合成最终输出。
这样一来,每个头就不必再兼顾所有关系,而可以更专注地学习某一类模式。有的头可能更擅长捕捉局部邻接关系,有的头更容易学习长距离依赖,有的头偏向句法结构,有的头偏向语义对应。它们各自处理一部分问题,最后组合起来,模型就获得了更强的关系表达能力。
所以,多头注意力最重要的意义不是“多做了几次attention”,而是实现了关系建模上的分而治之。
三、为什么说“多个头”比“一个大头”更强?
这里有一个很容易被忽略的点。很多人以为,多头只是把一个大的注意力模块拆开重复计算而已,似乎没有本质变化。其实不是。
单头注意力只能产生一张N×N的注意力矩阵,也就是说,它只能给出一套token间关系图。而多头注意力会产生多张不同的N×N注意力矩阵。每个头都有自己独立的关系视角,因此模型实际上是在同时维护多套不同的token关系图。
这带来的提升不是“量变”,而是明显的“质变”。因为语言理解本来就不是靠一张关系图能讲清楚的。句法关系、指代关系、搭配关系、语义依赖关系,本来就应该允许模型用不同视角并行建模。多头机制正是把这种并行性显式做进了结构里。
从这个角度看,多头注意力并不是在简单增加容量,而是在提升模型表示关系的方式。单头是把所有关系揉在一起,多头是把不同关系拆开分别学。
这也是为什么大概是在22/23年这两年,很多研究和论文在分析BERT、GPT这类模型时,会发现不同头往往确实表现出功能分化,有的头偏好相邻位置,有的头会追踪指代对象,有的头更接近句法树中的依赖边。
这说明啥?这说明多头并不是纯粹的工程技巧,而确实诱导出了不同模式的分工。
四、为什么不直接用多个“完整大头”,而要拆成多个低维子空间?
接下来面试官很可能会继续问:既然多个头这么好,为什么不直接做成8个完整的512维头?为什么非要拆成8个64维子空间?
这个问题要从计算和归纳偏置两方面回答。
第一层原因是工程代价。如果每个头都保留完整维度,那么参数量和计算量都会近似按头数线性暴涨。比如原本一个512维头,现在变成8个完整512维头,代价几乎要翻8倍,这在实际训练和部署中通常不可接受。
但更重要的是第二层原因:子空间拆分本身就是一种结构约束,也是一种有效的归纳偏置。
当我们把表示空间拆成多个低维子空间时,其实是在告诉模型:不要试图让每个头都在完整高维空间里“什么都学一点”,而是强迫每个头只在自己那部分空间里提取相对紧凑、清晰的关系模式。这种设计天然带有正则化效果,可以减少不同关系彼此混杂,也降低每个头在高维空间里无序拟合的风险。
不扯上面那些淡的话,拆分子空间并不只是为了省算力,它还在帮助模型形成更明确的分工。每个头的自由度变小了,但恰恰因为自由度变小,它更容易学到稳定、专门化的模式,而不是在高维空间里做模糊折中。
五、头变多了、每个头变小了,会不会反而损失表达能力?
这是一个非常好的追问,因为它触及了多头设计中的真实权衡。
答案是:单个头的表达能力确实会下降,但整体表示能力通常会上升。
因为头数增加以后,每个头的维度会相应下降。单看某一个头,它所在的子空间更小,能表达的模式当然不如原来整个大空间丰富。但问题在于,单头虽然空间更大,却必须把各种关系都塞进同一个注意力分布里,结果往往是高维空间被大量用于妥协和混合,利用率并不高。
而多头的优势在于,虽然每个头更小,但每个头只负责一类相对清晰的任务。这样一来,局部表达能力的下降,换来了整体关系建模能力的大幅提升。
可以把它理解为“一个全科医生”和“多个专科医生”的区别。全科医生知识面广,但很难在每个领域都做到足够深入;多个专科医生各自处理不同问题,合起来的系统能力往往更强。多头注意力也是类似的逻辑:单个头未必要无所不能,但多个头协同之后,整体会更强。
当然,这种设计也不是头越多越好。头太少,分工不够;头太多,每个头的维度又会小到不足以表示有意义的模式。
因此实践中总会存在一个折中点,我还记得,Transformer原论文中采用的8个头、每头64维,就是在计算成本和表示能力之间找到的一个较优工程平衡。
六、面试里怎么把这道题讲得清楚?
如果在面试中回答这道题,最好的讲法不是一上来就说“多头能关注不同子空间”,而是按“反事实”逻辑展开。
你可以先说:如果只有一个头,那么每个token最终只有一套注意力分布,它必须同时承担句法依赖、语义依赖、局部搭配和长距离关系建模,这会导致不同模式相互干扰,只能做折中,表达能力受限。
然后再引出多头的必要性:既然一个头承载不了多种独立关系,那就把表示空间拆开,让多个头并行工作,每个头专门学习一种关系模式,最后再融合起来。
接着进一步解释,为什么是“拆分子空间”,而不是“复制多个完整空间”:因为前者既控制了参数量和计算量,又通过低维约束引入了归纳偏置,帮助不同头形成更稳定的功能分工。
最后再补一句,多头并不是没有代价,每个头的维度变小,单头能力会下降,但整体上分工带来的收益通常远大于损失。
这样回答,面试官听到的就不是一句抽象口号,而是一条完整的逻辑链:一个头为什么不够,多个头为什么更好,为什么要在低维子空间里做,以及这种设计背后的数学直觉和工程权衡是什么。
一句话概括就是:
多头注意力的本质,不是简单地“多做几次注意力”,而是把原本混在一起的多种关系模式拆开建模,让不同头在不同子空间中并行分工。
#AI求职实录#AI 面试题目精讲专栏:一题一讲、一讲一通透,系统提升 AI 面试应答能力与竞争力

查看13道真题和解析