Attention如何在Encoder-Decoder循環神經網絡中見效(原理篇)

   轉眼間來到了二年級下學期,馬上就要面臨找工作的巨大壓力。起風了,唯有努力生存~願努力可以有所成效。

    這一篇想要講一講Attention機制。文章框架主要翻譯自How Does Attention Work in Encoder-Decoder Recurrent Neural Networks,也參考了一些筆者覺得比較不錯的博客。


    Attention(注意力機制)是爲了提高Encoder-Decoder RNN在機器翻譯中的性能而開發的一種機制。

    在本教程中,您將發現Encoder-Decoder模型的注意力機制。

    完成本教程後,您將知道:

  • 機器翻譯的Encoder-Decoder模型和注意力機制。
  • 如何逐步實施注意裏機制。
  • 注意力機制的應用程序和擴展。

讓我們開始吧。

0 教程概述

    本教程分爲四個部分;它們是:

  1. Encoder-Decoder模型
  2. 注意力模型(Attention)
  3. Attention工作實例
  4. Attention的擴展

 1 Encoder-Decoder模型

    兩篇論文介紹了循環神經網絡的Encoder-Decoder模型。兩者都開發了一種技術來解決機器翻譯中輸入序列長度與輸出序列不同的序列到序列的本質。

    Ilya Sutskever等人在使用LSTMs的論文“Sequence to Sequence Learning with Neural Networks” 中就是這樣做的。

    Kyunghyun Cho等人在 “Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation“一文中就做到了這一點。這項工作,和一些相同的作者(Bahdanau, Cho和Bengio)後來開發了他們的特定模型來開發一個注意力模型。因此,我們將快速瀏覽一下本文所描述的Encoder-Decoder模型。

    從高層次上講,該模型由兩個子模型組成:Encoder和Decoder。

  • Encoder:負責單步執行輸入時間步驟,並將整個序列編碼爲一個固定長度的向量,稱爲上下文向量。
  • Decoder:負責在讀取上下文向量的同時逐步執行輸出時間步長。

圖1 Encoder-Decoder循環神經網絡模型

    提出了一種新的神經網絡結構,該結構能夠將變長序列編碼爲定長向量表示,並將給定的定長向量表示解碼爲變長序列。

— Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation, 2014.

    該模型的關鍵是整個模型,包括Encoder和Decoder,是端到端的訓練,而不是單獨訓練元素。該模型具有通用性,可以採用不同的RNN模型作爲Encoder和Decoder。   

    作者沒有使用流行的長短時記憶(LSTM)神經網絡,而是開發並使用了他們自己的簡單類型的神經網絡,後來被稱爲門控遞歸單元(GRU)。

    此外,與Sutskever等人的模型不同,Decoder從上一個時間步長的輸出被作爲輸入輸入解碼下一個輸出時間步。您可以在上面的圖像中看到這一點,其中輸出y2使用上下文向量(C)、解碼y1傳遞的隱藏狀態以及輸出y1。

    …y(t)和h(i)也取決於y(t - 1)和輸入序列的總結c。

— Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation, 2014 

     爲更加直觀地解釋,這裏老鼠屎引用一下完全圖解RNN、RNN變體、Seq2Seq、Attention機制裏面的解釋:

    RNN最重要的一個變種:N vs M。這種結構又叫Encoder-Decoder模型,也可以稱之爲Seq2Seq模型。

    原始的N vs N RNN要求序列等長,然而我們遇到的大部分問題序列都是不等長的,如機器翻譯中,源語言和目標語言的句子往往並沒有相同的長度。爲此,Encoder-Decoder結構先將輸入數據編碼成一個上下文向量c,拿到c之後,就用另一個RNN網絡對其進行解碼,這部分RNN網絡被稱爲Decoder。具體做法就是將c當做之前的初始狀態h0輸入到Decoder中:

圖2 Encoder-Decoder循環神經網絡模型其他表示方式

    所以,在老鼠屎的理解當中,Encoder-Decoder是解決輸入和輸出不等長的問題(這裏不一定完全正確,歡迎大神勘誤)。

2 注意力機制

