Attention基本公式及其变种

  • 2020 年 3 月 18 日
  • 笔记

本篇博文介绍的Attention,全部是Seq2Sqeq的attention机制的变种,本质上也还是Seq2Seq的attention,区别于Transformer的self attention,下一篇博文会介绍self attention。

Attention Mechanism 机制基本公式

attention机制本质上是一种加权值,对文本进行加权求和后得到整个文本的中间语义变换函数,关于其原理的介绍文章已经有很多了,这里不在赘述。其基本公式如下:

  • address memory (score function) ei=f(q,pi)e_i=f(q, p_i)ei​=f(q,pi​)
  • normalize (aligment function) αi=softmax(ei)=exp(f(q,pi))∑jexp(f,pj)alpha_i=softmax(e_i)=frac{exp(f(q,p_i))}{sum_jexp(f,p_j)}αi​=softmax(ei​)=∑j​exp(f,pj​)exp(f(q,pi​))​
  • read content (generate context vector function) c=∑iαihic = sum_ialpha_ih_ic=i∑​αi​hi​

Score fucntion本质上是在求一种匹配度(相似度),Aligment function是把所有位置上的权值归一化,使其相加等于1(softmax正是这种功能),最后的加权求和是为了使得经过LSTM/RNN encode之后的文本与权值关联起来得到加权的中间语义表示。Attention被提出了是为了解决较长文本中依赖关系的捕捉,传统的序列模型虽然有一定这方面的能力,但文本一旦边长效果随之变差。

Score function fff通常是两段文本q(表示query),p(表示passage)的点积,因为两个矩阵相乘是最简单直观的相似度度量。这就是最基本的attention机制的实现公式了。 f=qTpif = q^Tp_if=qTpi​

基本attention公式变种

通过改变fff函数的计算方式,可以产生很多attention机制的变种,这些变种可能在某些特定的任务下比基本attention机制公式效果更好。

下面就列出一篇论文下给出的四种attention机制变种。sss即为前述fff。

Concat Attention

sjt=vcTtanh(Wc1hjq+Wc2htp)s_j^t=v_c^Ttanh(W_c^1h_j^q+W_c^2h_t^p)sjt​=vcT​tanh(Wc1​hjq​+Wc2​htp​) ait=exp(sit)/sumj=1Nexp(sjt)a_i^t=exp(s_i^t)/sum_{j=1}^Nexp(s_j^t)ait​=exp(sit​)/sumj=1N​exp(sjt​) qtc=∑i=1Naithiqq_t^c=sum_{i=1}^Na_i^th_i^qqtc​=∑i=1N​ait​hiq​

Bilinear Attention

sjt=hjqTWbhtps_j^t=h_j^{q^T}W_bh_t^psjt​=hjqT​Wb​htp​ ait=exp(sit)/sumj=1Nexp(sjt)a_i^t=exp(s_i^t)/sum_{j=1}^Nexp(s_j^t)ait​=exp(sit​)/sumj=1N​exp(sjt​) qtc=∑i=1Naithiqq_t^c=sum_{i=1}^Na_i^th_i^qqtc​=∑i=1N​ait​hiq​

Dot Attention

sjt=vdTtanh(Wd(hjq⊙htp))s_j^t=v_d^Ttanh(W_d(h_j^qodot h_t^p))sjt​=vdT​tanh(Wd​(hjq​⊙htp​)) ait=exp(sit)/sumj=1Nexp(sjt)a_i^t=exp(s_i^t)/sum_{j=1}^Nexp(s_j^t)ait​=exp(sit​)/sumj=1N​exp(sjt​) qtc=∑i=1Naithiqq_t^c=sum_{i=1}^Na_i^th_i^qqtc​=∑i=1N​ait​hiq​

Minus Attention

sjt=vmTtanh(Wm(hjq−htp))s_j^t=v_m^Ttanh(W_m(h_j^q-h_t^p))sjt​=vmT​tanh(Wm​(hjq​−htp​)) ait=exp(sit)/sumj=1Nexp(sjt)a_i^t=exp(s_i^t)/sum_{j=1}^Nexp(s_j^t)ait​=exp(sit​)/sumj=1N​exp(sjt​) qtc=∑i=1Naithiqq_t^c=sum_{i=1}^Na_i^th_i^qqtc​=∑i=1N​ait​hiq​

Add Attention

再补充一个,出处不一样,跟上面四个相比应该叫做Add attention原出处称为perceptron attetion。它跟Concat好像是一样的。

sjt=vaTtanh(Wahj+Uaht))s_j^t=v_a^Ttanh(W_ah_j+U_ah_t))sjt​=vaT​tanh(Wa​hj​+Ua​ht​)) ait=exp(sit)/sumj=1Nexp(sjt)a_i^t=exp(s_i^t)/sum_{j=1}^Nexp(s_j^t)ait​=exp(sit​)/sumj=1N​exp(sjt​) qtc=∑i=1Naithiqq_t^c=sum_{i=1}^Na_i^th_i^qqtc​=∑i=1N​ait​hiq​

参考资料

大话注意力机制 attetnion各种形式总结 Multiway Attention Networks for Modeling Sentence Pairs (IJCAI 2018)