1. 程式人生 > >常見的兩種注意力機制

常見的兩種注意力機制

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

為什麼需要注意力機制

seq2seq模型已經在機器翻譯、自然語言處理領域取得了很大的進步,基於貝葉斯條件概率公式,seq2seq由一個編碼器和一個解碼器構成,編碼器將源序列A編碼成一個固定長度的特徵向量,這個向量作為輸入被傳送到解碼器得到目標序列B。

seq2seq雖然相比傳統的n-gram統計模型更具非線性刻畫能力,但其也有自身的缺點。主要缺點主要有兩個:第一是長程記憶能力有限,如果源句子序列非常長,那麼由於梯度更新中衰減較大,導致序列頭部的引數無法得到有效更新;第二是序列轉換過程中的無法對齊,從源序列A到目標序列B過程中,解碼器的輸入始終是一段固定的特徵向量,並不是按照位置去A中檢索。

解決第一個問題的方法有很多,例如常見的有使用雙向迴圈神經網路來作為編碼器,充分利用上下文資訊。可是這種做法得到的仍然是一段固定的特徵向量,我們希望的是解碼器可以在不同時間點可以動態地得到它所想要的輸入,進而可以產生理想的輸出。於是,這個時候注意力機制就應運而生,它充分解決了長程記憶問題,而且又可以讓解碼器得到動態的輸入資訊。

最基本的注意力機制主要分為兩種,一種是由Bahdanau提出的加法注意力機制,另外一種是由Luong提出的乘法注意力機制。

Bahdanau注意力機制

在運用seq2seq進行序列生成的時候,解碼器的輸出通常由上一時刻的輸出和當前時刻的上下文共同決定,我們可以簡寫成如下形式,其中st是t時刻解碼器的隱含狀態。

這裡最關鍵的一個量無疑就是上下文c了,c的確定將直接決定解碼器每一時刻的輸入特徵。很容易想到的是,c一定與解碼器的特徵有關,為了追求編碼器與解碼器之間的需求平衡,我們還希望c對解碼器不同位置的特徵具有篩選功能,而具體怎麼篩選,是應該由解碼器的自身狀態決定的。

既然是篩選,那麼必定是對編碼器的特徵進行加權,加權因子一定滿足總和為1。所以關鍵就是怎麼求這個加權因子。Bahdanau指出,加權因子可以通過解碼器的狀態與編碼器的狀態進行匹配而得到。

具體來說,首先,我們需要對解碼器當前的狀態與編碼器的所有位置的狀態的匹配度進行打分,如下公式所示,這裡的a可以是一個多層感知器(MLP),這個MLP無需人工干預,由網路自學習就可以了。

由於我們想得到的是歸一化以後的權重因子,因此在得到e之後,我們需要對它進行歸一化,從最大似然概率的角度出發,我們採用的是softmax歸一化函式。

得到歸一化因子alpha以後,直接將其與編碼器的隱含狀態相乘即可得到解碼器在每一步的上下文特徵資訊。

Luong注意力機制

順著Bahdanau的工作,Luong隨後也提出了將注意力機制運用到神經機器翻譯任務上。Luong總共提出了兩種注意力機制,分別是global注意力機制和local注意力機制,先不說二者區別在哪,說一下它們的共同點。

如上圖所示,與Bahdanau注意力機制不同的是,Luong提出的兩種注意力機制中,上下文資訊和解碼器的隱含狀態是拼接到一起組成一個向量,稱之為含注意力的隱含狀態,這個是global注意力機制和local注意力機制的共同之處。

那麼不同點是什麼呢?應該有讀者已經猜到了,因為我上面沒有提及這裡的上下文資訊是如何得到的,其實就是global注意力機制與local注意力機制在獲取上下文資訊的方式不同。

global注意力機制充分結合了編碼器所有的隱含狀態,將解碼器的隱含狀態與編碼器的狀態進行一一比較並評分,然後使用softmax歸一化計算出權重因子。

不過,與Bahdanau不同的是,這裡根據編碼器和解碼器來計算score的方法Luong給出了三種,並且實驗表明dot對於global注意力機制比較有效,而general對於local注意力機制比較有效。

得到a以後,再將a與編碼器的所有隱含狀態相乘即可得到上下文資訊c。global注意力機制如下圖所示:

由於global注意力機制是一種soft注意力機制,即每一時刻解碼器需要對所有編碼器都權衡一遍,這對於長序列來說十分不現實,計算成本也很高。為了克服這個困難,local注意力機制克服了global注意力機制的計算困難,解碼器每次只用注意一小部分編碼器的狀態即可。

就local注意力機制而言,首先要做的就是尋找區域性的中心位置。這裡使用的演算法稱為predictive alignment,通過構建引數,讓網路自學習並優化引數,最終找到正確的中心位置。如下所示,v和W均為模型的可學習引數,ht為解碼器的隱含狀態,由於sigmoid的輸出值的區間為(0,1),所以中心位置pt的大小為(0,S),S為源序列的長度。

得到中心位置以後,我們再確定其周圍位置點的權重因子。這裡我們假設區域性注意力機制滿足高斯分佈,即中心點的注意力權重計算方式同global注意力機制裡面一樣,但是周圍點的注意力權重則以此為高斯分佈展開。如下所示,高斯分佈為D/2,其中D是一個經驗值,可以認為與區域性的長度有關。

與global注意力機制類似,得到a以後,再將a與編碼器的所有隱含狀態相乘即可得到上下文資訊c,local注意力機制如下圖所示:

以上就是兩種常見的注意力機制,下一期將介紹如何在TensorFlow中構建完整的基於注意力機制的seq2seq模型。


參考文獻

  • Graves, Sequence to Sequence Learning with Neural Networks

  • Bahdanau,Neural Machine Translation by Jointly Learning to Align and Translate

  • Luong,Effective Approaches to Attention-based Neural Machine Translation

題圖:Diwali Lamps


原文連結            

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述