[NLP]LSTM理解

簡介html

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

 

簡說RNNide

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

  1.  

從上圖能夠看出,RNN循環獲取輸入序列,並保存上一次輸入的計算結果,與當前輸入進行計算後,將計算結果輸出並保存當前的計算結果,這樣不斷循環輸入並計算,便可獲取上文信息。學習

RNN內部網絡以下圖所示,從圖中能夠看出,在神經元內部的計算過程:先將上一個神經元細胞的輸出ht-1與當前狀態下神經元細胞的輸入xt拼接後進行tan計算。ui

注:輸出的ht-1(下圖中的紫色圓圈)一般是將ht-1輸入到一個線性層(主要是進行維度映射),而後使用softmax進行分類獲得須要的數據。具體的計算方式要看模型的使用方式。 spa

 

RNN優勢:它能處理序列數據,而且有記憶能力,可以利用上文信息。3d

RNN缺點:orm

  • 梯度消失:對於獲取長距離依賴的效果不是很好(即若是上文信息離當前輸入距離太遠的話,理論上它是可以記得上文信息,可是事實上並非這樣,因此它並不能很好地處理長距離依賴問題)
  • 梯度爆炸
  • RNN較難訓練

注:長距離依賴處理效果不佳的緣由是使用tanh或者relu做爲激活函數。(若是是sigmoid函數則不會)htm

 

LSTM結構

LSTM也是一種RNN,所以它也是一種循環結構,不一樣的是RNN神經元內部只用tan層進行計算,而LSTM是有4個全鏈接層進行計算的,LSTM的內部結構以下圖所示。 

 

上圖中符號的含義以下圖所示,黃色方框相似於CNN中的激活函數操做,粉色圓圈表示點操做,單箭頭表示數據流向,下圖中第四個符號表示兩個向量的鏈接操做,第五個符號表示向量的拷貝操做,且上圖中的σ表示sigmoid(該層的輸出時0-1的值,0表示不能經過,1表示能經過) 

如今來描述LSTM的內部操做,具體內容以下圖所示:

  

LSTM的核心是細胞狀態——最上層的橫穿整個細胞的水平線,它經過門來控制信息的增長或者刪除。

那麼什麼是門呢?門是一種用來選擇信息經過與否的方式,它由一個sigmoid層和點乘操做組成。LSTM共有三個門,分別是遺忘門,輸入門和輸出門,具體內容以下所述:

(1)遺忘門:遺忘門決定丟棄哪些信息,輸入是上一個神經元細胞的計算結果ht-1以及當前的輸入向量xt,兩者聯接並經過遺忘門後(sigmoid會決定哪些信息留下,哪些信息丟棄),會生成一個0-1向量Γft(維度與上一個神經元細胞的輸出向量Ct-1相同)ΓftCt-1進行點乘操做後,就會獲取上一個神經元細胞通過計算後保留的信息。

(2)輸入門:表示要保存的信息或者待更新的信息,如上圖所示是ht-1xt的鏈接向量,通過sigmoid層後獲得的結果Γit,這就是輸入門的輸出結果了。

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

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

 

LSTM具體實現步驟[5]

1、首先,輸入上一個神經元細胞輸出的隱藏層向量和當前神經元細胞的輸入,並將其鏈接起來。

2、將步驟1中的結果傳入遺忘門中,該層將刪除不相關的信息。

4、一個備選層將用步驟1中的結果建立,這一層將保存可能的會加入細胞狀態的值或者說信息。

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

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

6、結果就被計算完了。

7、將結果和新的細胞狀態進行點乘則是當前細胞狀態的隱向量。

 

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

RNN中的梯度消失/爆炸與CNN中的含義不一樣,CNN中不一樣的層有不一樣的參數,每一個參數都有本身的梯度;而RNN中一樣的權重在各個時間步中共享,因此最終的梯度等於各個時間步的梯度和。所以,RNN中的梯度不會消失,它只會遺忘遠距離的依賴關係,而被近距離的梯度所主導。可是LSTM中的梯度傳播有不少條路徑,最主要的一條是當前細胞的狀態更新這一過程,該過程當中只有逐元素的相乘和相加操做,梯度流最穩定,所以基本不會發生梯度消失或者梯度爆炸;可是其餘的傳播路徑依然有梯度消失或者爆炸風險,而最終的梯度計算是各個梯度路徑的和,所以LSTM仍然有梯度消失或者爆炸的風險,只是這個風險被大幅下降了。

 

LSTM變種-GRU

GRULSTM的變種,它也是一種RNN,所以是循環結構,相比LSTM而言,它的計算要簡單一些,計算量也下降,可是兩者的效果卻不能一律而論,須要針對不一樣的case進行嘗試才能知道哪個模型效果更好。GRU使用隱向量進行信息交換(LSTM使用細胞狀態),它有2個門:重置門和更新門。    

   

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

  • 重置門:用來決定須要丟棄哪些上一個神經元細胞的信息,它的計算過程是將Ct-1與當前輸入向量xt進行鏈接後,輸入sigmoid層進行計算,結果爲S1,再將S1Ct-1進行點乘計算,則結果爲保存的上個神經元細胞信息,用C’t-1表示。

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

  • 更新門:更新門相似於LSTM的遺忘門和輸入門,它決定哪些信息會丟棄,以及哪些新信息會增長。

 

總結

LSTM優勢:LSTM下降了梯度消失或者梯度爆炸的風險,而且比RNN具備更強的長距離依賴能力。

LSTM缺點:

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

 

參考資料

[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

相關文章
相關標籤/搜索