序列模型与Transformer
多头注意力(multi-head attention)
/ MUL-tee-hed uh-TEN-shun /
多头注意力,是并排运行好几路注意力计算、而非只算一路,然后把它们的结果缝合在一起。可以想象一个小委员会在读同一句话:一位成员盯着谁对谁做了什么,另一位留意动词时态,第三位关注哪个形容词属于哪个名词。每个「头」都是一路独立的注意力,有它自己学到的提问方式,各自透过不同的镜片去看这句话。
为什么要拆开?单一注意力必须把所有关系塞进一组权重,逼得它把本应彼此分明的模式平均掉。有了多个头,每个头就能专精于一种更狭窄的关系。模型先把每个词投影成好几组更小的查询/键/值——每个头一组——在各头中分别运行注意力,再把输出拼接起来,过一道线性层,把各头的发现重新调和成单一表示。通过把每个头做小,总计算量被控制在与一个大头相当的水平。
实践中,多头注意力是一头默默干活的主力:它稳定地有帮助,也是每个 Transformer 的组成部分。但「第 3 号头总是负责代词」这种整洁的说法,多半是一厢情愿的简化。研究者检视各头时,有些确实显出可解释的角色,许多看起来彼此冗余,还有相当一部分可以被剪掉而损失甚微。这些头在整体上有用;给每个头派一份干净的「人类工作」,更像讲故事而非事实。
一个有 8 个头的模型,把一个 512 维的词向量切成八片各 64 维的小块。每一片在句子上运行它自己的注意力,八份结果再拼接回 512 维,最后一道投影把它们调和起来。
一路大注意力被拆成几路并行的小注意力,再重新合并。
头越多并不自动越好。超过某个点,多出来的头往往趋于冗余,训练后常可移除相当一部分而几乎无影响——这说明模型是松散地分摊工作,而非给每个头都派了不可替代的关键职责。
又称
另见