RNN、LSTM、GRU學習補充

隱藏層神經元個數的解釋
每一個小黃框代表一個前饋網絡層,對,就是經典的神經網絡的結構,num_units就是這個層的隱藏神經元個數(例如128,256)
https://www.zhihu.com/question/64470274

 

雙向 LSTM
我今天不舒服,我打算__一天。

只根據‘不舒服‘,可能推出我打算‘去醫院‘,‘睡覺‘,‘請假‘等等,但如果加上後面的‘一天‘,能選擇的範圍就變小了,‘去醫院‘這種就不能選了,而‘請假‘‘休息‘之類的被選擇概率就會更大。

雙向循環神經網絡的隱藏層要保存兩個值, A 參與正向計算, A’參與反向計算。最終的輸出值 y 取決於 A 和 A’
https://blog.csdn.net/aliceyangxi1987/article/details/77094970
 

單層lstm,兩層lstm,四層lstm
https://www.zhihu.com/question/48044772

 

將x輸入第一層RNN的後得到隱層狀態h,這個隱層狀態就相當於第二層RNN的輸入,第二層RNN的隱層狀態又相當於第三層RNN的輸入,以此類推。在TensorFlow中,可以使用tf.nn.rnn_cell.MultiRNNCell函數對RNNCell進行堆疊

Char RNN
https://www.leiphone.com/news/201709/QJAIUzp0LAgkF45J.html

 

RecurrentNNs的拓撲發生了一個很大的改動,即一個MLP會在time_step這個維度上進行延伸,每個時序都會有input。

假設一個RNN的time_step 確定爲 l ,則padded sentence length(step5中矩陣列數)固定爲 l。
一次RNNs的run只處理一條sentence。每個sentence的每個token(中文分詞)的embedding對應了每個時序 t 的輸入。
https://www.zhihu.com/question/41949741

 

相比普通的RNN,LSTM能夠在更長的序列中有更好的表現。

相比RNN只有一個傳遞狀態  h^t  ,LSTM有兩個傳輸狀態,一個  c^t (cell state),和一個  h^t (hidden state)。(Tips:RNN中的 h^t 對應於LSTM中的 c^t )

首先使用LSTM的當前輸入 x^t 和上一個狀態傳遞下來的 h^{t-1} 拼接訓練得到四個狀態。

LSTM內部主要有三個階段:
1. 忘記階段(遺忘門)。通過計算得到的 z^f (f表示forget)來作爲忘記門控,來控制上一個狀態的 c^{t-1} 哪些需要留哪些需要忘。
2. 選擇記憶階段(輸入門)。當前的輸入內容由前面計算得到的  z  表示。而選擇的門控信號則是由 z^i (i代表information)來進行控制。
將上面兩步得到的結果相加,即可得到傳輸給下一個狀態的 c^t 。也就是上圖中的第一個公式。
3. 輸出階段(輸出門)。主要是通過  z^o 來進行控制的。並且還對上一階段得到的 c^t 進行了放縮(通過一個tanh激活函數進行變化)。輸出 y^t 往往最終也是通過 h^t 變化得到。

因爲引入了很多內容,導致參數變多,也使得訓練難度加大了很多。因此很多時候我們往往會使用效果和LSTM相當但參數更少的GRU來構建大訓練量的模型。
https://zhuanlan.zhihu.com/p/32085405

GRU模型只有兩個門了,分別爲更新門和重置門
https://blog.csdn.net/wangyangzhizhou/article/details/77332582

https://zhuanlan.zhihu.com/p/32481747

 

RNN梯度消失和爆炸的原因
https://zhuanlan.zhihu.com/p/28687529

LSTM如何解決梯度消失問題
https://zhuanlan.zhihu.com/p/28749444

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