自注意力是让句子里每个词参照其他所有词来更新自己;多头注意力是同时用多组视角做这件事,再合并结果。
句子里的词义不固定。「苹果」在「吃苹果」和「苹果发布新手机」里完全是两回事。词的向量表示如果一成不变,模型就没法处理这种歧义。自注意力就是解决这个问题的机制:让每个词的表示根据上下文动态调整。
只做一次注意力,模型可能只学会一种关系。多头注意力的做法是把维度切成若干份,每份用一套独立的参数并行算一遍,再把结果拼起来、过一次线性变换。 打个比方:读一句话时,你可能同时在做几件事——判断谁修饰谁、谁是动作的发出者、哪个词和哪个词指同一件事。多头就是让模型同时开几路这样的分析,最后汇总。模型并不会被指定每一路负责什么,分工是在训练中自发形成的。
它是 Transformer 的计算核心,也是模型能同时把握近距离搭配和远距离指代的原因。而且这些操作都是矩阵乘法,非常适合在加速硬件上并行。