1. 程式人生 > >機器學習面試之Attention

機器學習面試之Attention

摘自 milter
https://www.jianshu.com/p/c94909b835d6

1 RNN做機器翻譯的經典思路 encoder-decoder
用RNN做機器翻譯時,通常需要兩個RNN網路,一個用來將接收待翻譯語句,對其進行編碼,最後輸出一個vector,這個網路叫encoder。然後,該vector會作為輸入,傳給另一個RNN網路,該網路用來根據vector產生目標語言的翻譯語句,這個網路叫做decoder。如下圖所示:

encoder-decoder.png

上圖中間的Context就是我們這裡說的第一個RNN產生的vector。
2 encoder-decoder的缺點在哪裡?
encoder-decoder最大的缺點是,encoder接收了不管多長的語句,最後輸出的只是最後一個vector,當語句很長時,這個vector能否有效地表示該語句是很值得懷疑的。
如何解決這個問題呢?我們很自然會想到,第一個RNN其實在中間會產生很多輸出,這些輸出都被我們拋棄了,我們只用了最後的一個。如果能利用上中間的輸出,興許可以解決問題。Attention正是利用上了這些中間的輸出。
3 Attention是如何利用中間的輸出的
先上圖,再來解釋:

螢幕快照 2018-09-01 下午7.20.56.png

上圖中的A是我們的encoder, B是我們的decoder。
可以想象,A網路接收了一個四個字的句子,對每個字都產生了一個輸出(這些輸出都是一個vector),我們稱其為s1,s2,s3,s4。
我們看上圖的B網路,在第一個B產生的hidden state(稱其為h1)除了傳給下一個cell外,還傳到了A網路,這裡就是Attention發揮作用的地方,我們來看看發生了什麼。
第一步:
h1 分別與s1,s2,s3,s4做點積,產生了四個數,稱其為m1,m2,m3,m4(這些都是標量,不是向量了!)
第二步:
m1,m2,m3,m4 傳到一個softmax層,產生一個概率分佈a1,a2,a3, a4。
第三步:
將a1,a2,a3, a4 與s1,s2,s3,s4分別相乘,再相加,得到得到一個vector,稱其為Attention vector。
第四步:
Attention vector 將作為輸入傳到B網路的第二個cell中,參與預測。
以上就是Attention機制的基本思想了。我們看到,Attention vector 實際上融合了s1,s2,s3,s4的資訊,具體的融合是用一個概率分佈來達到的,而這個概率分佈又是通過B網路上一個cell的hidden state與s1,s2,s3,s4進行點乘得到的。
Attention vector實際上達到了讓B網路聚焦於A網路輸出的某一部分的作用。
4 Attention中產生概率分佈的兩種方法
在第3部分中,我們的概率分佈來自於h與s的點積再做softmax,這只是最基本的方式。在實際中,我們可以有不同的方法來產生這個概率分佈,每一種方法都代表了一種具體的Attention機制。

1 加法Attention
在加法Attention中,我們不再讓h與s做點積,而是做如下的運算:

螢幕快照 2018-09-01 下午7.51.04.png

va和Wa都是可以訓練的引數。h與s之間的分號表示將二者接到一起產生一個更長的vector。這樣產生的數再送往softmax層,進而產生一個概率分佈。
當然,我們還可以這麼做:

螢幕快照 2018-09-01 下午7.55.26.png

這裡只是不再把h與s接到一起而已,本質上沒有什麼區別的。

2 乘法Attention
乘法Attention將h與s做如下的運算:

螢幕快照 2018-09-01 下午7.56.47.png

顯然,乘法Attention的引數更少,效率自然也會更高一些。
5 Attention機制的擴充套件
Attention機制的核心在於對一個序列資料進行聚焦,這個聚焦是通過一個概率分佈來實現的。這種機制其實有很強的普適性,可以用在各個方面。
比如,根據圖片產生描述該圖片的文字, 首先,圖片會經過CNN進行特徵的提取,提取的資料會輸入到產生描述文字的RNN中,這裡,我們可以引入Attention機制,讓我們在產生下一個文字時,聚焦於我們正在描述的圖片部位。
其次,在句子表示中,self Attention機制是成功擴充套件的Attention的範例。其基本原理如下:
假如我們用一個RNN讀入了一個句子,產生了h1, h2,h3,h4四個hidden state。
為了得到該句子的摘要,我們可以這樣做:
對每一個h計算一個分數:

螢幕快照 2018-09-01 下午8.24.04.png

四個h共產生了4個分數,將這四個分數送入一個softmax層,產生一個概率分佈,根據這個概率分佈對四個h進行加和,得到句子摘要的第一個vector。如下圖所示:

螢幕快照 2018-09-01 下午8.26.44.png

為了得到更多的vector,我們可以把上面圖中的小寫va換成一個矩陣,然後,我們的a也就變成了多個概率分佈組成的矩陣,每個概率分佈都可以用來與h進行加和產生一個vector,這樣我們就產生了摘要的多個vector,如下圖所示:

螢幕快照 2018-09-01 下午8.28.06.png

6 無總結不進步
通過以上的內容,我們瞭解到,Attention機制最初用來克服RNN做機器翻譯時的缺點,然後,人們發現,Attention機制具有廣泛的適用性,於是它又被擴充套件到了產生圖片描述,做句子摘要等任務上。
我們也清楚了,不同的Attention機制的核心區別在於產生概率分佈的方法不同。

作者:
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。