注意力机制与Seq2Seq模型
1. 注意力机制
在“编码器—解码器(seq2seq)”⼀节⾥,解码器在各个时间步依赖相同的背景变量(context vector)来获取输⼊序列信息。当编码器为循环神经⽹络时,背景变量来⾃它最终时间步的隐藏状态。将源序列输入信息以循环单位状态编码,然后将其传递给解码器以生成目标序列。然而这种结构存在着问题,尤其是RNN机制实际中存在长程梯度消失的问题,对于较长的句子,我们很难寄希望于将输入的序列转化为定长的向量而保存所有的有效信息,所以随着所需翻译句子的长度的增加,这种结构的效果会显著下降。
与此同时,解码的目标词语可能只与原输入的部分词语有关,而并不是与所有的输入有关。例如,当把“Hello world”翻译成“Bonjour le monde”时,“Hello”映射成“Bonjour”,“world”映射成“monde”。在seq2seq模型中,解码器只能隐式地从编码器的最终状态中选择相应的信息。然而,注意力机制可以将这种选择过程显式地建模。
1.1 注意力机制框架
Attention 是一种通用的带权池化方法,输入由两部分构成:询问(query)和键值对(key-value pairs)。。Query,attention layer得到输出与value的维度一致。对于一个query来说,attention layer 会与每一个key计算注意力分数并进行权重的归一化,输出的向量则是value的加权求和,而每个key计算的权重与value一一对应。
为了计算输出,我们首先假设有一个函数用于计算query和key的相似性,然后可以计算所有的 attention scores by
我们使用 softmax函数 获得注意力权重:
最终的输出就是value的加权求和:
不同的attetion layer的区别在于score函数的选择
1.2 点积注意力
The dot product 假设query和keys有相同的维度, 即. 通过计算query和key转置的乘积来计算attention score,通常还会除去减少计算出来的score对维度𝑑的依赖性,如下
假设有个query,有个keys. 我们可以通过矩阵运算的方式计算所有个score:
1.3 多层感知机注意力
在多层感知器中,我们首先将 query and keys 投影到.为了更具体,我们将可以学习的参数做如下映射将score函数定义
然后将key 和 value 在特征的维度上合并(concatenate),然后送至 a single hidden layer perceptron 这层中 hidden layer 为 ℎ and 输出的size为 1 .隐层激活函数为tanh,无偏置.
总的来说
- 注意力层显式地选择相关的信息。
- 注意层的内存由键-值对组成,因此它的输出接近于键类似于查询的值。
注意力机制还没有弄明白,以后继续补充