2.1 注意力機制的引入

     老鼠屎認爲,引入注意力機制有兩個原因:   

  1. 這裏插一點老鼠屎自己的理解。如圖2所示,在Encoder-Decoder結構中,Encoder把所有的輸入序列都編碼成一個統一的語義特徵c再解碼,這使得不論是生成y1,y2還是y3,其輸入對生成某個目標yi來說影響力都是相同的,這是爲何說這個模型沒有體現出注意力的緣由。這類似於人類看到眼前的畫面,但是眼中卻沒有注意焦點一樣。
  2. 引用完全圖解RNN、RNN變體、Seq2Seq、Attention機制c中必須包含原始序列中的所有信息,它的長度就成了限制模型性能的瓶頸。如機器翻譯問題,當要翻譯的句子較長時,一個c可能存不下那麼多信息,就會造成翻譯精度的下。Attention機制通過在每個時間輸入不同的c來解決這個問題。

    爲了更加直觀地展示,這裏引用一下Attention機制詳解(一)——Seq2Seq中的Attention裏面的介紹:  

    爲了解決由長序列到定長向量轉化而造成的信息損失的瓶頸,Attention注意力機制被引入了。Attention機制跟人類翻譯文章時候的思路有些類似,即將注意力關注於我們翻譯部分對應的上下文。同樣的,Attention模型中,當我們翻譯當前詞語時,我們會尋找源語句中相對應的幾個詞語,並結合之前的已經翻譯的部分作出相應的翻譯,如下圖所示,當我們翻譯“knowledge”時,只需將注意力放在源句中“知識”的部分,當翻譯“power”時,只需將注意力集中在"力量“。這樣,當我們decoder預測目標翻譯的時候就可以看到encoder的所有信息,而不僅侷限於原來模型中定長的隱藏向量,並且不會喪失長程的信息。

圖3 爲什麼引入注意力機制

2.2 什麼是注意力機制

    Dzmitry Bahdanau等人在他們的論文 “Neural Machine Translation by Jointly Learning to Align and Translate”中提出了注意力機制,這是他們之前在Encoder-Decoder模型上工作的自然延伸。

    針對Encoder-Decoder模型將輸入序列編碼爲一個固定長度向量的侷限性,提出了一種解決方案。在解碼長序列時,這個問題被認爲是一個更大的問題。

    這種Encoder-Decoder方法的一個潛在問題是,神經網絡需要能夠將源語句的所有必要信息壓縮成一個固定長度的向量。這可能會使神經網絡難以處理長句,特別是那些比訓練語料庫中的長句。

— Neural Machine Translation by Jointly Learning to Align and Translate, 2015.

     注意力機制是一種對齊和翻譯的方法。

    對齊是機器翻譯中的問題,它識別輸入序列的哪些部分與輸出中的每個單詞相關,而翻譯是使用相關信息選擇適當輸出的過程。

    介紹了一種擴展的編碼器-解碼器模型,該模型學會了聯合對齊和翻譯。每次提出的模型在翻譯中生成一個單詞時,它(軟)搜索源句中最相關信息集中的一組位置。然後,該模型根據與這些源位置相關的上下文向量和所有之前生成的目標單詞預測目標單詞。

— Neural Machine Translation by Jointly Learning to Align and Translate, 2015.

    與將輸入序列編碼爲單個固定的上下文向量不同,注意力模型開發了一個上下文向量,該上下文向量針對每個輸出時間步驟進行過濾。

Example of Attention

圖4 Attention Mechanism模塊圖解

    在該模型中,定義了一個條件概率:

    其中,si是decoder中RNN在在i時刻的隱狀態,如圖4中所示,其計算公式爲:

    這裏的背景向量ci的計算方式,與傳統的Seq2Seq模型直接累加的計算方式不一樣,這裏的ci是一個權重化(Weighted)之後的值,其表達式如公式5所示:

    其中,i表示encoder端的第i個詞,hj表示encoder端的第j和詞的隱向量,aij表示encoder端的第j個詞與decoder端的第i個詞之間的權值,表示源端第j個詞對目標端第i個詞的影響程度,aij的計算公式如公式6所示:

    在公式6中,aij是一個softmax模型輸出,概率值的和爲1。eij表示一個對齊模型,用於衡量encoder端的位置j個詞,對於decoder端的位置i個詞的對齊程度(影響程度),換句話說:decoder端生成位置i的詞時,有多少程度受encoder端的位置j的詞影響。對齊模型eij的計算方式有很多種,不同的計算方式,代表不同的Attention模型,最簡單且最常用的的對齊模型是dot product乘積矩陣,即把target端的輸出隱狀態ht與source端的輸出隱狀態進行矩陣乘。常見的對齊計算方式如下:

