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

ofollow,noindex" target="_blank">思源 翻譯
Antoine J.-P. Tixier 作者 思源 編譯 arXIv 選自
從各種注意力機制窺探深度學習在NLP中的神威
隨著層級表徵的興起,自然語言處理在很多方面都應用了深度神經網路。它們可以實現語言建模、情感分析、機器翻譯、語義解析等非常多的任務,這些序列建模任務可以使用迴圈神經網路、卷積神經網路甚至近來比較流行的 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
整個綜述文章分為七章,我們僅會展示第七章的編碼器解碼器架構與注意力機制。其餘關於 卷積神經網路 和迴圈神經網路的具體內容可查閱原文章,以下展示了整篇綜述文章的目錄:
7注意力機制
注意力機制[1] 是在編碼器-解碼器結構下用於 神經機器翻譯 (NMT)[2, 24] 的一種結構,它已經非常快速地擴充套件到了其它相關任務,例如影象描述 [25] 和文字摘要 [21] 等。直觀而言,注意力機制通過允許解碼器在多個向量中關注它所需要的資訊,從而使編碼器避免了將輸入嵌入為定長向量,因此能保留更多的資訊 [1]。
如今,注意力機制在深度模型中已經非常普遍,它已經不再僅流行於編碼器-解碼器架構。尤其是一些注意力變體,它們僅作用於編碼器而解決文字分類或表徵學習等問題,這些變體適用於自注意力或內部注意力。
在本文中,我們會首先討論編碼器-解碼器架構中的注意力機制,它們常用於 神經機器翻譯 ,隨後本文會介紹自注意力與層級注意力等。
7.1 編碼器-解碼器注意力機制
7.1.1 編碼器解碼器架構
從概念上來說,如圖 10 所示編碼器希望將輸入嵌入為一個向量,而解碼器根據該向量生成一些輸出。
圖 10:編碼器-解碼器架構概覽。
在 神經機器翻譯 中,輸入與輸出都是由單片語成的序列,即 x=(x_1, ... , x_T) 和 y=(y_1, ... , y_T),其中 x 和 y 通常表示原語句子與目標語句子。因為輸入與輸出都是序列,編碼器-解碼器架構也稱為序列到序列的模型(Seq2Seq)。因為編碼器-解碼器架構處處可微,所以它們的引數θ可以根據平行語料庫和最大似然估計同時得到優化,這種訓練型別也稱為端到端的訓練。
如上所示,我們希望最大化的函式即正確翻譯的對數概率。
7.1.2 編碼器
原語句子可以通過 CNN 或全連線網路等某個模型編碼為一個向量,機器翻譯通常會選擇 RNN 作為編碼器。Bahdanau[1] 等人最開始使用雙向深度 RNN 網路,該模型使用兩條深度單向 RNN 構建模型,且方向相反的兩條 RNN 不會共享引數。第一個前向 RNN 從左到右處理原語句子,而第二條反向的 RNN 由右到左處理原語句子。兩個 RNN 編碼的隱向量在每一個時間步都會拼接在一起,從而作為雙向 RNN 的內部表徵:
雙向 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 的生成都基於條件分佈:
其中 h_t tilde 為注意的隱藏狀態,它的計算表示式為:
h_t 為解碼器的隱藏狀態,當解碼器是深度 RNN 時,h_t 就是編碼器頂層的隱藏狀態,它提供了前面所生成目標語詞序列 {y_1, ... , y_(t-1)} 的資訊。c_t 為原語的上下文向量,而「;」則表示了拼接操作。W_s 和 W_c 矩陣為可訓練的引數,且該式子為了簡化並沒有展示偏置項。如下圖 11 所示,上下文向量 c_t 能通過兩種方式計算:全域性和區域性。本文在後面會討論這兩種方法。
圖 11:全域性注意力(左)和區域性注意力(右)。
7.1.4 全域性注意力
在全域性注意力中,上下文向量 c_t 為整個原語序列隱藏狀態 h_i bar 的加權和,即編碼器所有時間步上隱藏狀態的加權和。其中每一個隱藏狀態向量的維度為編碼器隱藏層的神經元數量,c_t 的維度與編碼器的隱藏狀態相等。校準向量α_t 的維度等於原語句子序列長度 T_x,所以它是一個變數。
校準向量(alignment vector)α_t 需要先對當前目標語隱藏狀態 h_t 和所有原語隱藏狀態 h_i bar 之間做校準運算(score()),然後再對運算結果應用 Softmax:
換而言之,α_t 為所有原語隱藏狀態上的概率分佈,即所有α_t 都在 0 和 1 之間,且加和為 1。α_t 表明原語句子中哪一個單詞對預測目標語下一個單詞最重要。score() 在理論上可以是任何對比函式,Luong et al. [20] 通過點乘試驗該函式
,而更一般的公式是通過引數矩陣與全連線層確定
。他們發現點乘在全域性注意力中有更好的效果,而全連線層在區域性注意力中有更好的效果。全域性注意力在圖 12 中有所總結:
圖 12:全域性注意力機制總結。
7.1.5 區域性注意力
每生成單個目標詞都需要考慮原語句子的所有詞在計算上是非常昂貴的,也不是必需的。為了減少這種問題,Luong et al. [20] 提出了一種僅關注固定視窗大小 2D+1 的區域性注意力機制:
D 是開發者指定的超引數,位置 p_t 為視窗的中心,它可以設定為 t(單調性校準)或者由可微分機制確定(預測性校準),其中預測性校準基於前面生成的目標語單詞資訊 {y_1, ... , y_t-1},即儲存在 h_t 中的資訊:
其中 T_x 為原語句子的長度、σ為 Sigmoid 函式、v_p 和 w_p 為可訓練引數。校準權重的計算方式與全域性注意力相同(公式 19),只是加了一個均值為 p_t、標準差為 D/2 的正態分佈項:
注意
。增加的高斯分佈項會確保校準權重會隨著 i 遠離視窗中心 p_t 而衰減,即它會認為視窗中心附近的詞更重要。同樣不同於全域性注意力,α_t 的維度固定等於 2D+1,只有在視窗內的隱藏向量才會得到考慮。區域性注意力其實也可以視為全域性注意力,只不過校準權重會乘上一個截斷的正態分佈。下圖 13 總結了區域性注意力機制:
圖 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 最後可以為所有隱藏向量的加權和。
score 函式理論上可以是任意校準函式,一個比較直接的方式是使用點乘 score(u_t , u) =u_t*u。上下文向量可以解釋為在平均上表徵的最優單詞。但模型面臨新的樣本時,它會使用這一知識以決定哪一個詞需要更加註意。在訓練中,模型會通過反向傳播更新上下文向量,即它會調整內部表徵以確定最優詞是什麼。
7.2.1 與Seq2Seq注意力的不同
自注意力中定義的上下文向量與Seq2Seq注意力中定義的上下文向量是不同的。在Seq2Seq中,上下文向量 c_t 等於加權和
,它用來計算需要注意的隱藏狀態 h_t tilde = tanh(W_c [c_t; h_t]。在自注意力中,上下文向量用來替代解碼器的隱藏狀態,因為模型沒有解碼器。所以在自注意力中,校準向量 α 表示每一個輸入單詞與平均最優單詞的相似性,而在Seq2Seq注意力中,α 表示每一個原語單詞對生成下一個目標語單詞的相關性。
7.2.2 層級注意力
圖 14 展示了一個很好的案例,它表示自注意力機制為什麼在實踐中非常有用。在該架構中,自注意力機制共使用了兩次:在詞層面與在句子層面。該方法因為兩個原因而非常重要,首先是它匹配文件的自然層級結構(詞——句子——文件)。其次在計算文件編碼的過程中,它允許模型首先確定哪些單詞在句子中是非常重要的,然後再確定哪個句子在文件中是非常重要的。
圖 14:層級注意力架構。
理論 自然語言處理 深度學習 注意力機制
相關資料
Attention mechanism
我們可以粗略地把神經注意機制類比成一個可以專注於輸入內容的某一子集(或特徵)的神經網路. 注意力機制最早是由 DeepMind 為影象分類提出的,這讓「神經網路在執行預測任務時可以更多關注輸入中的相關部分,更少關注不相關的部分」。當解碼器生成一個用於構成目標句子的詞時,源句子中僅有少部分是相關的;因此,可以應用一個基於內容的注意力機制來根據源句子動態地生成一個(加權的)語境向量(context vector), 然後網路會根據這個語境向量而不是某個固定長度的向量來預測詞。
來源:機器之心
Neural Network
(人工)神經網路是一種起源於 20 世紀 50 年代的監督式機器學習模型,那時候研究者構想了「感知器(perceptron)」的想法。這一領域的研究者通常被稱為「聯結主義者(Connectionist)」,因為這種模型模擬了人腦的功能。神經網路模型通常是通過反向傳播演算法應用梯度下降訓練的。目前神經網路有兩大主要型別,它們都是前饋神經網路:卷積神經網路(CNN)和迴圈神經網路(RNN),其中 RNN 又包含長短期記憶(LSTM)、門控迴圈單元(GRU)等等。深度學習是一種主要應用於神經網路幫助其取得更好結果的技術。儘管神經網路主要用於監督學習,但也有一些為無監督學習設計的變體,比如自動編碼器和生成對抗網路(GAN)。
來源:機器之心
Neural Machine Translation
2013 年,Nal Kalchbrenner 和 Phil Blunsom 提出了一種用於機器翻譯的新型端到端編碼器-解碼器結構 [4]。該模型可以使用卷積神經網路(CNN)將給定的一段源文字編碼成一個連續的向量,然後再使用迴圈神經網路(RNN)作為解碼器將該狀態向量轉換成目標語言。他們的研究成果可以說是神經機器翻譯(NMT)的誕生;神經機器翻譯是一種使用深度學習神經網路獲取自然語言之間的對映關係的方法。NMT 的非線性對映不同於線性的 SMT 模型,而且是使用了連線編碼器和解碼器的狀態向量來描述語義的等價關係。此外,RNN 應該還能得到無限長句子背後的資訊,從而解決所謂的「長距離重新排序(long distance reordering)」問題。
來源:機器之心
Convolutional neural network
卷積神經網路(Convolutional Neural Network, CNN)是一種前饋神經網路,它的人工神經元可以響應一部分覆蓋範圍內的周圍單元,對於大型影象處理有出色表現。卷積神經網路由一個或多個卷積層和頂端的全連通層(對應經典的神經網路)組成,同時也包括關聯權重和池化層(pooling layer)。這一結構使得卷積神經網路能夠利用輸入資料的二維結構。與其他深度學習結構相比,卷積神經網路在影象和語音識別方面能夠給出更好的結果。這一模型也可以使用反向傳播演算法進行訓練。相比較其他深度、前饋神經網路,卷積神經網路需要考量的引數更少,使之成為一種頗具吸引力的深度學習結構。 卷積網路是一種專門用於處理具有已知的、網格狀拓撲的資料的神經網路。例如時間序列資料,它可以被認為是以一定時間間隔取樣的一維網格,又如影象資料,其可以被認為是二維畫素網格。
來源:Goodfellow, I.; Bengio Y.; Courville A. (2016). Deep Learning. MIT Press. 維基百科
Hyperparameter
在機器學習中,超引數是在學習過程開始之前設定其值的引數。 相反,其他引數的值是通過訓練得出的。 不同的模型訓練演算法需要不同的超引數,一些簡單的演算法(如普通最小二乘迴歸)不需要。 給定這些超引數,訓練演算法從資料中學習引數。相同種類的機器學習模型可能需要不同的超引數來適應不同的資料模式,並且必須對其進行調整以便模型能夠最優地解決機器學習問題。 在實際應用中一般需要對超引數進行優化,以找到一個超引數元組(tuple),由這些超引數元組形成一個最優化模型,該模型可以將在給定的獨立資料上預定義的損失函式最小化。
來源: Wikipedia
Gaussian distribution
正態分佈是一個非常常見的連續概率分佈。由於中心極限定理(Central Limit Theorem)的廣泛應用,正態分佈在統計學上非常重要。中心極限定理表明,由一組獨立同分布,並且具有有限的數學期望和方差的隨機變數X1,X2,X3,...Xn構成的平均隨機變數Y近似的服從正態分佈當n趨近於無窮。另外眾多物理計量是由許多獨立隨機過程的和構成,因而往往也具有正態分佈。
來源: Wikipedia
Long-Short Term Memory
長短期記憶(Long Short-Term Memory) 是具有長期記憶能力的一種時間遞迴神經網路(Recurrent Neural Network)。 其網路結構含有一個或多個具有可遺忘和記憶功能的單元組成。它在1997年被提出用於解決傳統RNN(Recurrent Neural Network) 的隨時間反向傳播中權重消失的問題(vanishing gradient problem over backpropagation-through-time),重要組成部分包括Forget Gate, Input Gate, 和 Output Gate, 分別負責決定當前輸入是否被採納,是否被長期記憶以及決定在記憶中的輸入是否在當前被輸出。Gated Recurrent Unit 是 LSTM 眾多版本中典型的一個。因為它具有記憶性的功能,LSTM經常被用在具有時間序列特性的資料和場景中。
Maximum Likelihood Estimation
極大似然估計是統計學中用來估計概率模型引數的一種方法
來源: R. A. Fisher. (1922). On the Mathematical Foundations of Theoretical Statistics
neurons
(人工)神經元是一個類比於生物神經元的數學計算模型,是神經網路的基本組成單元。 對於生物神經網路,每個神經元與其他神經元相連,當它“興奮”時會向相連的神經元傳送化學物質,從而改變這些神經元的電位;神經元的“興奮”由其電位決定,當它的電位超過一個“閾值”(threshold)便會被啟用,亦即“興奮”。 目前最常見的神經元模型是基於1943年 Warren McCulloch 和 Walter Pitts提出的“M-P 神經元模型”。 在這個模型中,神經元通過帶權重的連線接處理來自n個其他神經元的輸入訊號,其總輸入值將與神經元的閾值進行比較,最後通過“啟用函式”(activation function)產生神經元的輸出。
來源: Overview of Artificial Neural Networks and its Applications. (2018). medium.com.
Machine translation
機器翻譯(MT)是利用機器的力量「自動將一種自然語言(源語言)的文字翻譯成另一種語言(目標語言)」。機器翻譯方法通常可分成三大類:基於規則的機器翻譯(RBMT)、統計機器翻譯(SMT)和神經機器翻譯(NMT)。
來源:機器之心
Representation learning
在機器學習領域,表徵學習(或特徵學習)是一種將原始資料轉換成為能夠被機器學習有效開發的一種技術的集合。在特徵學習演算法出現之前,機器學習研究人員需要利用手動特徵工程(manual feature learning)等技術從原始資料的領域知識(domain knowledge)建立特徵,然後再部署相關的機器學習演算法。雖然手動特徵工程對於應用機器學習很有效,但它同時也是很困難、很昂貴、很耗時、並依賴於強大專業知識。特徵學習彌補了這一點,它使得機器不僅能學習到資料的特徵,並能利用這些特徵來完成一個具體的任務。
來源: Wikipedia
text classification
該技術可被用於理解、組織和分類結構化或非結構化文字文件。文字挖掘所使用的模型有詞袋(BOW)模型、語言模型(ngram)和主題模型。隱馬爾可夫模型通常用於詞性標註(POS)。其涵蓋的主要任務有句法分析、情緒分析和垃圾資訊檢測。
來源:機器之心
Seq2Seq

機器之心編輯
推薦文章