一、RNN
RNN(Recurrent Neural Networks,循環神經網絡)不僅會學習當前時刻的信息,也會依賴之前的序列信息,允許信息持久化。由於其特殊的網絡模型結構解決了信息保存的問題。所以RNN對處理時間序列和語言文本序列問題有獨特的優勢。
標準的RNN模型如下圖所示:
由圖可以看到RNN引入了隱狀態h的概念,h可以對序列形式的數據提取特徵,接着再轉換爲輸出。ht = tanh(ht-1, xt)有前一個神經元的輸出和當前時刻的輸入共同決定。推導可見鏈接
這裏我們不禁要問,爲什麼RNN選用tanh函數作爲激活函數,而不選用ReLu或sigmod函數呢?這裏首先我們需要知道tanh函數是將值轉換爲(-1, 1)之間,具體請看我的另一片博客。總而言之有兩個原因:
(1)在RNN中直接把激活函數換成ReLU會導致非常大的輸出值,加大計算量。
(2)激活函數ReLu不能解決梯度在長程上傳遞的問題。
關於上述爲什麼RNN選用tanh的問題,還請參考知乎回答。
RNN存在的問題:
a、梯度消失 :更新模型參數的方法是反向求導,越往前梯度越小。而激活函數是 sigmoid 和 tanh 的時候,這兩個函數的導數又是在兩端都是無限趨近於0的,會使得之前的梯度也朝向0,最終的結果是到達一定”深度“後,梯度就對模型的更新沒有任何貢獻。
b、梯度爆炸:梯度爆炸就是由於初始化權值過大,反向傳播時對激活函數進行求導,如果此部分大於1,那麼層數增多的時候,最終的求出的梯度更新將以指數形式增加,即發生梯度爆炸的現象。
c、長期依賴問題:相關信息和當前預測位置之間的間隔不斷增大時,RNN 會喪失學習到連接如此遠的信息的能力。
針對RNN的上述問題,相關學者設計了LSTM,以避免長期依賴問題。
RNN用於文本多分類模型:
二、LSTM
LSTM 具有與RNN同樣的結構,但是重複的模塊擁有一個不同的結構。不同於單一神經網絡層,這裏是有四個,以一種非常特殊的方式進行交互。
上圖爲LSTM的交互模塊,其核心在於添加了cell狀態,也就是圖中最上面的一條線。cell就像傳送帶沿着整條鏈傳送,記錄歷史的信息。LSTM通過三個名字爲門的結構控制cell狀態。
如上圖所示,ft(遺忘門)、it(輸入門)、ot (輸出門)三個門來控制cell的狀態。
(1)ft(遺忘門):這一步決定從cell中拋棄哪些信息,因爲cell中不可能保存所有歷史數據,這樣不僅會造成運算數據量龐大,還會使傳輸的數據攜帶一些噪音,不利於最終結果的運算。
(2)it(輸入門):這一步與輸入相連,決定哪些輸入信息會存儲到cell中,即向cell中存儲信息。
(3)ot (輸出門):該步驟的輸出分爲兩部分,一部分流入寫一個計算單元,另一部分作爲該xi的的特徵表示輸出。
上圖中的計算公式爲LSTM隱藏層的輸出表示h的具體計算過程。
關於LSTM的輸入,詳情參考如下鏈接的“隔壁小王”的回答。