Recurrent Neural Network (RNN)
一、什麼是RNN面試
二、LSTM網絡
1、什麼是LSTM框架
2、LSTM框架函數
三、RNN分析學習
RNN
一、什麼是RNN
- RNN能夠處理序列的信息(即前面的輸入對後面是有關係的)
下面經過一個訂票系統的例子去說明什麼是RNN:spa
1)、目標:假設咱們如今作這麼一個事情,說下面一句話,系統會自動知道Taipei是目的地,November是時間3d
2)、若是沒有把這句話當作一個序列,那麼用前饋神經網絡方法的話,這樣是沒有考慮到上下文的。blog
3)、所以要解決這個問題,模型須要有memory,這就引出了RNNip
RNN具體是怎麼作到記憶的呢get
再看看RNN是如何解決Slot Filling的問題:
- 注意的是,下面不是三個神經網絡,而是同一個神經網絡
4)RNN種類
雙向神經網絡:在產生Y{t+1}的時候,你的network不僅是看過xt到x{t+1}全部的input,它也看了從句尾到x{t+1}的input
二、LSTM
1、什麼是LSTM
- 左圖中,LSTM是四輸入一輸出,其中有三個gate,每一個gate打開仍是關閉,都是學出來的
- 右圖中,Z,Zi,Z0都是數值輸入,三個gate使用的激活函數是sigmoid,因而把各個輸入輸出就能夠用式子表示出來
舉個栗子說明:
輸入:三維vector[x1,x2,x3]
輸出:一維vector y
下圖從左到右表示更新過程,藍色表明memory
代入LSTM中訓練:(假設要訓練的bias-10和weight100都已知)
2、LSTM框架
- LSTM的參數是普通神經網絡的四倍
進一步揭開LSTM面紗
- 輸入Xt先通過線性轉化爲4個vector組成的Z
多層的LSTM感覺一下
- C是memory的vector
- h是上一個LSTM神經元隱層的輸出
三、RNN分析
1、RNN會出現「懸崖」(梯度消失或爆炸)問題
Total Loss對於參數的偏導的曲面是很不平整的,有不少斷崖,所以會出現好幾種狀況:
- 第一種:1→2→3跳躍到懸崖上
- 第二種:1→2→4踩到牆腳
- 第三種:1→2→4→5加大學習率後直接飛出去
用clipping方法(當gradient大於某一個threshold的時候,不要讓它超過那個threshold),當gradient大於15時,讓gradient等於15結束
爲何RNN會有這樣的特性?是否是由於sigmoid函數會形成梯度消失?換成ReLU會不會解決這個問題?
答案是:sigmoid函數不是形成不平整的緣由,且ReLU在RNN上表現並不如sigmoid。因此activation function並非這裏的關鍵點。
2、懸崖問題分析
如今w是咱們要學習的參數,咱們須要知道它的gradient,只要稍微改變w 的值,看看對output有多大的影響。
3、問題解決方案
面試題:LSTM爲何能夠解決RNN的梯度消失問題?
LSTM和RNN在處理memory cell裏面的值的方式不同:
RNN每次都把新的值存到memory cell裏面,舊的值被替換;
LSTM則用了input gate的計算結果與輸入相乘後的值累加到memory cell裏面。
思想:
- RNN每次都替換舊的值,舊的值沒有辦法對最後的值有所影響;
- LSTM則採用累加策略,舊的值的還在memory cell裏面,也就意味舊的值還持續影響最後輸出;
- 也就是說在LSTM裏面,一旦對memory形成影響,那影響一直會被留着(除非forget gate要把memory的值洗掉),否則memory一旦有改變,只會把新的東西加進來,不會把原來的值洗掉,因此它不會有gradient vanishing的問題
其實LSTM的第一個版本其實就是爲了解決gradient vanishing的問題,因此它是沒有forget gate,forget gate是後來才加上去的。甚至,如今有個傳言是:你在訓練LSTM的時候,你要給forget gate特別大的bias,你要確保forget gate在多數的狀況下都是開啓的,只要少數的狀況是關閉的