1. 程式人生 > >TensorFlow(十一):遞歸神經網絡(RNN與LSTM)

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

如何 style work 收縮 不變 函數 概率 隨著 其他

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)結構。

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

LSTM

LSTM (Long Short Term Memory networks)的“門”結構可以截取“不該截取的信息”,結構如下:

技術分享圖片 在上面的圖中,每條線表示一個完整向量,從一個節點的輸出到其他節點的輸入。粉紅色圓圈代表逐點操作,比如向量加法,而黃色框框表示的是已學習的神經網絡層。線條合並表示串聯,線條分叉表示內容復制並輸入到不同地方。
LSTMs核心理念

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

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

技術分享圖片 其中,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的情況。

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