在自然语言领域中,Attention机制借鉴于人脑得注意力机制流程,从而选择输入文本序列中关键信息进行处理,从而减少语言模型中带有序列信息得重点词与平常词没有区分得前提下,所带来的训练误差。
1.Attention机制的种类
从宏观上来讲,目前Attention机制主要分为聚焦式(focus)注意力机制和显著性(saliency-based)注意力机制。其中聚焦式注意力机制概念为依托于输入到神经网络的数据,按照从前往后的顺序,将数值较大的重要权重主动的、依赖预定任务的聚焦于某一对象上,从而将该对象与其他对象进行区分。而显著性注意力机制主要是神经网络中,从往前的一种反馈机制导致的被动注意力机制。这种注意力机制不受主动干预影响,只是一种神经网络为了更好的拟合数据,从而出现的被动反馈的调节机制而已。在LSTM与GRU中的门控机制可以近似看作这种注意力机制。最后,在自然语言处理过程中的注意力机制都属于focus一类。
2.Attention机制运行过程
Attention机制运行过程如上图所示。其大致步骤如下:
1.输入文本序列,并将文本序列表征为类似于key-value这样的键值对
。
2.输入query句向量,用keyi与query句向量计算文本相似度。
3.进行softmax运算得出注意力权值ai=softmax(F(keyiquery))。此处ai可以理解为文本序列query中,第i(列)个信息受到的关注程度。
4.将value序列输入到网络,与ai 进行加权平均计算,从而得到序列编码值Attention。其中,在第三步文本相似度计算时,主要有如下几种方式:
1.加性注意力机制,计算如图所示,W和Wq分别为训练的超参数:
2.点积注意力机制,相似度计算如下图所示:
3.缩放点积注意力机制·,其中d为词向量宽度,为了减少内存消耗,此处除以d进行缩放,减小计算量。相似度计算如下图所示:
4.余弦相似度注意力机制,相似度计算如下图所示:
最后,上述注意力机制总体称为软性注意力机制(soft attention).其将文本序列x看作由key-value键值对构成。在此基础上,其通过与Query进行相似度计算从而对文本序列x进行软寻址。这也是被称为此机制的原因。
3.Attention机制细节
3.1外部注意力机制
当key=value=x,query=y时,attention机制计算流程与上述一致。此时注意力机制称为外部注意力机制。此时,softmax计算方式也进行了更改,计算公式如下,其他attention流程与上述图一致:
3.2.自注意力机制(self-attention)
自注意力机制是点乘缩放注意力机制变种,其结构如上图所示.当key=value=query=x时,分别对Q,K,V矩阵进行线性变换操作,如下图所示:
其中,WQ,WK,WV为待训练的参数。其他后续流程与上述点乘缩放注意力机制一样,此处不再说明。
3.3.多头(muti-head)注意力机制
如上图所示,当进行了h次self attention之后,对每一次经过self attention得到的att值进行加性连接,运算公式如下所示,其中WO为待训练参数:
MultiHead(Q,K,V ) = Concat(head1,…,headh).WO
3.4硬注意力机制(Hard attention)
此类注意力机制与软性注意力机制的区别在于如下几方面:软性注意力机制输入的是定长的文本序列,同时其通过对文本序列中所有信息进行权值处理,从而进行编码。而硬性注意力机制只选择定长文本中,选择分布概率(语言模型)最大的信息作为输入,同时其用欠采样或者随机采样的方式进行信息筛选。最终得到长度不一致的序列进行训练。此处将会有更大问题,无法使用神经网络模型训练,因此一般都使用软性注意力机制进行训练。
4.基于keras的self-attention机制复现
我在此复现了下self-attention,其源码请点击到git仓库查阅。
其输入:上一层的输出张量。
输出:一个三维张量,维度为(samples,maxlen,attention),第一个维度含义代表句子数目,maxlen维度代表每一个句子长度,attention维度代表每个句子中每个分词构成的attention编码值个数。