RNN(Recurrent Neural Networks,循環神經網絡)不只會學習當前時刻的信息,也會依賴以前的序列信息。因爲其特殊的網絡模型結構解決了信息保存的問題。因此RNN對處理時間序列和語言文本序列問題有獨特的優點。遞歸神經網絡都具備一連串重複神經網絡模塊的形式。在標準的RNNs中,這種重複模塊有一種很是簡單的結構。算法
那麼S(t+1) = tanh( U*X(t+1) + W*S(t))
。tanh激活函數圖像以下:網絡
RNN經過BPTT算法反向傳播偏差,它與BP類似,只不過與時間有關。RNN一樣經過隨機梯度降低(Stochastic gradient descent)算法使得代價函數(損失函數)值達到最小。函數
RNN的激活函數tanh能夠將全部值映射到-1至1之間,以及在利用梯度降低算法調優時利用鏈式法則,那麼會形成不少個小於1的項連乘就很快的逼近零。學習
依賴於咱們的激活函數和網絡參數,也可能會產生梯度爆炸(如激活函數是Relu,而LSTM採用的激活函數是sigmoid和tanh,從而避免了梯度爆炸的狀況)。通常靠裁剪後的優化算法便可解決,好比gradient clipping(若是梯度的範數大於某個給定值,將梯度同比收縮)。優化
合適的初始化矩陣W能夠減少梯度消失效應,正則化也能起做用。更好的方法是選擇ReLU而不是sigmoid和tanh做爲激活函數。ReLU的導數是常數值0或1,因此不可能會引發梯度消失。更通用的方案時採用長短時記憶(LSTM)或門限遞歸單元(GRU)結構。spa
那麼,接下來咱們來了解LSTM是如何解決梯度消失問題的code
LSTM (Long Short Term Memory networks)的「門」結構能夠截取「不應截取的信息」,結構以下:orm
LSTMs的關鍵點是細胞狀態,就是穿過圖中的水平線。blog
單元狀態有點像是個傳送帶。它貫穿整個鏈條,只有一些線性相互做用。這很容易讓信息以不變的方式向下流動。遞歸
LSTM有能力向單元狀態中移除或添加信息,經過門結構來管理,包括「遺忘門」,「輸出門」,「輸入門」。經過門讓信息選擇性經過,來去除或增長信息到細胞狀態. 模塊中sigmoid層輸出0到1之間的數字,描述了每一個成分應該經過門限的程度。0表示「不讓任何成分經過」,而1表示「讓全部成分經過!」
第一步
表示如今的所有信息。
以肯定要更新的信息,經過相加操做獲得新的細胞狀態Ct.
至此,咱們在這裏再次強調一下LSTM是如何解決長時依賴問題的:
在RNN中,當前狀態值S(t)= tanh(x(t) * U + W * S(t-1)),正如上面所述在利用梯度降低算法鏈式求導時是連乘的形式,若其中只要有一個是接近零的,那麼整體值就容易爲0,致使梯度消失,不能解決長時依賴問題。
而LSTM更新狀態值:
是相加的形式,因此不容易出現狀態值逐漸接近0的狀況。