这是一篇有关循环神经网络的阅读笔记,阅读来源分别为:
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个例子从左到右分别是:
- 没有使用RNN,从固定大小的输入得到固定大小输出(比如图像分类)
- 序列输出(比如图片描述,输入一张图片输出一段文字序列)
- 序列输入(比如情感分析,输入一段文字然后将它分类成积极或者消极情感)
- 序列输入和序列输出(比如机器翻译)
- 同步序列输入输出(比如视频分类,对视频中每一帧打标签)
双向循环神经网络(BiRNN)
作用
上面提到的循环神经网络只考虑了一种方向的依赖性,即当前的数据依赖于过去的数据,从而忽略了未来的数据也可能帮助我们推测当前的数据,由此引入了双向的循环神经网络。
结构

这里仍然采用前一个图的符号表示,公式如下:
深度循环神经网络(DRNN)
结构
当隐藏层多于一层的时候,就形成了深度循环神经网络,下面是一个深度双向的循环神经网络

这里第i个隐藏层表示为$s^{(i)}_{t}$ 和 $s’^{(i)}_{t}$ ,具体公式如下
长短时记忆网络(LSTM)
作用
在实际运用中,循环神经网络很难处理长期的依赖,并且很容易产生梯度消失或者梯度爆炸的现象,使得RNN的训练也十分困难。因此在LSTM中引入了一个状态,专门用于保存长期的状态,解决了长期依赖的问题。
结构

- 遗忘门$f_t$控制上一时刻的单元状态$c_{t-1}$ 有多少被保留到状态$c_t$
- 输入门$i_t$ 控制当前输入值$x_t$ 产生的中间状态$\widetilde{c}_t$ 有多少被保留到状态$c_t$
公式如下:
Gated Recurrent Unit(GRU)
结构

GRU对LSTM做了两个大改动:
- 将输入门、遗忘门、输出门变为两个门:更新门(Update Gate)$z_t$和重置门(Reset Gate)$r_t$
- 将单元状态与输出合并为一个状态$h$
公式如下:
Nested LSTM
作用
直观上,LSTM 中的输出门会编码仍旧值得记忆的信息,这些记忆可能与当前的时间步骤不相关。嵌套 LSTM 根据这一直观理解来创造一种记忆的时间层级。访问内部记忆以同样的方式被门控,以便于长期信息只有在情景相关的条件下才能选择性地访问。
结构

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