其中,Score(ht,hs) = aij表示源端與目標單單詞對齊程度。可見,常見的對齊關係計算方式有,點乘(Dot product),權值網絡映射(General)和concat映射幾種方式。

2.3 注意力機制的本質思想    

    這裏參考了知乎上的一個回答“目前主流的attention方法都有哪些?

    如果把Attention機制從上文講述例子中的Encoder-Decoder框架中剝離,並進一步做抽象,可以更容易看懂Attention機制的本質思想。

圖5 Attention機制的本質思想

    我們可以這樣來看待Attention機制(參考圖5):將Source中的構成元素想象成是由一系列的<Key,Value>數據對構成,此時給定Target中的某個元素Query,通過計算Query和各個Key的相似性或者相關性,得到每個Key對應Value的權重係數,然後對Value進行加權求和,即得到了最終的Attention數值。所以本質上Attention機制是對Source中元素的Value值進行加權求和,而Query和Key用來計算對應Value的權重係數。即可以將其本質思想改寫爲如下公式:

    其中,Lx=||Source||代表Source的長度,公式含義即如上所述。上文所舉的機器翻譯的例子裏,因爲在計算Attention的過程中,Source中的Key和Value合二爲一,指向的是同一個東西,也即輸入句子中每個單詞對應的語義編碼,所以可能不容易看出這種能夠體現本質思想的結構。

    當然,從概念上理解,把Attention仍然理解爲從大量信息中有選擇地篩選出少量重要信息並聚焦到這些重要信息上,忽略大多不重要的信息,這種思路仍然成立。聚焦的過程體現在權重係數的計算上,權重越大越聚焦於其對應的Value值上,即權重代表了信息的重要性,而Value是其對應的信息。

    從圖5可以引出另外一種理解,也可以將Attention機制看作一種軟尋址(Soft Addressing):Source可以看作存儲器內存儲的內容,元素由地址Key和值Value組成,當前有個Key=Query的查詢,目的是取出存儲器中對應的Value值,即Attention數值。通過Query和存儲器內元素Key的地址進行相似性比較來尋址,之所以說是軟尋址,指的不像一般尋址只從存儲內容裏面找出一條內容,而是可能從每個Key地址都會取出內容,取出內容的重要性根據Query和Key的相似性來決定,之後對Value進行加權求和,這樣就可以取出最終的Value值,也即Attention值。所以不少研究人員將Attention機制看作軟尋址的一種特例,這也是非常有道理的。

    至於Attention機制的具體計算過程,如果對目前大多數方法進行抽象的話,可以將其歸納爲兩個過程:第一個過程是根據Query和Key計算權重係數,第二個過程根據權重係數對Value進行加權求和。而第一個過程又可以細分爲兩個階段:第一個階段根據Query和Key計算兩者的相似性或者相關性;第二個階段對第一階段的原始分值進行歸一化處理;這樣,可以將Attention的計算過程抽象爲如圖6展示的三個階段。

圖6 三階段計算Attention過程

    在第一個階段,可以引入不同的函數和計算機制,根據Query和某個Key_i,計算兩者的相似性或者相關性,最常見的方法包括:求兩者的向量點積、求兩者的向量Cosine相似性或者通過再引入額外的神經網絡來求值,即如下方式:

    第一階段產生的分值根據具體產生的方法不同其數值取值範圍也不一樣,第二階段引入類似SoftMax的計算方式對第一階段的得分進行數值轉換,一方面可以進行歸一化,將原始計算分值整理成所有元素權重之和爲1的概率分佈;另一方面也可以通過SoftMax的內在機制更加突出重要元素的權重。即一般採用如下公式計算:

    第二階段的計算結果a_i即爲value_i對應的權重係數,然後進行加權求和即可得到Attention數值:

    通過如上三個階段的計算,即可求出針對Query的Attention數值,目前絕大多數具體的注意力機制計算方法都符合上述的三階段抽象計算過程。 

 3 Attention工作實例

    在本節中,我們將通過一個小的工作示例使注意具體化。具體地說,我們將使用未向量化的項逐步完成計算。這將爲您提供足夠詳細的理解,您可以將注意力添加到您自己的EncoderDecoder實現中。

    這個工作的例子分爲以下6個部分:

  1. 問題
  2. Encoding
  3. 對齊
  4. 權重
  5. 上下文向量
  6. Decoder

