【图文并茂】RNN、LSTM、GRU、ConvLSTM、ConvGRU、ST-LSTM的总结
前言
平時很少寫總結性的文章,感覺還是需要階段性總結一些可以串在一起的知識點,所以這次寫了下。因為我寫的內容主要在時序、時空預測這個方向,所以主要還是把rnn,lstm,gru,convlstm,convgru以及ST-LSTM
一、 RNN
最為原始的循環神經網絡,本質就是全連接網絡,只是為了考慮過去的信息,輸出不僅取決于當前輸入,還取決于之前的信息,也就是輸出由之前的信息(也就是狀態state)和此時的輸入決定。
1.1 結構圖
1.2 公式
1.3 優缺點
1.3.1 優點
① RNN 很適合處理序列數據,因為考慮了之前的信息
② 可以和CNN一起使用得到更好的任務效果
1.3.2 缺點
① 梯度消失、梯度爆炸
② rnn較其他cnn和全連接要用更多的顯存空間,更難訓練
③ 如果采用tanh、relu為激活函數,沒法處理太長的序列
二、LSTM
為了解決梯度消失和爆炸以及更好的預測和分類序列數據等問題,rnn逐漸轉變為lstm
2.1 結構圖
2.2 公式
2.3 擴展
實際應用中一般不采用單層的lstm,而是多層,在很多時序數據中雙向的表現也很不錯
2.3.1 雙向lstm
2.3.2 深層雙向lstm
三、 GRU
因為LSTM的訓練比較慢,而GRU在其上稍微修改,速度可以快很多,而精度基本不變,所以GRU也十分流行
3.1 結構圖
3.2 公式
3.3 LSTM和GRU的結構區別
可以觀看【Deep Learning】詳細解讀LSTM與GRU單元的各個公式和區別
四、 ConvLSTM和ConvGRU
為了構建時空序列預測模型,同時掌握時間和空間信息,所以將LSTM中的全連接權重改為卷積。
4.1 convLSTM結構圖
4.2 convLSTM公式(原paper中)
4.3 convGRU(原paper中)
4.4 討論一個小問題
shixingjian博士提出的ConvLSTM通過他的描述來說應該就是其中的W也就是每個權重都從普通的全連接權重改為了卷積。所以應該從左到右轉變,正常來說右處應該是不存在i,f以及o三個門只由X和Ht-1決定,而沒有C。即不存在以下的結構。
這里咱們再重新看下博士的緊接著nips2016年的文章中所提到的convGRU也是不存在C的,并且可以和gru公式一一對應。
這里我不知道是博士當時就是這么實現的并且效果很好,還是說有無C對三個門的影響對最終的實驗結果沒有太大的影響,還是說確實是寫作失誤,這里我不太好給出結論。這里可以斷定的是軌跡GRU那篇文章中對于結構完全是從GRU轉變為convGRU的這里絕對沒問題。我也因此查了幾篇期刊和頂會。
摘自ECCV2018摘自IEEE Trans
之后我又調查了一些文章,很巧妙,頂會基本上都是沒有c的形式,而期刊大多都有。這里我做了另外一個調查,github上的實現,大多數都是從LSTM直接轉變為的Convlstm的寫法也就是不存在C影響三個門,因為我當時復現的時候也是先實現了LSTM,之后加以改為ConvLSTM所以說沒太注意,我這回自己也做了下這個實驗,沒有加上的結構可以很好的作時空預測,反而加上c之后會出現梯度的問題,所以這里大家可以有一些自我的理解。
我個人還是推薦直接從LSTM轉變為convLSTM的結構,這個稍后如何編寫代碼我也會逐步寫文章講解。
五、 ST-LSTM
這里主要給出 ST-LSTM結構及公式。
5.1 ST-LSTM結構圖
5.2 ST-LSTM公式
5.3 stacking結構
這個模型的復現和編寫我會在不久之后專門寫一篇文章來講,并且因為是這種直接stacking的結構會有一些訓練的trick,比如Scheduled Sampling等。
Reference
https://towardsdatascience.com/understanding-rnn-and-lstm-f7cdf6dfc14e
http://www.wildml.com/2015/09/recurrent-neural-networks-tutorial-part-1-introduction-to-rnns/
https://towardsdatascience.com/illustrated-guide-to-lstms-and-gru-s-a-step-by-step-explanation-44e9eb85bf21
https://medium.com/neuronio/an-introduction-to-convlstm-55c9025563a7
總結
以上是生活随笔為你收集整理的【图文并茂】RNN、LSTM、GRU、ConvLSTM、ConvGRU、ST-LSTM的总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Python基础】Python 100
- 下一篇: 【Python基础】Pandas批量合并