前置知识:RNN,Attention机制
在一般任务的Encoder-Decoder框架中,输入Source和输出Target内容是不一样的,比如对于英-中机器翻译来说,Source是英文句子,Target是对应的翻译出的中文句子,Attention机制发生在Target的元素和Source中的所有元素之间。
Self-Attention是在Source内部元素或者Target内部元素之间发生的Attention机制,也可以理解为Target=Source这种特殊情况下的注意力计算机制,相当于是Query=Key=Value,计算过程与Attention一样。
Self-Attention模型可以理解为对RNN的替代,有着以下两个作用:
引入Self-Attention后会更容易捕获句子中长距离的相互依赖的特征。Self-Attention在计算过程中会直接将句子中任意两个单词的联系通过一个计算步骤直接联系起来,所以远距离依赖特征之间的距离被极大缩短,有利于有效地利用这些特征。
Self Attention对于增加计算的并行性也有直接帮助作用。正好弥补了attention机制的两个缺点,这就是为何Self Attention逐渐被广泛使用的主要原因。
Self-Attention使得Attention模型满足:
其中:
dk是Q和K的维度(矩阵中向量的个数,即列数)
这个位置信息ei不是学出来的,在paper里,是人手设置出来的,每个位置都不一样,代表在第几个positon。
我们构造一个p向量,这是一个one-hot向量,只有某一维为1,代表这个单元是第几个位置。
我们和x进行拼接再进行w的运算得到a,它又等价于右边的公式,相当于ai+ei: