Attention機制在深度學習中得到了廣泛的應用,本文通過公式及圖片詳細講解attention機制的計算過程及意義,首先從最早引入attention到機器翻譯任務(Bahdanau et al. ICLR2014)的方法講起。
Encoder-Decoder
大多數(shù)注意力模型都是在Encoder-Decoder框架下發(fā)揮作用,Encoder-Decoder模型一般可以用來做機器翻譯、文本摘要生成、問答系統(tǒng)、聊天機器人等。Encoder的輸入是Source,Decoder要輸出的是Target,一般通過RNN來編碼輸入的句子,得到一個包含的句子語義信息的Vector。假設句子由個單詞組成,即。那么RNN或Transformer等模型就作為編碼句子的Encoder,首先句子經過Embedding層,從one-hot形式變?yōu)樵~向量,假設它提取句子的語義信息的函數(shù)為,則:
對于Decoder來說,它的目標是根據(jù)Encoder編碼好的句子信息解碼出我們想要的結果,這結果可以是對原輸入句子的回答,翻譯,或摘要等。假設Decoder的輸出為,和的大小關系并不確定,一般來說Decoder輸出
句子才算結束。
假設t=i時,我們要輸出,其實我們輸出的是一個概率分布,然后再選取概率最大的那個單詞當作輸出( 貪心 search ),還有另一種方式叫 beam search ,這個不是本文重點就在此不多說了。根據(jù)Bahdanau et al. ICLR2014第一次提出的將Attention運用于機器翻譯任務的論文中,的計算公式如下:
其中是RNN在timestep的hidden state,由如下公式計算:
由于直接輸出的實際是一個長度為vocabulary size 的vector,因此最終根據(jù)生成的單詞其實應該變成一個one-hot vector:
在這里簡單地將Decoder整個生成yi的函數(shù)用表示:
這樣就是一個Encoder-Decoder框架運作的基本方式,更直觀的可以參見下圖。
Soft Attention
最常見也應用最廣泛的Attention就是Soft Attention,上面的Encoder-Decoder框架,在Decoder生成每一個yi時,對原輸入整個句子語義信息C都給予了同等的注意力,即原句中不同的單詞對于生成每一個yi的貢獻是相同的。這明顯是有問題的,比如在中英翻譯:“我今天吃了一個蘋果”,“I ate an apple today”,在翻譯apple這個詞時,原句中的“蘋果”對其生成apple要比其他詞都重要,因此,需要一個給單純的Encoder-Decoder模型融入更多的知識,那就是Attention。
Attention的有效性和作用是很intuitive的,比如人在讀文章、觀察物體時也是會有注意力的參與的,不可能讀一頁書讀到第一行,還能同時注意第二十行的句子,注意力肯定是分配在某個局部的句子上的。因此,給Encoder-Decoder添加Attention,就是要讓Decoder在生成時,給輸入句子的單詞分配不同的注意力權重,權重代表著單詞對生成的重要性。
假設Encoder是RNN,輸入每個單詞后都會輸出一個隱狀態(tài),那么對生成時,原先對生成每個yi都是相同的句子語義表示會被替換成根據(jù)當前要生成的單詞yi而不斷變化的。理解Attention模型的關鍵就是這里,即把固定的句子語義表示變成了根據(jù)當前要輸出的單詞yi來進行調整的、融入注意力知識的、不斷變化的。
因此上面生成yi的式子變化成如下形式:
其中,t代表輸入句子Source的長度,代表在Decoder輸出第i個單詞時給Source中第j個單詞的注意力分配系數(shù),而hj則是Encoder輸入第j個單詞時輸出的隱狀態(tài)(語義編碼)。根據(jù)NMT論文原文, is an alignment model which scores how well the inputs around position j and the output at position i match. The score is based on the RNN hidden state (just before emitting yi) and the j-th annotation hj of the input sentence. 至于函數(shù)的選取下面會說明。下圖是一個可視化的效果,幫助理解。
計算Attention
我們已經知道了attention是什么,有什么作用,下面具體說明到底怎么計算attention。
假設Encoder輸入后輸出的隱狀態(tài)為,Decoder在輸出前隱層節(jié)點狀態(tài)為,那么可以用這個時刻的隱層節(jié)點狀態(tài)去一一和輸入句子中每個單詞對應的RNN隱狀態(tài)進行對比,即通過函數(shù)來獲得目標單詞yi和每個輸入單詞對齊的可能性。函數(shù)在不同論文里可能會采取不同的方法,然后的所有輸出經過Softmax進行歸一化就得到了注意力分配到每個輸入單詞上的權重。下圖展示了這個計算過程:
上面說到不同的論文函數(shù)會采取不同的方法,其中較為普遍的類型有兩種,一個是加法Attention,另一個是乘法Attention。
加法Attention
和為可訓練的參數(shù),將計算結果變成一個scalar,h與s之間的分號表示將二者concatenate到一起,產生一個更長的vector,然后和做矩陣乘法。最后再把得到的value一起送往softmax層,進而產生一個符合概率分布的attention。
乘法Attention
將加法和乘法排列組合變換,就能得到另一種方式——多重感知機(multi-layer perceptron)
在代碼實現(xiàn)中,運用矩陣運算,可以大大加速計算,這里的不再是單個vector,而是組成的一個矩陣,與一同計算后,得到了一個長度為的vector ,它代表著在生成時,對分配的注意力權重。
下圖展示了在文本生成式摘要時,注意力的分配
Attention機制的本質思想
我們可以這樣來看待Attention機制:將Source中的構成元素想象成是由一系列的數(shù)據(jù)對構成,此時給定Target中的某個元素Query,通過計算Query和各個Key的相似性或者相關性,可以得到每個Key針對該Query,Value的分配到的權重系數(shù),然后對所有Key的Value進行加權求和,便得到了最終的Attention值。所以本質上Attention機制是對Source中元素的Value值進行加權求和,而Query和Key用來計算對應Value的權重系數(shù)。即可以將其本質思想改寫為如下公式:
上式,代表Source的長度。上文所舉的機器翻譯的例子里,因為在計算Attention的過程中,Source中的Key和Value其實是同一個東西,即輸入句子中每個單詞對應的語義編碼,所以可能不容易看出這種能夠體現(xiàn)本質思想的結構。
當然,從概念上理解,把Attention仍然理解為從大量信息中有選擇地篩選出少量重要信息并聚焦到這些重要信息上,忽略大多不重要的信息,這種思路仍然成立。聚焦的過程體現(xiàn)在權重系數(shù)的計算上,權重越大越聚焦于其對應的Value值上,即權重代表了信息的重要性,而Value是其對應的信息。
也可以將Attention機制看作一種軟尋址(Soft Addressing):Source可以看作存儲器內存儲的內容,元素由地址Key和值Value組成,當前有個Key=Query的查詢,目的是取出存儲器中對應的Value值,即Attention值。通過Query和存儲器內元素Key的地址進行相似性比較來尋址。之所以說是軟尋址,是因為不像一般尋址只從存儲內容里面找出一條內容,而是從每個Key地址都可能會取出內容,取出內容的重要性根據(jù)Query和Key的相似性來決定,之后對Value進行加權求和,這樣就可以得到最終的Value值,也即Attention值。
Attention機制的具體計算過程,如果對目前大多數(shù)方法進行抽象的話,可以將其歸納為兩個過程:第一個過程是根據(jù)Query和Key計算權重系數(shù),第二個過程根據(jù)權重系數(shù)對Value進行加權求和。而第一個過程又可以細分為兩個階段:第一個階段根據(jù)Query和Key計算兩者的相似性或者相關性;第二個階段對第一階段的原始分值進行歸一化處理;這樣,可以將Attention的計算過程抽象為下圖展示的三個階段。
在第一個階段,可以引入不同的函數(shù)和計算機制,根據(jù)Query和某個Keyi,計算兩者的相似性或者相關性,最常見的方法包括:求兩者的向量點積、求兩者的向量Cosine相似性或者通過再引入額外的神經網絡來求值,計算公式分別如下:
接著將得到的數(shù)值進行數(shù)值轉換,一方面可以進行歸一化,將原始計算分值整理成所有元素權重之和為1的概率分布;另一方面也可以通過SoftMax的內在機制更加突出重要元素的權重。一般采用如下公式計算:
最后得到Query關于Source的加權后的Value值:
延伸閱讀
Attention的變體有非常非常多,針對不同任務,不同的Attention機制也有不同的效果,下面最近較火的兩種Attention,相信讀完上面的內容,理解下面的Attention不再是難題,后續(xù)我也會再寫一篇詳細講解self-attention計算過程的文章。
- Self-Attention
- Hierarchical-Attention
參考鏈接及圖片來源:
- https://zhuanlan.zhihu.com/p/37601161
- https://www.jianshu.com/p/c94909b835d6
-
機器翻譯
+關注
關注
0文章
139瀏覽量
14886 -
深度學習
+關注
關注
73文章
5503瀏覽量
121206 -
rnn
+關注
關注
0文章
89瀏覽量
6895
發(fā)布評論請先 登錄
相關推薦
評論