自然語言處理-第十五期-Attention Mechanism(二)

背景

自然語言處理-第十五期-Attention Mechanism(二)

上一期有解釋到Attention Mechanism的本質or解決的是什麼問題。

簡短的回顧下:

首先,在我的NLP系列第十三期提到的最基礎Seq2Seq模型中,Encoder將原始文本“轉化”為 一個hidden State,然後Decoder將此hidden state“解壓”為目標文本;

但是,其問題是,對於較長的句子。僅僅由一個Hidden State,很難生成準確的目標語句;

面對此問題,Attention Mechanism的應對方法是將原始語句中,每個詞的Hidden State都作為輸入的一部分。並且找出需要重點關注的部分,即需要Attention的部分

但是上期也遺留來一個關鍵問題,那就是如何自動計算出哪一部分需要重點關注呢?

自然語言處理-第十五期-Attention Mechanism(二)

Attention Mechanism

上一期將Attention Mechanism 概念化成 Dynamic Memory Access(動態記憶獲取), Word Alignment(軟對齊)的方法。那麼接下來將介紹具體如何實現的。

首先,與基礎Seq2Seq模型不同的是 Attention Mechanism將Encoder(藍色部分)的所有Hidden State 都引入到Decoder中來;

自然語言處理-第十五期-Attention Mechanism(二)

那麼如下圖,當我們需要翻譯第二個單詞時,我們所擁有的信息是什麼呢:

  • 上一個紅色部分傳遞過來的Hidden State, Ht-1
  • 所有藍色部分的Hidden State
自然語言處理-第十五期-Attention Mechanism(二)

大家直觀就能看出來,當我們翻譯第二個單詞時,重點需要放在“am”這個單詞上。Attention Mechanism的思路也很直接,將 ht-1 分別與藍色的每個Hidden State 打分(score)。我看到這裡時,我有很多疑問。

這個Score 意味著什麼? 它到底是對什麼打分的呢? 接下來與大家分享下我的思考。

假設我們的例子是要將“I am a student” 翻譯成“我是一個學生”

我們對什麼打分Score?

  • 首先,要回答Score意味著什麼,就要看Ht-1 和 Hs 分別是什麼? Ht-1(上一個紅色框傳遞來的Hidden State)。看到NLP-13期的朋友可能有印象。當傳統Seq2Seq沒有Attention Mechanism時,唯一的信息來源就是上一個框框傳遞來的Hidden State。所以,也可以理解為Ht-1 不僅限但包含了 此位子目標單詞的內容。
  • Hs 分別代表著藍色每個框框的Hidden State,即包含每個單詞(含語境)的信息;
  • 總結下上述兩點。Ht-1 包含了“是”這個目標單詞的信息;而Hs包含了每個單詞的信息,其中有一個單詞是“am”

我們打分意味著什麼?

知道了Ht-1 和 Hs的意義,那麼回到我們的任務 我們需要翻譯出“am”這個單詞。我們除了拿到Ht-1之外,我們還希望能拿到 “am”對應的Hidden State;

所以打分的意義就是幫助我們找到想要的Hs

自然語言處理-第十五期-Attention Mechanism(二)

Normalization

當我們遵循上圖的步驟計算出每個藍色Hidden State 的Score之後,如下圖。

自然語言處理-第十五期-Attention Mechanism(二)

接下來就是將其轉化為出現的概率。類似與Softmax的處理。最終如下圖2,形成一個按照權重綜合的向量。此向量導入到我們的Decoder中去。

自然語言處理-第十五期-Attention Mechanism(二)

自然語言處理-第十五期-Attention Mechanism(二)

總結下

Attention Mechansim的思路是,將Ht-1 與 Enocder中每個Hidden State 打分。然後基於打分的權重製作一個新的Vector。並且將此Vector傳遞到Deocder中去。那麼此時Decoder不但擁有了上一個Sequence傳遞過來的Hidden State(Ht-1)還擁有了“對應”單詞的Hidden State。

