機器不學習:一文看懂Bi-LSTM-CRF

機器不學習 www.jqbxx.com : 深度聚合機器學習、深度學習算法及技術實戰

本文將由淺及深講解雙向LSTM+CRF模型過程。

1. Recurrent Neural Network (RNN)

儘管從多層感知器(MLP)到循環神經網絡(RNN)的擴展看起來微不足道,但是這對於序列的學習具有深遠的意義。循環神經網絡(RNN)的使用是用來處理序列數據的。在傳統的神經網絡中模型中,層與層之間是全連接的,每層之間的節點是無連接的。但是這種普通的神經網絡對於很多問題是無能為力的。比如,預測句子的下一個單詞是什麼,一般需要用到前面的單詞,因為一個句子中前後單詞並不是獨立的。循環神經網絡(RNN)指的是一個序列當前的輸出與之前的輸出也有關。具體的表現形式為網絡會對前面的信息進行記憶,保存在網絡的內部狀態中,並應用於當前輸出的計算中,即隱含層之間的節點不再無連接而是有鏈接的,並且隱含層的輸入不僅包含輸入層的輸出還包含上一時刻隱含層的輸出。理論上,循環神經網絡能夠對任何長度的序列數據進行處理,但是在實踐中,為了減低複雜性往往假設當前的狀態只與前面的幾個狀態相關。

下圖展示的是一個典型的循環神經網絡(RNN)結構。

機器不學習:一文看懂Bi-LSTM-CRF

圖1 循環神經網絡(RNN)結構

將循環神經網絡(RNN)可視化的一種有效方法是考慮將其在時間上進行展開,得到如圖2結構。

機器不學習:一文看懂Bi-LSTM-CRF

圖2 循環神經網絡(RNN)在時間上展開

圖中展示的是一個在時間上展開的循環神經網絡(RNN),其包含輸入單元(Input Units), 輸入集標記為{x0,x1,...,xt−1,xt,xt+1,...},輸出單元(Output Units),輸出集標記為{y0,y1,...,yt−1,yt,yt+1,...},以及隱含單元(Hidden Units),輸出集標記為{s0,s1,...,st−1,st,st+1,...},這些隱含單元完成了最為主要的工作。圖中,從輸入層連接到隱含層的權值被標記為U,從隱含層到自己的連接權值被標記為W,從隱含層到輸出層的權值被標記為V。注意,在每一個時步的時候同樣的權值被再使用。同時,為了表示清晰,偏置的權值在這裡被忽略。

在循環神經網絡中(RNN),有一條單向流動的信息流是從輸入單元到達隱含單元的,與此同時,另一條單向流動的信息流從隱含單元到達輸出單元。在某些情況下,循環神經網絡(RNN)會打破後者的限制,引導信息從輸出單元返回隱含單元,這些被稱為“Back projections”,並且隱含層的輸入還包括上一層隱含層的輸出,即隱含層內的節點是可以自連也可以互連的。

對於圖2網絡的計算過程如下:

1) xt 表示第t,t=1, 2, 3, … 步的輸入

2) st 為隱含層第t步的狀態,它是網絡的記憶單元。st 根據當前輸入層的輸出和上一步隱含層的輸出進行計算 st=f(Uxt+Wst−1) ,其中f一般為非線性的激活函數,如tanh或ReLU(後面會用到LSTM),在計算 s0 時,即第一個的隱含狀態,需要用到 st−1,但其並不存在,在現實中一般被設置為0向量。

3) ot 是第t步的輸出,ot=softmax(Vst)

需要注意的是:

隱含層狀態st被認為是網絡的記憶單元。st包含了前面所有步的隱含層狀態。而輸出層的ot只與當前步的st有關。在實踐中,為了降低網絡的複雜度,往往st只包含前面若干步而不是所有步的隱含層輸出。

在傳統神經網絡中,每一個網絡層的參數是不共享的。而在循環神經網絡(RNN)中,每輸入一步,每一層各自都共享參數U,V,W,其反映著循環神經網絡(RNN)中的每一步都在做相同的事,只是輸入不同。因此,這大大降低了網絡中需要學習的參數。具體的說是,將循環神經網絡(RNN)進行展開,這樣變成了多層的網絡,如果這是一個多層的傳統神經網絡,那麼xt到st之間的U矩陣與xt+1到st+1之間的U是不同的,而循環神經網絡(RNN)中的卻是一樣的,同理對於隱含層與隱含層之間的W、隱含層與輸出層之間的V也是一樣的。

圖中每一步都會有輸出,但是每一步都要有輸出並不是必須的。比如,我們需要預測一條語句所表達的情緒,我們僅僅需要關係最後一個單詞輸入後的輸出,而不需要知道每個單詞輸入後的輸出。同理,每步都需要輸入也不是必須的。循環神經網絡(RNN)的關鍵之處在於隱含層,隱含層能夠捕捉序列的信息。

