天天看點

[NLP]LSTM了解

簡介

LSTM(Long short-term memory,長短期記憶)是一種特殊的RNN,主要是為了解決長序列訓練過程中的梯度消失問題。以下先從RNN介紹。

簡說RNN

RNN(Recurrent Neural Network,循環神經網絡)是一種處理序列資料的神經網絡。下圖是它的結構: 

  1. [NLP]LSTM了解

從上圖可以看出,RNN循環擷取輸入序列,并儲存上一次輸入的計算結果,與目前輸入進行計算後,将計算結果輸出并儲存目前的計算結果,這樣不斷循環輸入并計算,即可擷取上文資訊。

RNN内部網絡如下圖所示,從圖中可以看出,在神經元内部的計算過程:先将上一個神經元細胞的輸出ht-1與目前狀态下神經元細胞的輸入xt拼接後進行tan計算。

注:輸出的ht-1(下圖中的紫色圓圈)通常是将ht-1輸入到一個線性層(主要是進行次元映射),然後使用softmax進行分類得到需要的資料。具體的計算方式要看模型的使用方式。 

[NLP]LSTM了解

RNN優點:它能處理序列資料,并且有記憶能力,能夠利用上文資訊。

RNN缺點:

  • 梯度消失:對于擷取長距離依賴的效果不是很好(即如果上文資訊離目前輸入距離太遠的話,理論上它是能夠記得上文資訊,但是事實上并不是這樣,是以它并不能很好地處理長距離依賴問題)
  • 梯度爆炸
  • RNN較難訓練

解決方法:lstm可以解決梯度消失問題;梯度爆炸問題需要使用梯度裁剪來做(比如,可以設定梯度範圍為[-0.5,0.5]之間,如果梯度值為1.8,可以取其四分之一變為0.425即符合要求,我們知道梯度是一個多元空間中的向量,如果将梯度的長度進行裁剪并不會改變其方向,是以梯度仍然是會按照函數下降的方向前行,最終依然會達到控制loss的目的)

注:長距離依賴處理效果不佳的原因是使用tanh或者relu作為激活函數。(如果是sigmoid函數則不會)

LSTM結構

LSTM也是一種RNN,是以它也是一種循環結構,不同的是RNN神經元内部隻用tan層進行計算,而LSTM是有4個全連接配接層進行計算的,LSTM的内部結構如下圖所示。 

[NLP]LSTM了解

上圖中符号的含義如下圖所示,黃色方框類似于CNN中的激活函數操作,粉色圓圈表示點操作,單箭頭表示資料流向,下圖中第四個符号表示兩個向量的連接配接操作,第五個符号表示向量的拷貝操作,且上圖中的σ表示sigmoid層(該層的輸出時0-1的值,0表示不能通過,1表示能通過)。 

[NLP]LSTM了解

現在來描述LSTM的内部操作,具體内容如下圖所示:

[NLP]LSTM了解

LSTM的核心是細胞狀态——最上層的橫穿整個細胞的水準線,它通過門來控制資訊的增加或者删除。

那麼什麼是門呢?門是一種用來選擇資訊通過與否的方式,它由一個sigmoid層和點乘操作組成。LSTM共有三個門,分别是遺忘門,輸入門和輸出門,具體内容如下所述:

(1)遺忘門:遺忘門決定丢棄哪些資訊,輸入是上一個神經元細胞的計算結果ht-1以及目前的輸入向量xt,二者聯接并通過遺忘門後(sigmoid會決定哪些資訊留下,哪些資訊丢棄),會生成一個0-1向量Γft(次元與上一個神經元細胞的輸出向量Ct-1相同),Γft與Ct-1進行點乘操作後,就會擷取上一個神經元細胞經過計算後保留的資訊。

(2)輸入門:表示要儲存的資訊或者待更新的資訊,如上圖所示是ht-1與xt的連接配接向量,經過sigmoid層後得到的結果Γit,這就是輸入門的輸出結果了。

但是接下來我們要計算該神經元細胞的輸出結果,即新細胞的更新狀态:Ct,Ct = Ct-1· Γft  + Γit · ~ct(其中~ct = tanh(ht-1,xt)),文字描述是:輸入門的計算結果點乘 ht-1與xt的連接配接向量經過tanh層計算的結果後,再與上一個神經元細胞經過計算後保留的資訊進行相加,則是最終要輸出的Ct。

