了解RNN模型的基础单元LSTM、GRU、RQNN 与 SRU

作者:HaigLee
https://www.jianshu.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
https://www.jianshu.com/u/67ec21fb270d
本文由 HaigLee 发布。未经许可,禁止转载。

你可能感兴趣的:(了解RNN模型的基础单元LSTM、GRU、RQNN 与 SRU)