循环神经网络RNN及其变种

这是一篇有关循环神经网络的阅读笔记,阅读来源分别为:

https://www.jianshu.com/p/f3bde26febed

https://zybuluo.com/hanbingtao/note/541458

http://www.sohu.com/a/220858232_129720

http://www.sohu.com/a/220858232_129720

循环神经网络(RNN)

作用

循环神经网络(Recurrent Neural Network),最早是为了处理序列而建立的模型,专门用于处理类似时间序列,视频,文本等具有前后关联性的数据。以此作为动机,不难想到,这个神经网络需要采取一种序列形式的结构,并且能够将所有历史信息与当前信息相结合,从而给出我们需要的结果。下面是RNN的具体结构。

结构

这个网络在$t$时刻接收到输入之后,隐藏层的值是$s_t$,输出值是$o_t$。其中公式如下:

输出值同时受到上一时刻的隐藏层和当前输入值的影响。

推广

在了解RNN的基本结构之后,就可以通过调整输入和输出的结构来完成不同的任务

上图中的5个例子从左到右分别是:

  1. 没有使用RNN,从固定大小的输入得到固定大小输出(比如图像分类)
  2. 序列输出(比如图片描述,输入一张图片输出一段文字序列)
  3. 序列输入(比如情感分析,输入一段文字然后将它分类成积极或者消极情感)
  4. 序列输入和序列输出(比如机器翻译)
  5. 同步序列输入输出(比如视频分类,对视频中每一帧打标签)

双向循环神经网络(BiRNN)

作用

上面提到的循环神经网络只考虑了一种方向的依赖性,即当前的数据依赖于过去的数据,从而忽略了未来的数据也可能帮助我们推测当前的数据,由此引入了双向的循环神经网络。

结构

这里仍然采用前一个图的符号表示,公式如下:

深度循环神经网络(DRNN)

结构

当隐藏层多于一层的时候,就形成了深度循环神经网络,下面是一个深度双向的循环神经网络

这里第i个隐藏层表示为$s^{(i)}_{t}$ 和 $s’^{(i)}_{t}$ ,具体公式如下

长短时记忆网络(LSTM)

作用

在实际运用中,循环神经网络很难处理长期的依赖,并且很容易产生梯度消失或者梯度爆炸的现象,使得RNN的训练也十分困难。因此在LSTM中引入了一个状态,专门用于保存长期的状态,解决了长期依赖的问题。

结构

  1. 遗忘门$f_t$控制上一时刻的单元状态$c_{t-1}$ 有多少被保留到状态$c_t$
  2. 输入门$i_t$ 控制当前输入值$x_t$ 产生的中间状态$\widetilde{c}_t$ 有多少被保留到状态$c_t$

公式如下:

Gated Recurrent Unit(GRU)

结构

GRU对LSTM做了两个大改动:

  1. 将输入门、遗忘门、输出门变为两个门:更新门(Update Gate)$z_t$和重置门(Reset Gate)$r_t$
  2. 将单元状态与输出合并为一个状态$h$

公式如下:

Nested LSTM

作用

直观上,LSTM 中的输出门会编码仍旧值得记忆的信息,这些记忆可能与当前的时间步骤不相关。嵌套 LSTM 根据这一直观理解来创造一种记忆的时间层级。访问内部记忆以同样的方式被门控,以便于长期信息只有在情景相关的条件下才能选择性地访问。

结构

记忆单元的输入和隐藏状态为:

内部LSTM的计算为:

如果不看内部LSTM,并且使单元状态为$c_t=\widetilde{h}_{t-1}+\widetilde{x}_{t}$ 则结构就是普通的LSTM,而在嵌套LSTM中,单元状态的更新为:

0%