(3)輸出門:輸出門決定目前神經原細胞輸出的隐向量ht,ht與Ct不同,ht要稍微複雜一點,它是Ct進過tanh計算後與輸出門的計算結果進行點乘操作後的結果,用公式描述是:ht = tanh(ct) · Γot

LSTM具體實作步驟[5]

1、首先,輸入上一個神經元細胞輸出的隐藏層向量和目前神經元細胞的輸入,并将其連接配接起來。

2、将步驟1中的結果傳入遺忘門中,該層将删除不相關的資訊。

4、一個備選層将用步驟1中的結果建立,這一層将儲存可能的會加入細胞狀态的值或者說資訊。

3、将步驟1中的結果傳入輸入門中,這一層決定步驟4的備選層中哪些資訊應該加入到細胞狀态中去。

5、步驟2、3、4計算結束後,用這三個步驟計算後的向量和上一個神經元細胞傳出的細胞狀态向量來更新目前細胞的細胞狀态。

6、結果就被計算完了。

7、将結果和新的細胞狀态進行點乘則是目前細胞狀态的隐向量。

LSTM如何避免梯度消失與梯度爆炸

RNN中的梯度消失/爆炸與CNN中的含義不同,CNN中不同的層有不同的參數,每個參數都有自己的梯度;而RNN中同樣的權重在各個時間步中共享,是以最終的梯度等于各個時間步的梯度和。是以,RNN中的梯度不會消失,它隻會遺忘遠距離的依賴關系,而被近距離的梯度所主導。但是LSTM中的梯度傳播有很多條路徑,最主要的一條是目前細胞的狀态更新這一過程,該過程中隻有逐元素的相乘和相加操作,梯度流最穩定,是以基本不會發生梯度消失或者梯度爆炸;但是其他的傳播路徑依然有梯度消失或者爆炸風險,而最終的梯度計算是各個梯度路徑的和,是以LSTM仍然有梯度消失或者爆炸的風險,隻是這個風險被大幅降低了。

LSTM變種-GRU

GRU是LSTM的變種,它也是一種RNN,是以是循環結構,相比LSTM而言,它的計算要簡單一些,計算量也降低,但是二者的效果卻不能一概而論,需要針對不同的case進行嘗試才能知道哪一個模型效果更好。GRU使用隐向量進行資訊交換(LSTM使用細胞狀态),它有2個門:重置門和更新門。    

[NLP]LSTM了解

如上圖所示,現分别介紹兩個門:

  • 重置門:用來決定需要丢棄哪些上一個神經元細胞的資訊,它的計算過程是将Ct-1與目前輸入向量xt進行連接配接後,輸入sigmoid層進行計算,結果為S1,再将S1與Ct-1進行點乘計算,則結果為儲存的上個神經元細胞資訊,用C’t-1表示。

公式表示為:C’t-1 = Ct-1 · S1,S1 = sigmoid(concat(Ct-1,Xt)) 

  • 更新門:更新門類似于LSTM的遺忘門和輸入門,它決定哪些資訊會丢棄,以及哪些新資訊會增加。

總結

LSTM優點:LSTM降低了梯度消失或者梯度爆炸的風險,并且比RNN具有更強的長距離依賴能力。

LSTM缺點:

  • LSTM處理長距離依賴的能力依然不夠,是以Transformer橫空出世,它具有比LSTM更強的長距離依賴處理能力。
  • 它的計算很費時。每個細胞中都有4個全連接配接層(MLP),是以如果LSTM的時間跨度很大的話,計算量會很大也很費時。

注:LSTM+CRF做ner時,LSTM 隻能通過輸入判斷輸出,但是 CRF 可以通過學習轉移矩陣,看前後的輸出來判斷目前的輸出。這樣就能學到一些規律(比如“O 後面不能直接接 I”“B-brand 後面不可能接 I-color”),這些規律在有時會起到至關重要的作用

參考資料

[1] https://zhuanlan.zhihu.com/p/32085405

[2] https://www.jianshu.com/p/95d5c461924c

[3] https://www.zhihu.com/question/34878706

[4] https://r2rt.com/written-memories-understanding-deriving-and-extending-the-lstm.html(待學習)

[5] https://towardsdatascience.com/illustrated-guide-to-lstms-and-gru-s-a-step-by-step-explanation-44e9eb85bf21