本文通过增加多头注意机制进一步完善了自注意层。这从两个方面提高了注意力层的性能
- 它扩展了模型聚焦不同位置的能力。是的,在前文的例子中,z1包含了一点其他编码,但它可能被实际的单词本身所支配。如果我们翻译“动物因为太累而没有过马路”这样的句子,知道它指的是哪个单词会很有用。
- 它为注意力层提供了多个“表示子空间”。正如我们接下来将看到的,通过多头注意力,我们不仅有一组,还有多组 Query/Key/Value 权重矩阵(Transformer 使用八个注意力头,所以我们最终每个编码器/解码器有八套)。这些集合中的每一个都是随机初始化的。然后,在训练后,每个集合用于将输入嵌入(或来自较低编码器/解码器的向量)投影到不同的表示子空间中。
在多头关注下,我们为每个头部保持单独的Q/K/重量矩阵,从而产生不同的 Q/K/V/ 矩阵。正如我们之前所做的那样,我们将X乘以WQ/WK/WV矩阵来生成Q/K/V矩阵。
如果我们做同样的 self-attention 计算,只是8次不同的权重矩阵,我们最终会得到8个不同的Z矩阵
这给我们留下了一点挑战。前馈层不需要8个矩阵,它只需要一个矩阵(每个单词一个向量)。所以我们需要一种方法把这八个矩阵压缩成一个矩阵。
我们怎么做呢?我们连接矩阵,然后将它们乘以一个附加的权重矩阵WO。