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