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)=∑jexp(f,pj)exp(f(q,pi))
- read content (generate context vector function) c=∑iαihic = sum_ialpha_ih_ic=i∑αihi
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=vcTtanh(Wc1hjq+Wc2htp) ait=exp(sit)/sumj=1Nexp(sjt)a_i^t=exp(s_i^t)/sum_{j=1}^Nexp(s_j^t)ait=exp(sit)/sumj=1Nexp(sjt) qtc=∑i=1Naithiqq_t^c=sum_{i=1}^Na_i^th_i^qqtc=∑i=1Naithiq
Bilinear Attention
sjt=hjqTWbhtps_j^t=h_j^{q^T}W_bh_t^psjt=hjqTWbhtp ait=exp(sit)/sumj=1Nexp(sjt)a_i^t=exp(s_i^t)/sum_{j=1}^Nexp(s_j^t)ait=exp(sit)/sumj=1Nexp(sjt) qtc=∑i=1Naithiqq_t^c=sum_{i=1}^Na_i^th_i^qqtc=∑i=1Naithiq
Dot Attention
sjt=vdTtanh(Wd(hjq⊙htp))s_j^t=v_d^Ttanh(W_d(h_j^qodot h_t^p))sjt=vdTtanh(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=1Nexp(sjt) qtc=∑i=1Naithiqq_t^c=sum_{i=1}^Na_i^th_i^qqtc=∑i=1Naithiq
Minus Attention
sjt=vmTtanh(Wm(hjq−htp))s_j^t=v_m^Ttanh(W_m(h_j^q-h_t^p))sjt=vmTtanh(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=1Nexp(sjt) qtc=∑i=1Naithiqq_t^c=sum_{i=1}^Na_i^th_i^qqtc=∑i=1Naithiq
Add Attention
再補充一個,出處不一樣,跟上面四個相比應該叫做Add attention原出處稱為perceptron attetion。它跟Concat好像是一樣的。
sjt=vaTtanh(Wahj+Uaht))s_j^t=v_a^Ttanh(W_ah_j+U_ah_t))sjt=vaTtanh(Wahj+Uaht)) ait=exp(sit)/sumj=1Nexp(sjt)a_i^t=exp(s_i^t)/sum_{j=1}^Nexp(s_j^t)ait=exp(sit)/sumj=1Nexp(sjt) qtc=∑i=1Naithiqq_t^c=sum_{i=1}^Na_i^th_i^qqtc=∑i=1Naithiq
參考資料
大話注意力機制 attetnion各種形式總結 Multiway Attention Networks for Modeling Sentence Pairs (IJCAI 2018)