這也就達到了我們的目標:在NLP-13期提到了 普通的Seq2Seq僅僅依據一個濃縮整個句子的Hidden State很難“轉化”成一個較長的句子。那麼,Attention Mechanism 所做到的是,不僅有代表整個句子的Hidden State,還有對應單詞的Hidden State。 那麼使得翻譯更長的句子成為可能。下圖是來自於公開課的截圖,大家能看到當句子長度增加時,紅色部分表現下降明顯。而Attention 表現很穩定。

自然語言處理-第十五期-Attention Mechanism(二)

Attention Mechanism Function

上面闡述了Attention Mechanism的思路,但是其中有一個比較重要的點單獨拿出來講。上面講到了Score,也講到了Score的意義。但是如何計算Score,公式有哪些呢? 接下來我也與大家分享下我的理解。

我的理解,這個Score類似於“相關性”計算。 這個相關性代表著 “am” 這個單詞的Hidden State 與 Ht-1的相關性。

我們可以換個角度理解此相關性。Encoder-Decoder 其實是一個壓縮與解壓的過程。 假設我們是將“one two three" 翻譯成 “一 二 三”。那麼Encoder 按照順序壓縮“one two three”最終形成一個Hidden State;然後Decoder 輸入Hidden State, 分別解壓出“一 二 三”。

並且,解壓“一 二 三”的過程並不是同步的,而是一個Hidden State傳遞的過程。 那麼當我們翻譯“二”時,我們除了從“一”收到一個Ht-1,我們還應該收到“two”的Hidden State。那麼這個Score的相關性,也可以理解成 “壓縮中的位子” 與 “解壓的位子”的 對齊。

至於具體的公式,有以下幾種。其中第一種,就是相乘。兩個向量相乘,值越大,某種程度上代表著相關性越高。

自然語言處理-第十五期-Attention Mechanism(二)

其他疑問

有一個問題,我也想了蠻久。轉了下牛角尖。可能大家也會遇到,與大家分享下。

我的疑問是,既然是打分。不論是上述三個公式的哪一個。每個Encoder的Hidden State都能計算出一個分數。 如何保證,當我翻譯“二”的時候,我能拿到“two”的Hidden State呢? 萬一拿到“one”的Hidden State也非常可能的啊。

換句話說,我的疑問是,雖然Attention 給出了方法,但是怎麼保證真的能給出“two”的Hidden State呢?

話說這個問題我琢磨了很久。我之前又想歪了。

首先,我們討論的是機器學習的問題。那麼自然會有一個學習的過程;

其次,當Attention 給錯Hidden State時,那麼最終結果的loss function會比較大。那麼還需要通過Gradient Descent降低loss;

然後,Score 是由兩個Hidden State 相乘,所以換句話說,Score也是由RNN神經網絡中的參數影響的。那麼意味著,當Hidde State值變化時,Score也會變化;

然後,神經網絡的訓練,自然會改變RNN的參數,也自然會改變Score,經過訓練下降Loss,也代表著Score越來越準確;

最後,按照神經網絡的思路的理解,Score的出現,相當於給了神經網絡多一個參數,或者說優化的目標。 訓練的過程就是讓Score準確的過程。

所以,不應該理解成,Attention 怎麼就能夠保證 我們能拿到想要的Hidden State。而應該理解成,有了Attention,相當於給了神經網絡找到正確Hidden State 一個獎勵或者找到錯誤Hidden State一個處罰。那麼,意味著經過訓練,Score 會越來越準確。

總結與下期預告

本期與大家分享了Attention Mechanism 是如何做到將注意力放到正確的地方。當我翻譯“二”的時候,我會取到“two”的hidden state。

其實Attention 的思路很直接,就是將每個Encoder中的Hidden State 與Ht-1 打分。然後基於打分權重將其引入到Decoder中來。 那麼理想的效果是,當我需要翻譯“二”時,我不僅擁有了之前代表這個Encoder 的Hidden State,也擁有了對應“two”的Hidden State。那麼翻譯的效率自然會得到提高。

最後,之前感覺Attention Mechanism蠻難的。 但是,實際上還是可以通俗的理解的。並且我看到的代碼也不難,因為有很多大神的各種lib。哈哈

下一期,會給大家帶來Beam Search。

Beam Search+Attention+Seq2Seq 基本上就是Google牛逼的神經網絡翻譯NMT的雛形了。有點小激動的說。。。


分享到:


相關文章: