從各種注意力機制窺探深度學習在NLP中的神威

思源發表於2018-10-08

隨著層級表徵的興起,自然語言處理在很多方面都應用了深度神經網路。它們可以實現語言建模、情感分析、機器翻譯、語義解析等非常多的任務,這些序列建模任務可以使用迴圈神經網路、卷積神經網路甚至近來比較流行的 Transformer。機器之心也介紹過基於迴圈與卷積的序列建模方法,而近日一篇綜述文章進一步介紹了 NLP 中各種深度技術。由於很多基礎知識讀者可能已經比較熟悉了,因此本文只重點介紹該綜述文章討論的注意力機制。

綜述文章地址:https://arxiv.org/abs/1808.09772

作者 Antoine Tixier 表示整篇綜述筆記也是他學習過程的一部分,所以這一文章還會在 arXiv 上繼續更新。為了完成整篇文章,作者主要借鑑了各種卷積神經網路的原論文、史丹佛 CS231n 課程筆記、 Zhang 和 Wallace 關於在 NLP 中運用 CNN 的實戰指南、基於 CNN 的文字分類論文等,這些構建了該綜述文章卷積神經網路部分的主體內容。

對於迴圈神經網路,作者參考了 Denny Britz 的 RNN 教程、Chris Colah 關於理解 LSTM 單元的技術部落格、關於 GRU 單元的新穎論文、編碼器-解碼器架構和注意力機制方面的論文。最後,Yoav Golderg 的 NLP 神經網路入門和 Manning 關於神經機器翻譯的教程也都非常有幫助。

作者在完成綜述文章的同時,還根據 Keras 與 IMDB 資料集實現了很多模型演算法,這些程式碼都能在作者的 GitHub 專案中找到。

專案地址:https://github.com/Tixierae/deep_learning_NLP

整個綜述文章分為七章,我們僅會展示第七章的編碼器解碼器架構與注意力機制。其餘關於卷積神經網路和迴圈神經網路的具體內容可查閱原文章,以下展示了整篇綜述文章的目錄:

從各種注意力機制窺探深度學習在NLP中的神威

從各種注意力機制窺探深度學習在NLP中的神威

從各種注意力機制窺探深度學習在NLP中的神威

7 注意力機制

注意力機制 [1] 是在編碼器-解碼器結構下用於神經機器翻譯(NMT)[2, 24] 的一種結構,它已經非常快速地擴充套件到了其它相關任務,例如影像描述 [25] 和文字摘要 [21] 等。直觀而言,注意力機制透過允許解碼器在多個向量中關注它所需要的資訊,從而使編碼器避免了將輸入嵌入為定長向量,因此能保留更多的資訊 [1]。

如今,注意力機制在深度模型中已經非常普遍,它已經不再僅流行於編碼器-解碼器架構。尤其是一些注意力變體,它們僅作用於編碼器而解決文字分類表徵學習等問題,這些變體適用於自注意力或內部注意力。

在本文中,我們會首先討論編碼器-解碼器架構中的注意力機制,它們常用於神經機器翻譯,隨後本文會介紹自注意力與層級注意力等。

7.1 編碼器-解碼器注意力機制

7.1.1 編碼器解碼器架構

從概念上來說,如圖 10 所示編碼器希望將輸入嵌入為一個向量,而解碼器根據該向量生成一些輸出。

從各種注意力機制窺探深度學習在NLP中的神威

圖 10:編碼器-解碼器架構概覽。

神經機器翻譯中,輸入與輸出都是由單片語成的序列,即 x=(x_1, ... , x_T) 和 y=(y_1, ... , y_T),其中 x 和 y 通常表示原語句子與目標語句子。因為輸入與輸出都是序列,編碼器-解碼器架構也稱為序列到序列的模型(Seq2Seq)。因為編碼器-解碼器架構處處可微,所以它們的引數θ可以根據平行語料庫最大似然估計同時得到最佳化,這種訓練型別也稱為端到端的訓練。

從各種注意力機制窺探深度學習在NLP中的神威

如上所示,我們希望最大化的函式即正確翻譯的對數機率。

7.1.2 編碼器

原語句子可以透過 CNN 或全連線網路等某個模型編碼為一個向量,機器翻譯通常會選擇 RNN 作為編碼器。Bahdanau[1] 等人最開始使用雙向深度 RNN 網路,該模型使用兩條深度單向 RNN 構建模型,且方向相反的兩條 RNN 不會共享引數。第一個前向 RNN 從左到右處理原語句子,而第二條反向的 RNN 由右到左處理原語句子。兩個 RNN 編碼的隱向量在每一個時間步都會拼接在一起,從而作為雙向 RNN 的內部表徵:

從各種注意力機制窺探深度學習在NLP中的神威

雙向 RNN 在考慮整個句子所有資訊的情況下再編碼原語句子,它不會僅考慮當前時間步之前的單詞。因此 h_t 偏向於利用以 x_t 為中心的小區間資訊,而在單向 RNN 中,h_t 偏向於利用 x_t 的資訊。關注 x_t 周圍小區間的資訊可能會產生一些優勢,但並不是絕對性的。Luong et al. [20] 使用一般的單向深度 RNN 編碼器同樣獲得了當前最優的模型效能。在下文中,編碼器的隱藏狀態將寫為 h_t bar。

7.1.3 解碼器

編碼器可以使用不同的模型,而在 NMT 中,解碼器通常會使用深度的單向 RNN,這主要因為單向 RNN 會比較自然地適應於序列生成任務。解碼器的目標是在每一個時間步生成目標語中的一個詞,直到讀到停止詞而完成整句話的輸出。

解碼器的關鍵思想是僅使用原語句子最後時間步編碼的隱藏向量來生成目標語句子,這會強迫編碼器擬合儘可能多的原語句子資訊,並整合到最後的隱藏向量 h_T 中。因為 h_T 是一個定長的向量,因此表徵能力十分有限,很多資訊也會損失掉。另一方面,注意力機制允許解碼器在每一個時間步考慮整個編碼器的隱藏狀態序列 (h_1, ... , h_T),也就是說解碼器在生成每一個目標語單詞中能決定需要注意哪些編碼向量。

更具體而言,目標語序列 y=(y_1, ... , y_T) 中每一個詞 y_t 的生成都基於條件分佈:

從各種注意力機制窺探深度學習在NLP中的神威

其中 h_t tilde 為注意的隱藏狀態,它的計算表示式為:

從各種注意力機制窺探深度學習在NLP中的神威

h_t 為解碼器的隱藏狀態,當解碼器是深度 RNN 時,h_t 就是編碼器頂層的隱藏狀態,它提供了前面所生成目標語詞序列 {y_1, ... , y_(t-1)} 的資訊。c_t 為原語的上下文向量,而「;」則表示了拼接操作。W_s 和 W_c 矩陣為可訓練的引數,且該式子為了簡化並沒有展示偏置項。如下圖 11 所示,上下文向量 c_t 能透過兩種方式計算:全域性和區域性。本文在後面會討論這兩種方法。

從各種注意力機制窺探深度學習在NLP中的神威

圖 11:全域性注意力(左)和區域性注意力(右)。

7.1.4 全域性注意力

在全域性注意力中,上下文向量 c_t 為整個原語序列隱藏狀態 h_i bar 的加權和,即編碼器所有時間步上隱藏狀態的加權和。其中每一個隱藏狀態向量的維度為編碼器隱藏層的神經元數量,c_t 的維度與編碼器的隱藏狀態相等。校準向量α_t 的維度等於原語句子序列長度 T_x,所以它是一個變數。

從各種注意力機制窺探深度學習在NLP中的神威

校準向量(alignment vector)α_t 需要先對當前目標語隱藏狀態 h_t 和所有原語隱藏狀態 h_i bar 之間做校準運算(score()),然後再對運算結果應用 Softmax:

從各種注意力機制窺探深度學習在NLP中的神威

換而言之,α_t 為所有原語隱藏狀態上的機率分佈,即所有α_t 都在 0 和 1 之間,且加和為 1。α_t 表明原語句子中哪一個單詞對預測目標語下一個單詞最重要。score() 在理論上可以是任何對比函式,Luong et al. [20] 透過點乘試驗該函式

從各種注意力機制窺探深度學習在NLP中的神威

,而更一般的公式是透過引數矩陣與全連線層確定

從各種注意力機制窺探深度學習在NLP中的神威

。他們發現點乘在全域性注意力中有更好的效果,而全連線層在區域性注意力中有更好的效果。全域性注意力在圖 12 中有所總結:

從各種注意力機制窺探深度學習在NLP中的神威

圖 12:全域性注意力機制總結。

7.1.5 區域性注意力

每生成單個目標詞都需要考慮原語句子的所有詞在計算上是非常昂貴的,也不是必需的。為了減少這種問題,Luong et al. [20] 提出了一種僅關注固定視窗大小 2D+1 的區域性注意力機制

從各種注意力機制窺探深度學習在NLP中的神威

D 是開發者指定的超引數,位置 p_t 為視窗的中心,它可以設定為 t(單調性校準)或者由可微分機制確定(預測性校準),其中預測性校準基於前面生成的目標語單詞資訊 {y_1, ... , y_t-1},即儲存在 h_t 中的資訊:

從各種注意力機制窺探深度學習在NLP中的神威

其中 T_x 為原語句子的長度、σ為 Sigmoid 函式、v_p 和 w_p 為可訓練引數。校準權重的計算方式與全域性注意力相同(公式 19),只是加了一個均值為 p_t、標準差為 D/2 的正態分佈項:

從各種注意力機制窺探深度學習在NLP中的神威

注意

從各種注意力機制窺探深度學習在NLP中的神威

。增加的高斯分佈項會確保校準權重會隨著 i 遠離視窗中心 p_t 而衰減,即它會認為視窗中心附近的詞更重要。同樣不同於全域性注意力,α_t 的維度固定等於 2D+1,只有在視窗內的隱藏向量才會得到考慮。區域性注意力其實也可以視為全域性注意力,只不過校準權重會乘上一個截斷的正態分佈。下圖 13 總結了區域性注意力機制

從各種注意力機制窺探深度學習在NLP中的神威

圖 13:區域性注意力的總結,其帶有預測性的校準機制。

7.2 自注意力

現在假定單個 RNN 編碼器採用序列 (x_1, ..., x_T) 作為輸入,其長度為 T,該 RNN 會將輸入序列對映到隱藏向量序列 (h_1, ..., h_T)。該模型的目標與編碼器-解碼器架構中的注意力機制一樣:它不希望僅考慮最後一個隱藏向量 h_T 作為對整個序列的總結,這會引起輸入資訊的損失,它希望考慮所有時間步下的隱藏狀態,並計算一個新的上下文向量。為了這個目標,2016/2017 年提出了自注意力或內部注意力機制

如下公式 23 所示,隱藏向量 h_t 首先會傳遞到全連線層。然後校準係數 α_t 會對比全連線層的輸出 u_t 和可訓練上下文向量 u(隨機初始化),並透過 Softmax 歸一化而得出。注意力向量 s 最後可以為所有隱藏向量的加權和。從各種注意力機制窺探深度學習在NLP中的神威

score 函式理論上可以是任意校準函式,一個比較直接的方式是使用點乘 score(u_t , u) =u_t*u。上下文向量可以解釋為在平均上表徵的最優單詞。但模型面臨新的樣本時,它會使用這一知識以決定哪一個詞需要更加註意。在訓練中,模型會透過反向傳播更新上下文向量,即它會調整內部表徵以確定最優詞是什麼。

7.2.1 與 Seq2Seq 注意力的不同

自注意力中定義的上下文向量與 Seq2Seq 注意力中定義的上下文向量是不同的。在 Seq2Seq 中,上下文向量 c_t 等於加權和

從各種注意力機制窺探深度學習在NLP中的神威

,它用來計算需要注意的隱藏狀態 h_t tilde = tanh(W_c [c_t; h_t]。在自注意力中,上下文向量用來替代解碼器的隱藏狀態,因為模型沒有解碼器。所以在自注意力中,校準向量 α 表示每一個輸入單詞與平均最優單詞的相似性,而在 Seq2Seq 注意力中,α 表示每一個原語單詞對生成下一個目標語單詞的相關性。

7.2.2 層級注意力

圖 14 展示了一個很好的案例,它表示自注意力機制為什麼在實踐中非常有用。在該架構中,自注意力機制共使用了兩次:在詞層面與在句子層面。該方法因為兩個原因而非常重要,首先是它匹配文件的自然層級結構(詞——句子——文件)。其次在計算文件編碼的過程中,它允許模型首先確定哪些單詞在句子中是非常重要的,然後再確定哪個句子在文件中是非常重要的。

從各種注意力機制窺探深度學習在NLP中的神威

圖 14:層級注意力架構。

相關文章