最後,對於整個循環神經網絡(RNN)的計算過程如下:

向前推算(Forward pass):

對於一個長度為T的輸入x,網絡有I個輸入單元,H個隱含單元,K個輸出單元。定義xti為t時刻的第i個輸入,定義atj和btj分別表示為t時刻網絡單元j的輸入以及t時刻單元j非線性可微分激活函數的輸出。對於完整序列的隱含單元我們可以從時間t = 1開始並通過遞歸的調用如下公式得到:

機器不學習:一文看懂Bi-LSTM-CRF

與此同時,對於網絡的輸出單元也可以通過如下公式計算出:

機器不學習:一文看懂Bi-LSTM-CRF

向後推算(Forward pass):

如同標準的反向傳播(Backpropagation),通過時間的反向傳播(BPTT)包含對鏈規則的重複應用。具體的說是,對於循環網絡,目標函數依賴於隱含層的激活函數(不僅通過其對輸出層的影響,以及其對下一個時步隱含層的影響),也就是:

機器不學習:一文看懂Bi-LSTM-CRF

對於全部的序列δ項能夠從時刻t = T通過遞歸的使用上面的公式計算得到。最後,在每一個時步對於隱含層單元的輸入和輸出的權值是相同的,我們這個序列求和來得到關於每個網絡權值的導數。

機器不學習:一文看懂Bi-LSTM-CRF

2. Bi-directional Recurrent Neural Network (BRNN)

如果能像訪問過去的上下文信息一樣,訪問未來的上下文,這樣對於許多序列標註任務是非常有益的。例如,在最特殊字符分類的時候,如果能像知道這個字母之前的字母一樣,知道將要來的字母,這將非常有幫助。同樣,對於句子中的音素分類也是如此。

然而,由於標準的循環神經網絡(RNN)在時序上處理序列,他們往往忽略了未來的上下文信息。一種很顯而易見的解決辦法是在輸入和目標之間添加延遲,進而可以給網絡一些時步來加入未來的上下文信息,也就是加入M時間幀的未來信息來一起預測輸出。理論上,M可以非常大來捕獲所有未來的可用信息,但事實上發現如果M過大,預測結果將會變差。這是因為網路把精力都集中記憶大量的輸入信息,而導致將不同輸入向量的預測知識聯合的建模能力下降。因此,M的大小需要手動來調節。

雙向循環神經網絡(BRNN)的基本思想是提出每一個訓練序列向前和向後分別是兩個循環神經網絡(RNN),而且這兩個都連接著一個輸出層。這個結構提供給輸出層輸入序列中每一個點的完整的過去和未來的上下文信息。下圖展示的是一個沿著時間展開的雙向循環神經網絡。六個獨特的權值在每一個時步被重複的利用,六個權值分別對應:輸入到向前和向後隱含層(w1, w3),隱含層到隱含層自己(w2, w5),向前和向後隱含層到輸出層(w4, w6)。值得注意的是:向前和向後隱含層之間沒有信息流,這保證了展開圖是非循環的。

機器不學習:一文看懂Bi-LSTM-CRF

圖3 雙向循環神經網絡(BRNN)在時間上展開

對於整個雙向循環神經網絡(BRNN)的計算過程如下:

向前推算(Forward pass):

對於雙向循環神經網絡(BRNN)的隱含層,向前推算跟單向的循環神經網絡(RNN)一樣,除了輸入序列對於兩個隱含層是相反方向的,輸出層直到兩個隱含層處理完所有的全部輸入序列才更新:

機器不學習:一文看懂Bi-LSTM-CRF

向後推算(Backward pass):

雙向循環神經網絡(BRNN)的向後推算與標準的循環神經網絡(RNN)通過時間反向傳播相似,除了所有的輸出層δ項首先被計算,然後返回給兩個不同方向的隱含層:

機器不學習:一文看懂Bi-LSTM-CRF

3. Long Short-Term Memory (LSTM)

循環神經網路(RNN)在工作時一個重要的優點在於,其能夠在輸入和輸出序列之間的映射過程中利用上下文相關信息。然而不幸的是,標準的循環神經網絡(RNN)能夠存取的上下文信息範圍很有限。這個問題就使得隱含層的輸入對於網絡輸出的影響隨著網絡環路的不斷遞歸而衰退。因此,為了解決這個問題,長短時記憶(LSTM)結構誕生了。與其說長短時記憶是一種循環神經網絡,倒不如說是一個加強版的組件被放在了循環神經網絡中。具體地說,就是把循環神經網絡中隱含層的小圓圈換成長短時記憶的模塊。這個模塊的樣子如下圖所示:

機器不學習:一文看懂Bi-LSTM-CRF

圖4 長短時記憶模塊

關於這個單元的計算過程如下所示:

向前推算(Forward pass):

Input Gate:

機器不學習:一文看懂Bi-LSTM-CRF

機器不學習:一文看懂Bi-LSTM-CRF

通過上圖可以觀察有哪些連接了 Input Gate: t 時刻外面的輸入, t-1 時刻隱含單元的輸出, 以及來自 t-1 時刻 Cell 的輸出。 累計求和之後進行激活函數的計算就是上面兩行式子的含義了。

Forget Gate:

機器不學習:一文看懂Bi-LSTM-CRF

機器不學習:一文看懂Bi-LSTM-CRF

這兩行公式的計算意義跟上一個相同,Forget Gate的輸入來自於t時刻外面的輸入,t-1時刻隱含單元的輸出,以及來自t-1時刻Cell的輸出。

Cells:

機器不學習:一文看懂Bi-LSTM-CRF

機器不學習:一文看懂Bi-LSTM-CRF

這部分有些複雜,Cell的輸入是:t時刻Forget Gate的輸出 * t-1時刻Cell的輸出 + t時刻Input Gate的輸出 * 激活函數計算(t時刻外面的輸入 + t-1時刻隱含單元的輸出)

Output Gate:

機器不學習:一文看懂Bi-LSTM-CRF

機器不學習:一文看懂Bi-LSTM-CRF

這部分就同樣好理解了:Output Gate的輸入是:t時刻外面的輸入,t-1時刻隱含單元的輸出以及t時刻Cell單元的輸出。

Cell Output:

機器不學習:一文看懂Bi-LSTM-CRF

最後,模塊的輸出是t時刻Output Gate的輸出 * t時刻Cell單元的輸出。

向後推算(Forward pass):

機器不學習:一文看懂Bi-LSTM-CRF

Cell Output:

機器不學習:一文看懂Bi-LSTM-CRF

Output Gate:

機器不學習:一文看懂Bi-LSTM-CRF

Cells:

機器不學習:一文看懂Bi-LSTM-CRF

機器不學習:一文看懂Bi-LSTM-CRF

Forget Gate:

機器不學習:一文看懂Bi-LSTM-CRF

Input Gate:

機器不學習:一文看懂Bi-LSTM-CRF

CRF networks

線性CRF 和邏輯迴歸在數學上是一致的。訓練集中的每個句子中的每一個詞,有一個標註。對句子的第i個位置的詞抽取高維特徵(包括上一個詞的標註id,前後ngram特徵),通過學習特徵到標註的映射,可以得到特徵到任意標註的概率(歸一化),測試的時候,從句子的開頭開始,抽取特徵,預測標註概率,標註帶入下一個特徵,預測新一輪標註的概率,使用Viterbi Algorithm記錄所有最優路徑(當前對每個可能標註記錄概率最大的上一個標註來源,直到句子邊界)。CRF的求解可以用梯度下降,前向後向算法等。可以參考李航老師的《統計學習方法》。

LSTM-CRF networks

論文指出 A CRF layer has a state transition matrix as parameters. With such a layer, we can efficiently use past and future tags to predict the current tag. 其實CRF訓練時採用的是前一個的標註作為當前標註的有效特徵(以訓練標籤和標籤之間的轉移矩陣),解碼時才能用未來的標註改變最優路徑的選擇(另外解碼的時候,不需要之前的標籤作為特徵,認為每次預測都是單獨的事件,算出單獨的分數(概率的log值,這樣可以忽略算概率時的歸一化分母,疊加分數就可以選擇的到最優路徑))。

機器不學習:一文看懂Bi-LSTM-CRF

文本特徵

使用了拼寫特徵、NGram特徵還有詞向量特徵

結果對比

本文用了三個數據集 Penn Treebank (POS),CoNLL2000 (分塊),CoNLL2003(命名實體識別)

機器不學習:一文看懂Bi-LSTM-CRF

機器不學習:一文看懂Bi-LSTM-CRF

機器不學習:一文看懂Bi-LSTM-CRF

機器不學習:一文看懂Bi-LSTM-CRF

機器不學習:一文看懂Bi-LSTM-CRF

機器不學習:一文看懂Bi-LSTM-CRF

J. Lafferty, A. McCallum, and F. Pereira. 2001. Conditional random fields: Probabilistic models for segmenting and labeling sequence data. Proceedings of ICML.

R. Collobert, J. Weston, L. Bottou, M. Karlen, K. Kavukcuoglu and P. Kuksa. 2011. Natural Language Processing (Almost) from Scratch. Journal of Machine Learning Research (JMLR).

K. S. Yao, B. Peng, Y. Zhang, D. Yu, G. Zweig, and Y. Shi. 2014. Spoken Language Understanding using Long Short-Term Memory Neural Networks. IEEE SLT

K.S.Yao,B.L.Peng,G.Zweig,D.Yu, X. L. Li, and F. Gao. 2014. Recurrent conditional random fields for language understanding


分享到:


相關文章: