萬字長文概述NLP中的深度學習技術

萬字長文概述NLP中的深度學習技術

萬字長文概述NLP中的深度學習技術

萬字長文概述NLP中的深度學習技術

轉自| 機器之心

01

簡介

自然語言處理(NLP)是指對人類語言進行自動分析和表示的計算技術,這種計算技術由一系列理論驅動。NLP 研究從打孔紙帶和批處理的時代就開始發展,那時分析一個句子需要多達 7 分鐘的時間。到了現在谷歌等的時代,數百萬網頁可以在不到一秒鐘內處理完成。NLP 使計算機能夠執行大量自然語言相關的任務,

如句子結構解析、詞性標註、機器翻譯和對話系統等。

深度學習架構和算法為計算機視覺與傳統模式識別領域帶來了巨大進展。跟隨這一趨勢,現在的 NLP 研究越來越多地使用新的深度學習方法(見圖 1)。之前數十年,用於解決 NLP 問題的機器學習方法一般都基於淺層模型(如 SVM 和 logistic 迴歸),這些模型都在非常高維和稀疏的特徵(one-hot encoding)上訓練得到。而近年來,基於稠密向量表徵的神經網絡在多種 NLP 任務上得到了不錯結果。這一趨勢取決了詞嵌入和深度學習方法的成功。深度學習使多級自動特徵表徵學習成為可能。而基於傳統機器學習的 NLP 系統嚴重依賴手動製作的特徵,它們及其耗時,且通常並不完備。


萬字長文概述NLP中的深度學習技術


圖 1:過去 6 年 ACL、EMNLP、EACL、NAACL 會議上深度學習論文的比例(長論文)。

Ronan Collobert 等人 2011 年的研究《Natural Language Processing (Almost) from Scratch》展示了在多個 NLP 任務上優於當時最優方法的簡單深度學習框架,比如命名實體識別(NER)、語義角色標註(SRL)和詞性標註。之後,研究人員提出了大量基於複雜深度學習的算法,用於解決有難度的 NLP 任務。本文綜述了用於自然語言任務的主要深度學習模型和方法,如卷積神經網絡、循環神經網絡和遞歸神經網絡。本文還討論了記憶增強策略、注意力機制,以及如何使用無監督模型、強化學習方法和深度生成模型解決語言任務。

02

分佈式表徵

基於統計的 NLP 已經成為建模複雜自然語言任務的首要選擇。然而在它剛興起的時候,基於統計的 NLP 經常遭受到維度災難,尤其是在學習語言模型的聯合概率函數時。這為構建能在低維空間中學習分佈式詞表徵的方法提供了動力,這種想法也就導致了詞嵌入方法的誕生。

第一種在低維空間中學習密集型的分佈式詞表徵是 Yoshua Bengio 等人在 2003 年提出的 A Neural Probabilistic Language Model,這是一種基於學習而對抗維度災難的優美想法。

詞嵌入

如下圖 2 所示,分佈式向量或詞嵌入向量基本上遵循分佈式假設,即具有相似語義的詞傾向於具有相似的上下文詞,因此這些詞向量嘗試捕獲鄰近詞的特徵。分佈式詞向量的主要優點在於它們能捕獲單詞之間的相似性,使用餘弦相似性等度量方法評估詞向量之間的相似性也是可能的。

詞嵌入常用於深度學習中的第一個數據預處理階段,一般我們可以在大型無標註文本語料庫中最優化損失函數,從而獲得預訓練的詞嵌入向量。例如基於上下文預測具體詞(Mikolov et al., 2013b, a)的方法,它能學習包含了一般句法和語義的詞向量。這些詞嵌入方法目前已經被證明能高效捕捉上下文相似性,並且由於它們的維度非常小,因此在計算核心 NLP 任務是非常快速與高效的。


萬字長文概述NLP中的深度學習技術


圖 2:分佈式詞向量表徵,其中每一個詞向量只有 D 維,且遠小於詞彙量大小 V,即 D<

多年以來,構建這種詞嵌入向量的模型一般是淺層神經網絡,並沒有必要使用深層神經網絡構建更好的詞嵌入向量。不過基於深度學習的 NLP 模型常使用這些詞嵌入表示短語甚至句子,這實際上是傳統基於詞統計模型和基於深度學習模型的主要差別。目前詞嵌入已經是 NLP 任務的標配,大多數 NLP 任務的頂尖結果都需要藉助它的能力。

本身詞嵌入就能直接用於搜索近義詞或者做詞義的類推,而下游的情感分類、機器翻譯、語言建模等任務都能使用詞嵌入編碼詞層面的信息。最近比較流行的預訓練語言模型其實也參考了詞嵌入的想法,只不過預訓練語言模型在詞嵌入的基礎上進一步能編碼句子層面的語義信息。總的而言,詞嵌入的廣泛使用早已體現在眾多文獻中,它的重要性也得到一致的認可。

分佈式表示(詞嵌入)主要通過上下文或者詞的「語境」來學習本身該如何表達。上個世紀 90 年代,就有一些研究(Elman, 1991)標誌著分佈式語義已經起步,後來的一些發展也都是對這些早期工作的修正。此外,這些早期研究還啟發了隱狄利克雷分配等主題建模(Blei et al., 2003)方法和語言建模(Bengio et al., 2003)方法。

在 2003 年,Bengio 等人提出了一種神經語言模型,它可以學習單詞的分佈式表徵。他們認為這些詞表徵一旦使用詞序列的聯合分佈構建句子表徵,那麼就能構建指數級的語義近鄰句。反過來,這種方法也能幫助詞嵌入的泛化,因為未見過的句子現在可以通過近義詞而得到足夠多的信息。


萬字長文概述NLP中的深度學習技術


圖 3:神經語言模型(圖源:http://www.jmlr.org/papers/volume3/bengio03a/bengio03a.pdf)。

Collobert 和 Weston(2008) 展示了第一個能有效利用預訓練詞嵌入的研究工作,他們提出的神經網絡架構構成了當前很多方法的基礎。這一項研究工作還率先將詞嵌入作為 NLP 任務的高效工具,不過詞嵌入真正走向 NLP 主流還是 Mikolov 等人在 2013 年做出的研究《Distributed Representations of Words and Phrases and their Compositionality》。

Mikolov 等研究者在這篇論文中提出了連續詞袋模型(CBOW)和 Skip-Gram 模型,這兩種方法都能學習高質量的分佈式詞表徵。此外,令這兩種方法受到極大關注的是另一種附加屬性:語義合成性,即兩個詞向量相加得到的結果是語義相加的詞,例如「man」+「royal」=「king」。這種語義合成性的理論依據最近已經由 Gittens et al. (2017) 給出,他們表示只有保證某些特定的假設才能滿足語義合成性,例如詞需要在嵌入空間中處於均勻分佈。

Pennington et al. (2014) 提出了另一個非常出名的詞嵌入方法 GloVe,它基本上是一種基於詞統計的模型。在有些情況下,CBOW 和 Skip-Gram 採用的交叉熵損失函數有劣勢。因此 GloVe 採用了平方損失,它令詞向量擬合預先基於整個數據集計算得到的全局統計信息,從而學習高效的詞詞表徵。

一般 GloVe 模型會先對單詞計數進行歸一化,並通過對數平滑來最終得到詞共現矩陣,這個詞共現矩陣就表示全局的統計信息。這個矩陣隨後可以通過矩陣分解得到低維的詞表徵,這一過程可以通過最小化重構損失來獲得。下面將具體介紹目前仍然廣泛使用的 CBOW 和 Skip-Gram 兩種 Word2Vec 方法(Mikolov et al., 2013)。

Word2Vec

可以說 Mikolov 等人徹底變革了詞嵌入,尤其是他們提出的 CBOW 和 Skip-Gram 模型。CBOW 會在給定上下文詞的情況下計算目標詞(或中心詞)的條件概率,其中上下文詞的選取範圍通過窗口大小 k 決定。而 Skip-Gram 的做法正好與 CBOW 相反,它在給定目標詞或中心詞的情況下預測上下文詞。一般上下文詞都會以目標詞為中心對稱地分佈在兩邊,且在窗口內的詞與中心詞的距離都相等。也就是說不能因為某個上下文詞離中心詞比較遠,就認為它對中心詞的作用比較弱。

在無監督的設定中,詞嵌入的維度可以直接影響到預測的準確度。一般隨著詞嵌入維度的增加,預測的準確度也會增加,直到準確率收斂到某個點。一般這樣的收斂點可以認為是最佳的詞嵌入維度,因為它在不影響準確率的情況下最精簡。通常情況下,我們使用的詞嵌入維度可以是 128、256、300、500 等,相比於幾十萬的詞彙庫大小已經是很小的維度了。

下面我們可以考慮 CBOW 的簡化版,上下文只考慮離中心詞最近的一個單詞,這基本上就是二元語言模型的翻版。


萬字長文概述NLP中的深度學習技術


圖 4:CBOW 模型。

如圖 4 所示,CBOW 模型就是一個簡單的全連接神經網絡,它只有一個隱藏層。輸入層是上下文詞的 one-hot 向量,它有 V 個神經元(詞彙量),而中間的隱藏層只有 N 個神經元,N 是要遠遠小於 V 的。最後的輸出層是所有詞上的一個 Softmax 函數。層級之間的權重矩陣分別是 V*N 階的 W 和 N*V 階的 W',詞彙表中的每一個詞最終會表徵為兩個向量:v_c 和 v_w,它們分別對應上下文詞表徵和目標詞表徵。若輸入的是詞表中第 k 個詞,那麼我們有:


萬字長文概述NLP中的深度學習技術


總體而言,在給定上下文詞 c 作為輸入的情況下,對於任意詞 w_i 有:


萬字長文概述NLP中的深度學習技術


參數 θ={V_w, V_c} 都是通過定義目標函數而學習到的,一般目標函數可以定義為對數似然函數,且通過計算以下梯度更新權重:


萬字長文概述NLP中的深度學習技術


在更廣泛的 CBOW 模型中,所有上下文詞的 one-hot 向量都會同時作為輸入,即:


萬字長文概述NLP中的深度學習技術


詞嵌入的一個侷限是它們無法表示短語(Mikolov et al., 2013),即兩個詞或多個詞的組合並不表示對應的短語意義,例如「人民」+「大學」並不能組合成「人民大學」。Mikolov 提出的一種解決辦法是基於詞共現識別這些短語,併為它們單獨地學一些詞嵌入向量,而 Rie Johnson 等研究者在 15 年更是提出直接從無監督數據中學習 n-gram 詞嵌入。

另一種侷限性在於學習的詞嵌入僅基於周圍詞的小窗口,有時候「good」和「bad」幾乎有相同的詞嵌入,這對於情感分析等下游任務很不友好。有時候這些相似的詞嵌入有正好相反的情感,這對於需要區別情感的下游任務簡直是個災難,它甚至比用 One-hot 向量的表徵方法還要有更差的性能。Duyu Tang(2014)等人通過提出特定情感詞嵌入(SSWE)來解決這個問題,他們在學習嵌入時將損失函數中的監督情感納入其中。

一個比較重要的觀點是,詞嵌入應該高度依賴於他們要使用的領域。Labutov 和 Lipson(2013) 提出了一種用於特定任務的詞嵌入,他們會重新訓練詞嵌入,因此將詞嵌入與將要進行的下游任務相匹配,不過這種方法對計算力的需求比較大。而 Mikolov 等人嘗試使用負採樣的方法來解決這個問題,負採樣僅僅只是基於頻率對負樣本進行採樣,這個過程直接在訓練中進行。

此外,傳統的詞嵌入算法為每個詞分配不同的向量,這使得其不能解釋多義詞。在最近的一項工作中,Upadhyay 等人 (2017) 提出了一種新方法來解決這個問題,他們利用多語平行數據來學習多語義詞嵌入。例如英語的「bank」在翻譯到法語時有兩種不同的詞:banc 和 banque,它們分別表示金融和地理意義,而多語言的分佈信息能幫助詞嵌入解決一詞多義的問題。

下表 1 提供了用於創建詞嵌入的現有框架,它們都可以訓練詞嵌入並進一步與深度學習模型相結合:


萬字長文概述NLP中的深度學習技術

03

卷積神經網絡

隨著詞嵌入的流行及其在分佈式空間中展現出的強大表徵能力,我們需要一種高效的特徵函數,以從詞序列或 n-grams 中抽取高級語義信息。隨後這些抽象的語義信息能用於許多 NLP 任務,如情感分析、自動摘要、機器翻譯和問答系統等。卷積神經網絡(CNN)因為其在計算機視覺中的有效性而被引入到自然語言處理中,實踐證明它也非常適合序列建模。


萬字長文概述NLP中的深度學習技術


圖 5:用於執行詞級分類預測的 CNN 框架。(Collobert and Weston (2008))

使用 CNN 進行句子建模可以追溯到 Collobert 和 Weston (2008) 的研究,他們使用多任務學習為不同的 NLP 任務輸出多個預測,如詞性標註、語塊分割、命名實體標籤和語義相似詞等。其中查找表可以將每一個詞轉換為一個用戶自定義維度的向量。因此通過查找表,n 個詞的輸入序列 {s_1,s_2,... s_n } 能轉換為一系列詞向量 {w_s1, w_s2,... w_sn},這就是圖 5 所示的輸入。

這可以被認為是簡單的詞嵌入方法,其中權重都是通過網絡來學習的。在 Collobert 2011 年的研究中,他擴展了以前的研究,並提出了一種基於 CNN 的通用框架來解決大量 NLP 任務,這兩個工作都令 NLP 研究者嘗試在各種任務中普及 CNN 架構。

CNN 具有從輸入句子抽取 n-gram 特徵的能力,因此它能為下游任務提供具有句子層面信息的隱藏語義表徵。下面簡單描述了一個基於 CNN 的句子建模網絡到底是如何處理的。

基礎 CNN

1. 序列建模

對於每一個句子,w_i∈R^d 表示句子中第 i 個詞的詞嵌入向量,其中 d 表示詞嵌入的維度。給定有 n 個詞的句子,句子能表示為詞嵌入矩陣 W∈R^n×d。下圖展示了將這樣一個句子作為輸入饋送到 CNN 架構中。


萬字長文概述NLP中的深度學習技術


圖 6:使用 CNN 的文本建模(Zhang and Wallace , 2015)。

若令 w_i:i+j 表示 w_i, w_i+1,...w_j 向量的拼接,那麼卷積就可以直接在這個詞嵌入輸入層做運算。卷積包含 d 個通道的卷積核 k∈R^hd,它可以應用到窗口為 h 個詞的序列上,並生成新的特徵。例如,c_i 即使用卷積核在詞嵌入矩陣上得到的激活結果:


萬字長文概述NLP中的深度學習技術


若 b 是偏置項,f 是非線性激活函數,例如雙曲正切函數。使用相同的權重將濾波器 k 應用於所有可能的窗口,以創建特徵圖。


萬字長文概述NLP中的深度學習技術


在卷積神經網絡中,大量不同寬度的卷積濾波器(也叫做內核,通常有幾百個)在整個詞嵌入矩陣上滑動。

每個內核提取一個特定的 n-gram 模式。卷積層之後通常是最大池化策略 c^=max{c},該策略通過對每個濾波器應用最大運算來對輸入進行二次採樣。使用這個策略有兩大原因。

首先,最大池化提供固定長度的輸出,這是分類所需的。因此,不管濾波器的大小如何,最大池化總是將輸入映射到輸出的固定維度上。

其次,它在降低輸出維度的同時保持了整個句子中最顯著的 n-gram 特徵。這是通過平移不變的方式實現的,每個濾波器都能從句子的任何地方提取特定的特徵(如,否定),並加到句子的最終表示中。

詞嵌入可以隨機初始化,也可以在大型未標記語料庫上進行預訓練。第二種方法有時對性能提高更有利,特別是當標記數據有限時。卷積層和最大池化的這種組合通常被堆疊起來,以構建深度 CNN 網絡。這些順序卷積有助於改進句子的挖掘,以獲得包含豐富語義信息的真正抽象表徵。內核通過更深的卷積覆蓋了句子的大部分,直到完全覆蓋並創建了句子特徵的總體概括。

2. 窗口方法

上述架構將完整句子建模為句子表徵。然而,許多 NLP 任務(如命名實體識別,詞性標註和語義角色標註)需要基於字的預測。為了使 CNN 適應這樣的任務,需要使用窗口方法,其假定單詞的標籤主要取決於其相鄰單詞。因此,對於每個單詞,存在固定大小的窗口,窗口內的子句都在處理的範圍內。如前所述,獨立的 CNN 應用於該子句,並且預測結果歸因於窗口中心的單詞。按照這個方法,Poira 等人(2016)採用多級深度 CNN 來標記句子中的每個單詞為 aspect 或 non-aspect。結合一些語言模式,它們的集成分類器在 aspect 檢測方面表現很好。

詞級分類的最終目的通常是為整個句子分配一系列的標籤。在這樣的情況下,有時會採用結構化預測技術來更好地捕獲相鄰分類標籤間的關係,最終生成連貫標籤序列,從而給整個句子提供最大分數。

為了獲得更大的上下文範圍,經典窗口方法通常與時延神經網絡(TDNN)相結合。這種方法中,可以在整個序列的所有窗口上進行卷積。通過定義特定寬度的內核,卷積通常會受到約束。因此,相較於經典窗口方法(只考慮要標記單詞周圍窗口中的單詞),TDNN 會同時考慮句子中的所有單詞窗口。TDNN 有時也能像 CNN 架構一樣堆疊,以提取較低層的局部特徵和較高層的總體特徵。

應用

在這部分,研究者介紹了一些使用 CNN 來處理 NLP 任務的研究,這些研究在它們當時所處時代屬於前沿。

Kim 探討了使用上述架構進行各種句子分類任務,包括情感、主觀性和問題類型分類,結果很有競爭力。因其簡單有效的特點,這種方法很快被研究者接受。在針對特定任務進行訓練之後,隨機初始化的卷積內核成為特定 n-gram 的特徵檢測器,這些檢測器對於目標任務非常有用。但是這個網絡有很多缺點,最主要的一點是 CNN 沒有辦法構建長距離依存關係。


萬字長文概述NLP中的深度學習技術


圖 7:4 種預訓練 7-gram 內核得到的最好核函數;每個內核針對一種特定 7-gram。

Kalchbrenner 等人的研究在一定程度上解決了上述問題。他們發表了一篇著名的論文,提出了一種用於句子語義建模的動態卷積神經網絡(DCNN)。他們提出了動態 k-max 池化策略,即給定一個序列 p,選擇 k 種最有效的特徵。選擇時保留特徵的順序,但對其特定位置不敏感。在 TDNN 的基礎上,他們增加了動態 k-max 池化策略來創建句子模型。這種結合使得具有較小寬度的濾波器能跨越輸入句子的長範圍,從而在整個句子中積累重要信息。在下圖中,高階特徵具有高度可變的範圍,可能是較短且集中,或者整體的,和輸入句子一樣長。他們將模型應用到多種任務中,包括情感預測和問題類型分類等,取得了顯著的成果。總的來說,這項工作在嘗試為上下文語義建模的同時,對單個內核的範圍進行了註釋,並提出了一種擴展其範圍的方法。


萬字長文概述NLP中的深度學習技術


圖 8:DCNN 子圖,通過動態池化,較高層級上的寬度較小濾波器也能建立輸入句子中的長距離相關性。

情感分類等任務還需要有效地抽取 aspect 與其情感極性(Mukherjee and Liu, 2012)。Ruder 等人(2016)還將 CNN 應用到了這類任務,他們將 aspect 向量與詞嵌入向量拼接以作為輸入,並獲得了很好的效果。CNN 建模的方法一般因文本的長短而異,在較長文本上的效果比較短文本上好。Wang et al. (2015) 提出利用 CNN 建模短文本的表示,但是因為缺少可用的上下文信息,他們需要額外的工作來創建有意義的表徵。因此作者提出了語義聚類,其引入了多尺度語義單元以作為短文本的外部知識。最後 CNN 組合這些單元以形成整體表示。

CNN 還廣泛用於其它任務,例如 Denil et al. (2014) 利用 DCNN 將構成句子的單詞含義映射到文本摘要中。其中 DCNN 同時在句子級別和文檔級別學習卷積核,這些卷積核會分層學習並捕獲不同水平的特徵,因此 DCNN 最後能將底層的詞彙特徵組合為高級語義概念。

此外,CNN 也適用於需要語義匹配的 NLP 任務。例如我們可以利用 CNN 將查詢與文檔映射到固定維度的語義空間,並根據餘弦相似性對與特定查詢相關的文檔進行排序。在 QA 領域,CNN 也能度量問題和實體之間的語義相似性,並藉此搜索與問題相關的回答。機器翻譯等任務需要使用序列信息和長期依賴關係,因此從結構上來說,這種任務不太適合 CNN。但是因為 CNN 的高效計算,還是有很多研究者嘗試使用 CNN 解決機器翻譯問題。

總體而言,CNN 在上下文窗口中挖掘語義信息非常有效,然而它們是一種需要大量數據訓練大量參數的模型。因此在數據量不夠的情況下,CNN 的效果會顯著降低。CNN 另一個長期存在的問題是它們無法對長距離上下文信息進行建模並保留序列信息,其它如遞歸神經網絡等在這方面有更好的表現。

04

循環神經網絡

循環神經網絡(RNN)的思路是處理序列信息。「循環」表示 RNN 模型對序列中的每一個實例都執行同樣的任務,從而使輸出依賴於之前的計算和結果。通常,RNN 通過將 token 挨個輸入到循環單元中,來生成表示序列的固定大小向量。一定程度上,RNN 對之前的計算有「記憶」,並在當前的處理中使用對之前的記憶。該模板天然適合很多 NLP 任務,如語言建模、機器翻譯、語音識別、圖像字幕生成。因此近年來,RNN 在 NLP 任務中逐漸流行。

對 RNN 的需求

這部分將分析支持 RNN 在大量 NLP 任務中廣泛使用的基本因素。鑑於 RNN 通過建模序列中的單元來處理序列,它能夠捕獲到語言中的內在序列本質,序列中的單元是字符、單詞甚至句子。語言中的單詞基於之前的單詞形成語義,一個簡單的示例是「dog」和「hot dog」。RNN 非常適合建模語言和類似序列建模任務中的此類語境依賴,這使得大量研究者在這些領域中使用 RNN,頻率多於 CNN。

RNN 適合序列建模任務的另一個因素是它能夠建模不定長文本,包括非常長的句子、段落甚至文檔。與 CNN 不同,RNN 的計算步靈活,從而提供更好的建模能力,為捕獲無限上下文創造了可能。這種處理任意長度輸入的能力是使用 RNN 的主要研究的賣點之一。

很多 NLP 任務要求對整個句子進行語義建模。這需要在固定維度超空間中創建句子的大意。RNN 對句子的總結能力使得它們在機器翻譯等任務中得到更多應用,機器翻譯任務中整個句子被總結為固定向量,然後映射回不定長目標序列。

RNN 還對執行時間分佈式聯合處理(time distributed joint processing)提供網絡支持,大部分序列標註任務(如詞性標註)屬於該領域。具體用例包括多標籤文本分類、多模態情感分析等應用。

上文介紹了研究人員偏好使用 RNN 的幾個主要因素。然而,就此認為 RNN 優於其他深度網絡則大錯特錯。近期,多項研究就 CNN 優於 RNN 提出了證據。甚至在 RNN 適合的語言建模等任務中,CNN 的性能與 RNN 相當。CNN 與 RNN 在建模句子時的目標函數不同。RNN 嘗試建模任意長度的句子和無限的上下文,而 CNN 嘗試提取最重要的 n-gram。儘管研究證明 CNN 是捕捉 n-gram 特徵的有效方式,這在特定長度的句子分類任務中差不多足夠了,但 CNN 對詞序的敏感度有限,容易限於局部信息,忽略長期依賴。

《Comparative Study of CNN and RNN for Natural Language Processing》對 CNN 和 RNN 的性能提供了有趣的見解。研究人員在多項 NLP 任務(包括情感分類、問答和詞性標註)上測試後,發現沒有明確的贏家:二者的性能依賴於任務所需的全局語義。

下面,我們討論了文獻中廣泛使用的一些 RNN 模型。

RNN 模型

1. 簡單 RNN

在 NLP 中,RNN 主要基於 Elman 網絡,最初是三層網絡。圖 9 展示了一個較通用的 RNN,它按時間展開以適應整個序列。圖中 x_t 作為網絡在時間步 t 處的輸入,s_t 表示在時間步 t 處的隱藏狀態。s_t 的計算公式如下:


萬字長文概述NLP中的深度學習技術


因此,s_t 的計算基於當前輸入和之前時間步的隱藏狀態。函數 f 用來做非線性變換,如 tanh、ReLU,U、V、W 表示在不同時間上共享的權重。在 NLP 任務中,x_t 通常由 one-hot 編碼或嵌入組成。它們還可以是文本內容的抽象表徵。o_t 表示網絡輸出,通常也是非線性的,尤其是當網絡下游還有其他層的時候。

萬字長文概述NLP中的深度學習技術

圖 9:簡單 RNN 網絡(圖源:https://www.nature.com/articles/nature14539)

RNN 的隱藏狀態通常被認為是其最重要的元素。如前所述,它被視為 RNN 的記憶元素,從其他時間步中累積信息。但是,在實踐中,這些簡單 RNN 網絡會遇到梯度消失問題,使學習和調整網絡之前層的參數變得非常困難。

該侷限被很多網絡解決,如長短期記憶網絡(LSTM)、門控循環單元(GRU)和殘差網絡(ResNet),前兩個是 NLP 應用中廣泛使用的 RNN 變體。

2. 長短期記憶(LSTM)

LSTM 比簡單 RNN 多了『遺忘』門,其獨特機制幫助該網絡克服了梯度消失和梯度爆炸問題。


萬字長文概述NLP中的深度學習技術


圖 10:LSTM 和 GRU 門圖示(圖源:https://arxiv.org/abs/1412.3555)

與原版 RNN 不同,LSTM 允許誤差通過無限數量的時間步進行反向傳播。它包含三個門:輸入門、遺忘門和輸出門,並通過結合這三個門來計算隱藏狀態,如下面的公式所示:


萬字長文概述NLP中的深度學習技術


3. 門控循環單元(GRU)

另一個門控 RNN 變體是 GRU,複雜度更小,其在大部分任務中的實驗性能與 LSTM 類似。GRU 包括兩個門:重置門和更新門,並像沒有記憶單元的 LSTM 那樣處理信息流。因此,GRU 不加控制地暴露出所有的隱藏內容。由於 GRU 的複雜度較低,它比 LSTM 更加高效。其工作原理如下:


萬字長文概述NLP中的深度學習技術


研究者通常面臨選擇合適門控 RNN 的難題,這個問題同樣困擾 NLP 領域開發者。縱觀歷史,大部分對 RNN 變體的選擇都是啟發式的。《Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling》對前面三種 RNN 變體進行了對比評估,不過評估不是在 NLP 任務上進行的,而是復調音樂建模和語音信號建模相關任務。他們的評估結果明確表明門控單元(LSTM 和 GRU)優於傳統的簡單 RNN(實驗中用的是 tanh 激活函數),如下圖所示。但是,他們對這兩種門控單元哪個更好沒有定論。其他研究也注意到了這一點,因此人們在二者之間作出選擇時通常利用算力等其他因素。


萬字長文概述NLP中的深度學習技術


圖 11:不同 RNN 變體在訓練集和驗證集上的學習曲線,上圖 x 軸表示迭代次數,下圖 x 軸表示掛鐘時間,y 軸表示模型的負對數似然(以對數標尺顯示)。

由於篇幅受限,關注公號“數智物語”回覆NLP查看全文

萬字長文概述NLP中的深度學習技術


萬字長文概述NLP中的深度學習技術


分享到:


相關文章: