TensorFlow(十一):遞歸神經網絡(RNN與LSTM)

RNN

RNN(Recurrent Neural Networks,循環神經網絡)不只會學習當前時刻的信息,也會依賴以前的序列信息。因爲其特殊的網絡模型結構解決了信息保存的問題。因此RNN對處理時間序列和語言文本序列問題有獨特的優點。遞歸神經網絡都具備一連串重複神經網絡模塊的形式。在標準的RNNs中,這種重複模塊有一種很是簡單的結構。算法

 
 

那麼S(t+1) = tanh( U*X(t+1) + W*S(t))。tanh激活函數圖像以下:網絡

 激活函數tanh把狀態S值映射到-1和1之間.

RNN經過BPTT算法反向傳播偏差,它與BP類似,只不過與時間有關。RNN一樣經過隨機梯度降低(Stochastic gradient descent)算法使得代價函數(損失函數)值達到最小。函數

 
 BBPT算法規則以下:
 
 可是隨着時間間隔不斷增大時,RNN會喪失學習到鏈接很遠的信息能力(梯度消失)。緣由以下:

RNN的激活函數tanh能夠將全部值映射到-1至1之間,以及在利用梯度降低算法調優時利用鏈式法則,那麼會形成不少個小於1的項連乘就很快的逼近零。學習

依賴於咱們的激活函數和網絡參數,也可能會產生梯度爆炸(如激活函數是Relu,而LSTM採用的激活函數是sigmoid和tanh,從而避免了梯度爆炸的狀況)。通常靠裁剪後的優化算法便可解決,好比gradient clipping(若是梯度的範數大於某個給定值,將梯度同比收縮)。優化

合適的初始化矩陣W能夠減少梯度消失效應,正則化也能起做用。更好的方法是選擇ReLU而不是sigmoid和tanh做爲激活函數。ReLU的導數是常數值0或1,因此不可能會引發梯度消失。更通用的方案時採用長短時記憶(LSTM)或門限遞歸單元(GRU)結構。spa

那麼,接下來咱們來了解LSTM是如何解決梯度消失問題的code

LSTM

LSTM (Long Short Term Memory networks)的「門」結構能夠截取「不應截取的信息」,結構以下:orm

 
 在上面的圖中,每條線表示一個完整向量,從一個節點的輸出到其餘節點的輸入。粉紅色圓圈表明逐點操做,好比向量加法,而黃色框框表示的是已學習的神經網絡層。線條合併表示串聯,線條分叉表示內容複製並輸入到不一樣地方。
LSTMs核心理念

LSTMs的關鍵點是細胞狀態,就是穿過圖中的水平線。blog

單元狀態有點像是個傳送帶。它貫穿整個鏈條,只有一些線性相互做用。這很容易讓信息以不變的方式向下流動。遞歸

 
 其中,C(t-1)至關於上面咱們講的RNN中的S(t-1), C(t)至關於S(t).

LSTM有能力向單元狀態中移除或添加信息,經過門結構來管理,包括「遺忘門」,「輸出門」,「輸入門」。經過門讓信息選擇性經過,來去除或增長信息到細胞狀態. 模塊中sigmoid層輸出0到1之間的數字,描述了每一個成分應該經過門限的程度。0表示「不讓任何成分經過」,而1表示「讓全部成分經過!」

第一步

 
 上圖是遺忘門的展現,首先將上一時刻的輸出h(t-1)和這一時刻的輸入進x(t)行拼接(concat),而後判斷以多大的程度來保留這部分信息(獲得機率值).
第二步
 
 上圖是輸入門結構,i(t)等式表達的是咱們以多大機率來更新信息,
 
 

表示如今的所有信息。

第三步
 
 首先把舊狀態與f(t)相乘,就丟棄掉咱們肯定須要丟棄的信息,而後將
 
 

以肯定要更新的信息,經過相加操做獲得新的細胞狀態Ct.

第四步
 
 LSTM和RNN相同都是利用BPTT傳播和隨機梯度或者其餘優化算法來擬合參數。

至此,咱們在這裏再次強調一下LSTM是如何解決長時依賴問題的:
在RNN中,當前狀態值S(t)= tanh(x(t) * U + W * S(t-1)),正如上面所述在利用梯度降低算法鏈式求導時是連乘的形式,若其中只要有一個是接近零的,那麼整體值就容易爲0,致使梯度消失,不能解決長時依賴問題。

而LSTM更新狀態值:

 
 

是相加的形式,因此不容易出現狀態值逐漸接近0的狀況。

相關文章
相關標籤/搜索