1. 程式人生 > >RNN與LSTM原理

RNN與LSTM原理

激活 行操作 lar open 原理 深入 先來 src 結構

下面只是我個人的理解,最近在做關於LSTM的項目,看看還能不能理解的更深入,之後還會根據項目進行更新。如果有錯誤還請多多指教

1. 傳統神經網絡

介紹遞歸神經網絡之前我們可以先看一下傳統神經網絡

技術分享圖片

傳統神經網絡所作的這一系列的組合是對一個數據一個數據進行操作的。假設我們有100個圖像數據,第一個圖像被

opencv後,來到這裏做一系列操作,第二個圖像數據也是如此,後面以此類推。我們發現第一次輸入的圖像數據並不

會對第二次輸入的數據造成影響,每次輸入的數據都是獨立地去組合參數,參數更新之間互不影響。

但在實際任務中,每個數據之間是有關系的,我們希望這個網絡不僅僅是把每個數據走一遍,它還可以考慮之前的信息,

把數據之間的聯系突出出來。這時候RNN(遞歸神經網絡)派上用場了,它可以把前一層的信息利用上去。

2.RNN

技術分享圖片

input層與W1組合後得到一個中間的信息(特征)——當前輸入。那麽之後的輸入要把前面的信息利用上,所以要指定一個W2,

W2是對中間信息的保留,在下次流程就可以利用上了。——即下一次輸入時會結合保留的特征一起作為總特征。

技術分享圖片

展開來看我們發現網絡有兩個輸入,一個是上層保留的信息,一個是當前輸入輸出也有兩個,一個作為下次的輸入信息,另一個

可以直接輸出為結果,不過我們一般都是把最後一個輸出作為結果。

技術分享圖片

 

這樣一看感覺RNN很厲害,可以把之前的所有信息全部記住。但是這只是從理論上來看,實際上它並記不了那麽多信息。

和傳統

神經網絡一樣,它也要反向傳播優化參數,反向傳播就是梯度累乘,這累乘容易出事啊,隨著梯度變小,這可是越乘越小,最後發生

梯度消失現象,那麽參數就無法繼續更新,也就是再往後得到的梯度對整個梯度值幾乎沒有影響。比如說當前時刻為t,在t-4時刻

生梯度消失,那麽t-4之前也就是t-5,t-6。。。這些狀態都被忽略掉了,也就是說RNN根本沒有及那麽多信息。這個時候我們的LSTM

(長短時記憶網絡)登場了。

3.LSTM

LSTM可以說是RNN的升級版本。

技術分享圖片

RNN只有一個狀態,也就是保存短期的狀態(原因就是梯度消失),LSTM有兩個狀態,一個是保存短期的狀態,另一個是cell state,

這兩個組合在一起就是保存長期的狀態

技術分享圖片

技術分享圖片

這兩個都是LSTM的結構圖,我個人是看了下面的那幅結構圖才明白了Ct 很多

我們先來看LSTM結構裏都有哪些東西

1. 激活函數

我們先理解激活函數,在整個網路結構裏有兩種激活函數,一個是sigmoid,一個是tanh。sigmoid函數是把信息壓縮為0到1之間的數,

這樣就可以對輸入的信息進行篩選,表示門被打開的程度。tanh函數是把得到的信息進行壓縮處理,起到穩定數值的作用,把值壓縮在

-1到1之間,僅此而已。

2. ft it 是過濾器 Ct-1 ~ct ,Ct 是長期信息,是記憶 ht-1 , ht 是短期信息

Ct-1 * ft 決定了過去記憶Ct-1有多少保留到當前記憶時刻Ct ——遺忘門——更新後的過去記憶

~ct * it 決定了當前時刻網絡輸入Xt 有多少保留到Ct ——輸入門——更新後的當前記憶

LSTM就是在不斷地更新cell state,不斷地更新記憶

RNN與LSTM原理