自注意力机制

182 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第24天,点击查看活动详情

自注意力机制

自注意力机制与一般的注意力机制最大的不同:

  • 一般注意力机制:Query 和 Key 不同。
  • 自注意力机制:Query ,Key,Value 相同。

我们来看看自注意力机制的过程:

Step1:

image.png

当输入 XX 经过 embedding 之后,每个部分 aia^i 进行复制成三份分别命名为 qiq^ikik^iviv^i。其实后续的过程和一般注意力机制是一样的。

Step 2:

image.png

利用 αi,j=qikjd\alpha_{i, j}=\frac{q^{i} \cdot k^{j}}{\sqrt{d}} 这个公式,计算每一个 αi,j\alpha_{i, j} 值,进行拼接,可得一组 Attention Matrix。

Step3:

image.png

αi,j\alpha_{i, j} 经过一个 softmax 函数,将值约束到 0-1 之间。然后经过 bi=jαˉi,jvjb^{i}=\sum_{j} \bar{\alpha}_{i, j} v^{j} 这个函数的计算,获得每一个不同的语义编码 bib^i

整个过程下来,与一般注意力机制不同的就是 Query ,Key,Value 的来源的问题,剩下的部分,相当于一个 attention 函数,已经封装起来,不需要去改变。

为什么自注意力机制在长距离序列中会如此强大?

如果要建立输入序列之间的长距离依赖关系,可以使用以下两种方法:一 种方法是增加网络的层数,通过一个深层网络来获取远距离的信息交互,另一种方法是使用全连接网络。 ——《神经网络与深度学习》

这里就说明了,之前学习的卷积神经网络和循环神经网络其实他们都是在对变长序列进行局部编码,循环神经网络,存在梯度消失问题,不能建立过深的网络,卷积神经网络显然是基于 N-gram 的局部编码。

img

自注意力机制可以完成的原因是可以动态生成不同连接的权重,去处理变长的信息序列,不同的语句结果输出,会有着不同的语义编码的产生。

变体:多头自注意力机制 (Multi-Head attention)

image.png

当输入信息 xx 进行 embedding 后,将结果进行多份复制,复制成 如上图的 6 份,就会得到多组Attention Matrix,接下来的过程,其实就是进行多组的自注意力机制的过程。

参考: