LSTM,LSTM 比 RNN 優化了哪些地方?卷積神經網絡與循環神經網絡的區別

在普通的全連接網絡或CNN中,每層神經元的信號只能向上一層傳播,樣本的處理在各個時刻獨立,因此又被稱爲前向神經網絡 (Feed-forward Neural Networks)。而在RNN中,神經元的輸出可以在下一個時間戳直接作用到自身,即第i層神經元在m時刻的輸入,除了 (i-1) 層神經元在該時刻的輸出外,還包括其自身在 (m-1)時刻的輸出!

RNN和傳統的多層感知機不同的就是和時間沾上邊了,下一時間(理解爲step)會受到本時間的影響,爲了更好地說明這個,我們可以將網絡按照時間展開:
這裏寫圖片描述
這裏寫圖片描述

(t+1)時刻網絡的最終結果O(t+1)是該時刻輸入和所有歷史共同作用的結果!
這就達到了對時間序列建模的目的。

RNN可以看成是一個在時間上傳遞的神經網絡,它的深度是時間長度!
“梯度消失”現象又要出現了,只不過這次發生在時間軸上。對於 t 時刻來說,它產生的梯度在時間軸上向歷史傳播幾層之後就消失了,根本就無法影響太遙遠的過去。因此之前說的“所有歷史”共同作用只是理想的情況,在實際中,這種影響也就只能維持若干個時間戳。

爲了解決時間上的梯度消失,機器學習領域發展出了長短時記憶單元LSTM,通過門的開關實現時間上記憶功能,並防止梯度消失。
https://blog.csdn.net/Dark_Scope/article/details/47056361

LSTM
RNN has problems of gradient vanishing or explosion.
LSTM is more complicated function that learns to control the flow of information, to prevent the vanishing gradient and to allow the recurrent layer to more easily capture long-term dependencies.
原生的RNN會遇到一個很大的問題,叫做 The vanishing gradient problem for RNNs,也就是後面時間的節點對於前面時間的節點感知力下降,也就是忘事兒,這也是NN在很長一段時間內不得志的原因,網絡一深就沒法訓練了,深度學習那一套東西暫且不表,RNN解決這個問題用到的就叫LSTM,簡單來說就是你不是忘事兒嗎?我給你拿個小本子把事記上,好記性不如爛筆頭嘛,所以LSTM引入一個核心元素就是Cell。

所以LSTM是怎麼改進RNN從而消除了梯度消失的呢?
https://blog.csdn.net/xmdxcsj/article/details/52526843

以及 LSTM的結構是怎麼樣的:

傳統RNN每一步的隱藏單元只是執行一個簡單的tanh或ReLU操作:
傳統RNN每個模塊內只是一個簡單的tanh層
這裏寫圖片描述
LSTM每個循環的模塊內又有4層結構:3個sigmoid層,1個tanh層
這裏寫圖片描述

LSTM內部結構詳解
參考博客 [譯] 理解 LSTM 網絡
以及 RNN和LSTM

1、基本狀態

LSTM的關鍵是細胞狀態CC,一條水平線貫穿於圖形的上方,這條線上只有些少量的線性操作,信息在上面流傳很容易保持。
細胞狀態的傳送帶
細胞狀態的傳送帶

2、門

LSTM有通過精心設計的稱作“門”的結構來去除或者增加信息到細胞狀態的能力。
門是一種讓信息選擇式通過的方法。他們包含一個sigmoid神經網絡層和一個pointwise乘法操作。
這裏寫圖片描述
Sigmoid層輸出0到1之間的數值,描述每個部分有多少量可以通過。
0代表“不許任何量通過”
1代表“允許任何量通過”
LSTM 擁有三個門,來保護和控制細胞狀態。

2.1 遺忘門

第一步,決定我們會從細胞狀態中丟棄什麼信息。
通過 遺忘門 完成
該門會讀取 ht1xt ,輸出一個在 0 到 1 之間的數值給每個在細胞狀態 Ct1 中的數字。1 表示“完全保留”,0 表示“完全捨棄”。
這裏寫圖片描述

2.2 輸入,包括 一個 sigmoid層(輸入門層)

下一步是確定什麼樣的新信息被存放在細胞狀態中。

  1. sigmoid層稱“輸入門層” 決定什麼值我們將要更新。
  2. 然後,一個tanh層創建一個新的候選值向量,C~t ,加到狀態中。

    tanh的輸出在[-1,1],說明細胞狀態在某些維度上需要加強,某些維度上需要減弱。
    
  3. 這兩個信息產生對狀態的更新。

    sigmoid輸入門層,它的輸出值要乘到 tanh 層的輸出上,起到一個縮放的作用,極端情況下sigmoid輸出0說明相應維度上的細胞狀態不需要更新。
    

    這裏寫圖片描述

2.3 形成新的細胞狀態

這裏寫圖片描述
如圖所示:
1. 舊的細胞狀態 Ct1ft 相乘來丟棄一部分信息
2. 再加個 itC~t (i是input輸入門的意思),這就生成了新的細胞狀態Ct

2.4 最後該決定輸出什麼了

  1. Ct 輸給 tanh 函數,得到 一個候選的輸出值
  2. 我們運行一個 sigmoid 層來確定細胞狀態的哪個部分將輸出出去。
    這裏寫圖片描述

這就是 LSTM 三個門以及 cell狀態更新。

在代碼中,我們一般說到的 num_units,指的是LSTM單元中的單位數。
num_units也可以解釋爲前饋神經網絡隱藏層的類比。前饋神經網絡隱層中的節點 num_units數目等於LSTM網絡每個時間步長的LSTM單元的數量。
這裏寫圖片描述
每個num_units,LSTM網絡都可以將它看作是一個標準的LSTM單元。
這裏寫圖片描述

如這篇博客代碼中所說:
一步一步帶你用TensorFlow玩轉LSTM
對於我們的MNIST圖像的情況,我們有大小爲28X28的圖像。它們可以被推斷爲具有28行28像素的圖像。
我們將通過28個時間步驟展開我們的網絡,使得在每個時間步長,我們可以輸入一行28像素(input_size),從而通過28個時間步長輸入完整的圖像。如果我們提供batch_size圖像的數量,每個時間步長將提供相應的batch_size圖像行。下圖應該可以解釋上述描述:
這裏寫圖片描述
生成的輸出static_rnn是形狀的張量列表[batch_size,n_hidden]。列表的長度是網絡展開的時間步長數,即每個時間步長的一個輸出張量。在這個實現中,我們將只關注最後時間的輸出,當圖像的所有行被提供給RNN時,即在最後時間步長將產生預測。

參考:
知乎問題:CNN(卷積神經網絡)、RNN(循環神經網絡)、DNN(深度神經網絡)的內部網絡結構有什麼區別?
[譯] 理解 LSTM 網絡
lstm(一) 演化之路
RNN和LSTM
一步一步帶你用TensorFlow玩轉LSTM

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章