了解RNN模型的基礎單元LSTM、GRU、RQNN 與 SRU

作者:HaigLee
http://www.lxweimin.com/u/67ec21fb270d
本文由 HaigLee 發布。未經許可,禁止轉載。

LSTM & GRU

RNN模型的基礎結構是單元,其中比較常見的有LSTM單元,GRU單元等,它們充當了RNN模型中的基礎結構部分。使用單元搭建出來的RNN模型會有更好的擬合效果。

LSTM單元與GRU單元是RNN模型中最常見的單元,其內容由輸入門、忘記門、和輸出門三種結構組合而成。

LSTM單元與GRU單元的作用幾乎相同,唯一不同的是:

  • LSTM單元返回cell狀態和計算結果。
  • GRU單元只返回計算結果,沒有cell狀態。

相比之下,使用GRU單元會更加簡單。

QRNN單元

QRNN(Quasi-Recurrent Neural Networks) 單元是一種RNN模型的基礎單元,它比LSTM單元速度更快。

QRNN單元發表于2016年。它使用卷積操作替代傳統的循環結構,其網絡結構介于RNN與CNN之間。

QRNN內部的卷積結構可以將序列數據以矩陣方式同時運算,不再像循環結構那樣必須按照序列順序依次計算。其以并行的運算方式取代了串行,提升了運算速度。在訓練時,卷積結構也要比循環結構的效果更加穩定。

在實際應用中,QRNN 單元可以與RNN模型中的現有單元隨意替換。

了解更多,可以參考論文:
Quasi-Recurrent Neural Networks

SRU單元

SRU單元是RNN模型的基礎單元,它的作用與QRNN單元類似,也是對LSTM單元在速度方面進行了提升。

LSTM單元必須要將樣本按照序列順序一個個地進行運算,才能夠輸出結果。這種運算方式使得單元無法在多臺機器并行計算的環境中發揮最大的作用。

SRU單元被發表于2017年。它保留LSTM單元的循環結構,通過調整運算先后順序的方式(把矩陣乘法放在串行循環外,把相乘的再相加的運算放在串行循環內)提升了運算速度。

  • SRU單元結構
    SRU單元在本質上與QRNN單元很像。從網絡構建上看,SRU單元有點像QRNN單元中的一個特例,但是又比QRNN單元多了一個直連的設計。

若需要研究SRU單元更深層次理論,可以參考如下論文:
Simple Recurrent Units for Highly Parallelizable Recurrence

  • SRU單元的使用
    在tensorflow中,用函數tf.contrib.SRUCell可以使用SRU 單元。該函數的用法與函數LSTMCell 的用法完全一致(函數LSTMCell是LSTM單元的實現)。

關于函數tf.contrib.rnn.SRUCell 的更多使用方法,可以參照官方幫助文檔。
https://www.tensorflow.org/api_docs/python/tf/contrib/rnn/SRUCell
注:需要科學上網

github可以參考:
https://github.com/tensorflow/tensorflow/blob/r1.15/tensorflow/contrib/rnn/python/ops/rnn_cell.py#L2738-L2816

作者:HaigLee
http://www.lxweimin.com/u/67ec21fb270d
本文由 HaigLee 發布。未經許可,禁止轉載。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容