深度學習中的Attention機制

RNN作機器翻譯有它自身的弱點,Attention正是爲了克服這個弱點而出現的。因此,要理解Attention,就要搞明白兩件事:面試

  • RNN在作機器翻譯時有什麼弱點網絡

  • Attention是如何克服這個弱點的機器學習

本文試圖從解答這兩個問題的角度來理解Attention機制。學習

1、RNN作機器翻譯的經典思路 encoder-decoder

用RNN作機器翻譯時,一般須要兩個RNN網絡,一個用來將接收待翻譯語句,對其進行編碼,最後輸出一個vector,這個網絡叫encoder。而後,該vector會做爲輸入,傳給另外一個RNN網絡,該網絡用來根據vector產生目標語言的翻譯語句,這個網絡叫作decoder。以下圖所示:編碼

《機器學習面試之Attention》

上圖中間的Context就是咱們這裏說的第一個RNN產生的vector。翻譯

2、encoder-decoder的缺點在哪裏?

encoder-decoder最大的缺點是,encoder接收了無論多長的語句,最後輸出的只是最後一個vector,當語句很長時,這個vector可否有效地表示該語句是很值得懷疑的。code

如何解決這個問題呢?咱們很天然會想到,第一個RNN其實在中間會產生不少輸出,這些輸出都被咱們拋棄了,咱們只用了最後的一個。若是能利用上中間的輸出,興許能夠解決問題。Attention正是利用上了這些中間的輸出。blog

3、Attention是如何利用中間的輸出的

先上圖,再來解釋:圖片

《機器學習面試之Attention》

上圖中的A是咱們的encoder, B是咱們的decoder。
能夠想象,A網絡接收了一個四個字的句子,對每一個字都產生了一個輸出(這些輸出都是一個vector),咱們稱其爲s1,s2,s3,s4。io

咱們看上圖的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作點積,而是作以下的運算:

    《機器學習面試之Attention》

va和Wa都是能夠訓練的參數。h與s之間的分號表示將兩者接到一塊兒產生一個更長的vector。這樣產生的數再送往softmax層,進而產生一個機率分佈。

固然,咱們還能夠這麼作:

《機器學習面試之Attention》

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

  • 2 乘法Attention
    乘法Attention將h與s作以下的運算:

    《機器學習面試之Attention》

顯然,乘法Attention的參數更少,效率天然也會更高一些。

5、Attention機制的擴展

Attention機制的核心在於對一個序列數據進行聚焦,這個聚焦是經過一個機率分佈來實現的。這種機制其實有很強的普適性,能夠用在各個方面。

好比,根據圖片產生描述該圖片的文字, 首先,圖片會通過CNN進行特徵的提取,提取的數據會輸入到產生描述文字的RNN中,這裏,咱們能夠引入Attention機制,讓咱們在產生下一個文字時,聚焦於咱們正在描述的圖片部位。

其次,在句子表示中,self Attention機制是成功擴展的Attention的範例。其基本原理以下:

假如咱們用一個RNN讀入了一個句子,產生了h1, h2,h3,h4四個hidden state。
爲了獲得該句子的摘要,咱們能夠這樣作:
對每個h計算一個分數:

《機器學習面試之Attention》

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

《機器學習面試之Attention》

爲了獲得更多的vector,咱們能夠把上面圖中的小寫va換成一個矩陣,而後,咱們的a也就變成了多個機率分佈組成的矩陣,每一個機率分佈均可以用來與h進行加和產生一個vector,這樣咱們就產生了摘要的多個vector,以下圖所示:

《機器學習面試之Attention》

6、總結

經過以上的內容,咱們瞭解到,Attention機制最初用來克服RNN作機器翻譯時的缺點,而後,人們發現,Attention機制具備普遍的適用性,因而它又被擴展到了產生圖片描述,作句子摘要等任務上。

咱們也清楚了,不一樣的Attention機制的核心區別在於產生機率分佈的方法不一樣。

相關文章
相關標籤/搜索