3.1 問題

    該問題是一個簡單的序列到序列預測問題。輸入時間有三個步驟:

x1, x2, x3

    模型需要預測1個時間步長: 

y1

     在本例中,我們將忽略Encoder和Decoder中使用的RNN類型,並忽略雙向輸入層的使用。這些元素對於理解解碼器中注意力的計算並不重要。

3.2 Encoding

    在EncoderDecoder模型中,輸入將被編碼爲一個固定長度的向量。這是最後一個時間步的Encoder模型的輸出。 

h1 = Encoder(x1, x2, x3)

     注意模型要求對每個輸入時間步驟的編碼器的輸出進行訪問。本文將這些步驟稱爲每個時間步驟的“註釋”。在這種情況下:

h1, h2, h3 = Encoder(x1, x2, x3)

3.3 對齊

    Decoder每次輸出一個值,在最終輸出當前輸出時間步長的預測(y)之前,該值可能會傳遞到更多的層。

    對齊模型(e)對每個編碼輸入(h)與解碼器當前輸出的匹配程度進行評分。分數的計算需要解碼器輸出前一個輸出時間步驟的輸出,例如s(t-1)。當對解碼器的第一個輸出進行評分時,該值爲0。評分是使用函數a()執行的。我們可以對第一個輸出時間步的每個批註(h)進行如下評分:

e11 = a(0, h1)
e12 = a(0, h2)
e13 = a(0, h3)

    我們對這些分數使用兩個下標,例如e11,其中第一個“1”表示輸出時間步長,第二個“1”表示輸入時間步長。

    我們可以想象,如果我們有一個序列到序列的問題,有兩個輸出時間步長,那麼稍後我們可以對第二個時間步長的註釋進行如下的評分(假設我們已經計算了s1):

e21 = a(s1, h1)
e22 = a(s1, h2)
e23 = a(s1, h3)

    本文將函數a()稱爲對齊模型,並將其實現爲一個前饋神經網絡。這是一個傳統的單層網絡,其中每個輸入(s(t-1)和h1、h2、h3)加權,使用雙曲正切(tanh)傳遞函數,輸出也加權。

3.4 權重

    接下來,使用softmax函數對對齊分數進行標準化。分數的標準化使它們可以像概率一樣處理,表明每個編碼的輸入時間步(註釋)與當前輸出時間步相關的可能性。這些標準化的分數稱爲註釋權重。例如,給定計算的對齊分數(e),我們可以計算softmax標註權(a),如下:

a11 = exp(e11) / (exp(e11) + exp(e12) + exp(e13))
a12 = exp(e12) / (exp(e11) + exp(e12) + exp(e13))
a13 = exp(e13) / (exp(e11) + exp(e12) + exp(e13))

     如果我們有兩個輸出時間步長,則第二個輸出時間步長的標註權值計算如下:

a21 = exp(e21) / (exp(e21) + exp(e22) + exp(e23))
a22 = exp(e22) / (exp(e21) + exp(e22) + exp(e23))
a23 = exp(e23) / (exp(e21) + exp(e22) + exp(e23))

3.5 上下文向量

    接下來,每個註釋(h)乘以註釋權重(a),生成一個新的參與上下文向量,從中可以解碼當前輸出的時間步長。爲了簡單起見,我們只有一個輸出時間步長,所以我們可以計算單個元素上下文向量如下(爲了可讀性,我們用括號括起來):

c1 = (a11 * h1) + (a12 * h2) + (a13 * h3)

    上下文向量是註釋和標準化對齊分數的加權和。如果我們有兩個輸出時間步長,上下文向量將由兩個元素[c1, c2]組成,計算如下:

