目錄
- Attention介紹
- Attention原理
- Attention的其他應用
- 代碼嘗試
一句話簡介:九幾年提出的概念,2014年在視覺領域火了以后,逐步引入NLP中,2017年的《Attention is all you need》引爆改結構,初步思想也很簡單,就是提高某個區域的權重系數,有Local Attention Model、Global Attention Model和self-attention幾種形式。支持並行化運算,尤其是self-attention 獲取能力有RNN的精度和CNN的速度。
一、Attention介紹
1.1 背景
Attention機制最早是在視覺圖像領域提出來的,應該是在九幾年思想就提出來了,但是真正火起來應該算是2014年google mind團隊的這篇論文《Recurrent Models of Visual Attention》,他們在RNN模型上使用了attention機制來進行圖像分類。隨后,Bahdanau等人在論文《Neural Machine Translation by Jointly Learning to Align and Translate》中,使用類似attention的機制在機器翻譯任務上將翻譯和對齊同時進行,他們的工作算是第一個將attention機制應用到NLP領域中。接着attention機制被廣泛應用在基於RNN/CNN等神經網絡模型的各種NLP任務中。2017年,google機器翻譯團隊發表的《Attention is all you need》中大量使用了自注意力(self-attention)機制來學習文本表示。自注意力機制也成為了大家近期的研究熱點,並在各種NLP任務上進行探索。下圖為attention研究進展的大概趨勢。
1.2 引入的原因
- 計算能力的限制:當要記住很多"信息",模型就要變得更復雜,然而目前計算能力依然是限制神經網絡發展的瓶頸。
- 優化算法的限制:雖然局部連接、權重共享以及pooling等優化操作可以讓神經網絡變得簡單一些,有效緩解模型復雜度和表達能力之間的矛盾;但是,如循環神經網絡中的長距離以來問題,信息"記憶"能力並不高。
再舉個例子來說,當我們觀賞一幅畫時,雖然我們可以看到整幅畫的全貌,但是在我們深入仔細地觀察時,其實眼睛聚焦的就只有很小的一塊,這個時候人的大腦主要關注在這一小塊圖案上,也就是說這個時候人腦對整幅圖的關注並不是均衡的,是有一定的權重區分的。這就是深度學習里的Attention Model的核心思想。
1.3 NLP中的應用
如下圖所示,機器翻譯主要使用的是Encoder-Decoder模型,在Encoder-Decoder模型的基礎上引入了AM,取得了不錯的效果:
二、Attention原理
斯坦福大學的一篇paper"Effective Approaches to Attention-based Neural Machine Translation"提出了一個混合Soft AM 和Hard AM的模型,論文中,他們提出了兩種模型:Global Attention Model和Local Attention Model。Global Attention Model其實就是Soft Attention Model,Local Attention Model本質上是Soft AM和 Hard AM的一個混合。一般首先預估一個對齊位置Pt,然后在Pt左右大小為D的窗口范圍來取類似於Soft AM的概率分布。
2.1 沒有attention的模型
其中f是Decoder的非線性變換函數。從這里可以看出,在生成目標句子的單詞時,不論生成哪個單詞,它們使用的輸入句子Source的語義編碼C都是一樣的,沒有任何區別。
而語義編碼C是由句子Source的每個單詞經過Encoder 編碼產生的,這意味着不論是生成哪個單詞,y1,y2還是y3,其實句子Source中任意單詞對生成某個目標單詞yi來說影響力都是相同的,這是為何說這個模型沒有體現出注意力的緣由。這類似於人類看到眼前的畫面,但是眼中卻沒有注意焦點一樣。
如果拿機器翻譯來解釋這個分心模型的Encoder-Decoder框架更好理解,比如輸入的是英文句子:Tom chase Jerry,Encoder-Decoder框架逐步生成中文單詞:"湯姆","追逐","傑瑞"。
在翻譯"傑瑞"這個中文單詞的時候,分心模型里面的每個英文單詞對於翻譯目標單詞"傑瑞"貢獻是相同的,很明顯這里不太合理,顯然"Jerry"對於翻譯成"傑瑞"更重要,但是分心模型是無法體現這一點的,這就是為何說它沒有引入注意力的原因。
2.2 Soft Attention Model(Global attention):
2.2.1 引入Attention
而每個Ci可能對應着不同的源語句子單詞的注意力分配概率分布,比如對於上面的英漢翻譯來說,其對應的信息可能如下:
其中,f2函數代表Encoder對輸入英文單詞的某種變換函數,比如若Encoder是用的RNN模型的話,這個f2函數的結果往往是某個時刻輸入xi后隱層節點的狀態值;g代表Encoder根據單詞的中間表示合成整個句子中間語義表示的變換函數,一般的做法中,g函數就是對構成元素加權求和,即下列公式:
其中,Lx代表輸入句子Source的長度,aij代表在Target輸出第i個單詞時Source輸入句子中第j個單詞的注意力分配系數,而hj則是Source輸入句子中第j個單詞的語義編碼。假設下標i就是上面例子所說的" 湯姆" ,那么Lx就是3,h1=f("Tom"),h2=f("Chase"),h3=f("Jerry")分別是輸入句子每個單詞的語義編碼,對應的注意力模型權值則分別是0.6,0.2,0.2。
2.2.2 Attention機制的本質思想
Attention機制:將Source中的構成元素想象成是由一系列的<Key,Value>數據對構成,此時給定Target中的某個元素Query,通過計算Query和各個Key的相似性或者相關性,得到每個Key對應Value的權重系數,然后對Value進行加權求和,即得到了最終的Attention數值。所以本質上Attention機制是對Source中元素的Value值進行加權求和,而Query和Key用來計算對應Value的權重系數。即可以將其本質思想改寫為如下公式:
其中,Lx=||Source||代表Source的長度,公式含義即如上所述。上文所舉的機器翻譯的例子里,因為在計算Attention的過程中,Source中的Key和Value合二為一,指向的是同一個東西,也即輸入句子中每個單詞對應的語義編碼,所以可能不容易看出這種能夠體現本質思想的結構。
當然,從概念上理解,把Attention仍然理解為從大量信息中有選擇地篩選出少量重要信息並聚焦到這些重要信息上,忽略大多不重要的信息,這種思路仍然成立。聚焦的過程體現在權重系數的計算上,權重越大越聚焦於其對應的Value值上,即權重代表了信息的重要性,而Value是其對應的信息。
第一個階段,可以引入不同的函數和計算機制,根據Query和某個,計算兩者的相似性或者相關性,最常見的方法包括:求兩者的向量點積、求兩者的向量Cosine相似性或者通過再引入額外的神經網絡來求值,即如下方式:
第二階段引入類似SoftMax的計算方式對第一階段的得分進行數值轉換,一方面可以進行歸一化,將原始計算分值整理成所有元素權重之和為1的概率分布;另一方面也可以通過SoftMax的內在機制更加突出重要元素的權重。即一般采用如下公式計算:
第三階段加權求和即可得到Attention數值
一個圖來表示下三個的全過程,如下所示:
總的來說,使用矩陣形式,可以表示成如下:
事實上q,k,v分別是query,key,value的簡寫,K,V是一一對應的,它們就像是key-value的關系,那么上式的意思就是通過qt這個query,通過與各個ks內積的並softmax的方式,來得到qt與各個Vs的相似度,然后加權求和,得到一個dv維的向量。其中因子起到調節作用,使得內積不至於太大(點積計算得到的內積會太大,這樣會導致softmax的結果非0即1)。
2.3 Local attention
每一次生成目標單詞(target word)都分析source sentence中所有單詞的做法代價太高,也許也是沒有必要的。為了緩解這個問題,[Luong et at.][2]論文中建議只集中關注一個固定大小2D+1窗口中的source sentence 的注釋(annotation),即只關注最能幫助預測下一個詞匯的source sentence中某個詞匯前后step的隱藏狀態(hidden state):
其中,D由用戶自定義,
權重也發生變化:
local attention可以看成是alignment權重與一個截斷高斯分布相乘后的global attention(窗口外的annotation取值為0)。local attention的示意圖如下所示:
2.4 self-attention
Self Attention也經常被稱為intra Attention(內部Attention),最近一年也獲得了比較廣泛的使用,比如Google最新的機器翻譯模型內部大量采用了Self Attention模型。
Self Attention顧名思義,指的不是Target和Source之間的Attention機制,而是Source內部元素之間或者Target內部元素之間發生的Attention機制,也可以理解為Target=Source這種特殊情況下的注意力計算機制。
2.4.1 計算流程
通過線性變換得到為查詢向量序列,鍵向量序列和值向量序列:
上面的公式可以看出,self-Attention中的Q是對自身(self)輸入的變換,而在傳統的Attention中,Q來自於外部。
2.4.2 作用
很明顯,引入Self Attention后會更容易捕獲句子中長距離的相互依賴的特征,因為如果是RNN或者LSTM,需要依次序序列計算,對於遠距離的相互依賴的特征,要經過若干時間步步驟的信息累積才能將兩者聯系起來,而距離越遠,有效捕獲的可能性越小。另外其優點如下:
1) 可以並行化處理,在計算self-Attention是不依賴於其他結果的。
2)計算復雜度低,self-Attention的計算復雜度是,而RNN是,在這里n是指序列的長度,d是指詞向量的維 3)self-Attention可以很好的捕獲全局信息,無論詞的位置在哪,詞之間的距離都是1,因為計算詞之間的關系時是不依賴於其他詞的。在大量的文獻中表明,self-Attention的長距離信息捕捉能力和RNN相當,遠遠超過CNN(CNN主要是捕捉局部信息,當然可以通過增加深度來增大感受野,但實驗表明即使感受野能涵蓋整個句子,也無法較好的捕捉長距離的信息)。
2.4.3 self attention的層次模型
下面圖片展示了一個實際應用self attention的層次模型,其中self attention在兩個層次起作用:單詞層次和句子層次。這樣做的理由有兩個:如何自然語言的層次結構,詞匯組成語句,語句組成文本;第二,這樣使得模型可以學習到句子中需要重點關注的詞和文本中需要重點關注的句子。由於各個sentence的attentonal coefficient不同,各個句子下的各單詞的attentional coefficients可以是不同的,這使得一個句子中某個單詞的十分重要,到了另一個句子中這個單詞就變的不那么重要了。
三、Attention的其他應用
3.1 圖片描述(Image-Caption)
圖片描述(Image-Caption)是一種典型的圖文結合的深度學習應用,輸入一張圖片,人工智能系統輸出一句描述句子,語義等價地描述圖片所示內容。很明顯這種應用場景也可以使用Encoder-Decoder框架來解決任務目標,此時Encoder輸入部分是一張圖片,一般會用CNN來對圖片進行特征抽取,Decoder部分使用RNN或者LSTM來輸出自然語言句子。
此時如果加入Attention機制能夠明顯改善系統輸出效果,Attention模型在這里起到了類似人類視覺選擇性注意的機制,在輸出某個實體單詞的時候會將注意力焦點聚焦在圖片中相應的區域上。圖14給出了根據給定圖片生成句子"A person is standing on a beach with a surfboard."過程時每個單詞對應圖片中的注意力聚焦區域。
3.2 語音文字識別
語音識別的任務目標是將語音流信號轉換成文字,所以也是Encoder-Decoder的典型應用場景。Encoder部分的Source輸入是語音流信號,Decoder部分輸出語音對應的字符串流。
下圖可視化地展示了在Encoder-Decoder框架中加入Attention機制后,當用戶用語音說句子 how much would a woodchuck chuck 時,輸入部分的聲音特征信號和輸出字符之間的注意力分配概率分布情況,顏色越深代表分配到的注意力概率越高。從圖中可以看出,在這個場景下,Attention機制起到了將輸出字符和輸入語音信號進行對齊的功能。
參考文獻
【1】Bahdanau, Dzmitry, Kyunghyun Cho, and Yoshua Bengio. "Neural machine translation by jointly learning to align and translate." arXiv preprint arXiv:1409.0473 (2014).
【2】 Luong, Minh-Thang, Hieu Pham, and Christopher D. Manning. "Effective approaches to attention-based neural machine translation." arXiv preprint arXiv:1508.04025 (2015).
【3】注意力機制(Attention Mechanism)在自然語言處理中的應用 : https://www.cnblogs.com/robert-dlut/p/5952032.html
【4】目前主流的attention方法: https://www.zhihu.com/question/68482809/answer/264632289
【5】nlp中的Attention注意力機制+Transformer詳解: https://zhuanlan.zhihu.com/p/53682800