c1 = a11 * h1 + a12 * h2 + a13 * h3
c2 = a21 * h1 + a22 * h2 + a23 * h3

 3.6 Decode

    然後根據Encoder-Decoder模型執行解碼,儘管在本例中使用了當前時間步長的參與上下文向量。本文將Decoder的輸出稱爲隱狀態。

s1 = Decoder(c1)

     在最終退出模型作爲時間步長的預測(y1)之前,這可能被輸入到其他層中。

4 擴展關注

    本節將介紹Bahdanau等人的注意機制的其他一些應用。

4.1 Hard and Soft Attention

    在2015年發表的論文“Show, Attend and Tell: Neural Image Caption Generation with Visual Attention“中,Kelvin Xu等人將注意力應用於圖像數據,使用卷積神經網絡作爲特徵提取器對圖像數據進行配圖。

    他們開發了兩種注意機制,一種稱爲“Soft Attention”,它類似於上面描述的帶有加權上下文向量的注意,另一種稱爲“Hard Attention”,即對每個單詞的上下文向量中的元素做出清晰的決策。

    他們還提出了雙重注意力機制,即注意力集中在圖像的特定部分。

4.2刪除以前的隱藏狀態

    該機制的一些應用程序對方法進行了簡化,以便從註釋的評分中去掉最後一個輸出時間步驟(s(t-1))的隱藏狀態(步驟3)。
兩個例子是:

    這樣做的結果是,沒有爲模型提供先前解碼輸出的概念,這是爲了幫助對齊。

    這一點已在文件所列的方程式中指出,目前尚不清楚這項任務是有意改變模型,還是隻是方程式中的一項遺漏。在這兩篇論文中都沒有看到關於刪除這個術語的討論。

4.3 研究之前的隱藏狀態

    Minh-Thang Luong等人在2015年發表的論文“Effective Approaches to Attention-based Neural Machine Translation”中明確重組了在標註評分時使用先前解碼器隱藏狀態的方法。Also, see the presentation of the paper and associated Matlab code.

    他們開發了一個框架來對比不同的標註方法。它們的框架調用並顯式地排除了註釋評分中先前隱藏的狀態。

    相反,它們接受前面的注意上下文向量並將其作爲輸入傳遞給解碼器。其目的是讓解碼器瞭解過去的對齊決策。

    我們提出了一種輸入-輸入方法,其中注意向量ht在下次步驟中與輸入連接起來[…]。擁有這樣的連接的效果是雙重的:(a)我們希望讓模型充分意識到之前的對齊選擇,(b)我們創建了一個非常深的網絡,橫向和縱向都覆蓋.

— Effective Approaches to Attention-based Neural Machine Translation, 2015.

    下面是本文采用的這種方法的圖片。請注意,虛線清楚地顯示了參與隱藏狀態輸出(ht)的解碼器的使用情況,該輸出將在下一個時間步爲解碼器提供輸入。

Feeding Hidden State as Input to Decoder

    他們還開發了“全局”注意力與“局部”注意力的對比,局部注意力是學習固定大小窗口的方法的一種修正,該窗口對每個輸出時間步驟的注意力向量進行強制。它被看作是徐等人提出的一種更簡單的“集中注意力”的方法。

    Global attention的缺點是,它必須關注每個目標單詞的源端上的所有單詞,這是昂貴的,可能會使翻譯較長的序列變得不切實際,例如段落或文檔。爲了解決這一不足,我們提出了一種局部注意機制,它選擇只關注每個目標單詞源位置的一小部分。

— Effective Approaches to Attention-based Neural Machine Translation, 2015.

    通過對不同標註評分功能的整體注意力和局部注意力的分析,發現局部力注意在翻譯任務中具有更好的效果。

5 拓展閱讀

如果您想深入瞭解這個主題,本節將提供更多的參考資料。

Encoder-Decoder Papers

Attention Papers

More on Attention

參考資料:

    文中已列出,然而再次感謝!

  1. How Does Attention Work in Encoder-Decoder Recurrent Neural Networks
  2. 完全圖解RNN、RNN變體、Seq2Seq、Attention機制
  3. Attention機制詳解(一)——Seq2Seq中的Attention
  4. 目前主流的attention方法都有哪些?
  5. 真正的完全圖解Seq2Seq Attention模型
  6. 模型彙總24 - 深度學習中Attention Mechanism詳細介紹:原理、分類及應用
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章