RNN
本文适用于对循环神经网络有一定基础的研究者、且本文只用于本人知识点的归纳总结,若侵权,留言删除
本文主要思想来源于
《动手学深度学习》(PyTorch版)-第六章节
A Beginner’s Guide to LSTMs and Recurrent Neural Networks
推荐先看《动手学深度学习》
1、MLP(Multilayer Perceptron-多层感知机)
在了解循环神经网络之前,需要首先了解全连接网络,两者都是通过信息在网络节点上执行的数学运算方式命名,MLP是直接传送信息,RNN则是循环传递信息
2、RNN(Recurrent Neural Networks-循环神经网络)
循环神经网络类似于人脑的记忆方式,由两个因素影响:
a、先前的经验知识
b、现有的获取知识
然后二者相结合,可以得出当前新的认知。示例填空题如下:
我 昨天 上学 迟到 了 ,老师 批评 了 ____。
根据空格前面的字,推测空格处应该填的字是啥,根据“了”,或者”评了“,或者”批评了“,或者进一步往前获取知识。最终,我们可以将”我“填入空格,空格前面的内容就包括先前的经验知识和现有的获取知识,最后判断出所填知识。
所以循环神经网络的基本构造如下图:
其计算步骤:
a、首先根据上一时刻的隐藏层和当前时刻输入计算当前时刻的隐藏层状态
d、最后根据应隐藏层状态计算输出层
其中 t 时刻的输出由 t - 1 时刻的输入 H_t-1 和 x 时刻的输入 X_t 决定,并且输出 t 时刻的经验给 t + 1 时刻作为输入。隐藏状态 H_t 的计算公式如下:
输出层的计算公式如下:
3、GRU(gated recurrent neural network-门控循环神经网络)
循环神经网络很容易出现梯度消失或者梯度爆炸,梯度爆炸可通过裁剪梯度来解决,梯度消失则需要通过改变网络结构来解决。GRU(gated recurrent neural network-门控循环神经网络)就是用来解决梯度消失问题而设计的。
门控循环神经网络单元的设计,主要是由于引入了两个门控单元:重置门(reset gate)和更新门(update gate),从而修改了循环神经网络的隐藏层计算方式。其结构如下:
其计算步骤:
a、首先根据上一时刻的隐藏层和当前时刻输入计算重置门和更新们
b、然后根据上一时刻的隐藏状态和重置门的结果以及当前时刻的输入计算候选隐藏状态
c、接着根据上一时刻的隐藏状态和更新门以及候选隐藏层计算隐藏层状态
d、最后根据应隐藏层状态计算输出层
重置门(reset gate)和更新门(update gate)计算格式如下:
候选隐藏状态计算格式如下:
由计算公式可以知道,重置门控制着上一时间步的隐藏状态如何流入当前时间步的候选隐藏状态。重置门可以用来控制丢弃与预测无关的历史信息。
隐藏层状态计算格式如下:
由计算公式可以看出隐藏状态是如何被包含当前时间步的候选隐藏状态所影响的。
输出层计算格式如下:
总结:
重置门有利于捕捉时间序列中短期的依赖关系
更新门有利于捕捉时间序列中长期的依赖关系
4、LSTM(long short-term memory-长短期记忆)
长短期记忆结构单元的设计比GRU稍微复杂一些,它引入了三个门:输入门(input gate)、遗忘门(forget gate)、输出门(output gate)。还有一个和隐藏状态形状类似的记忆细胞(主要用来记忆额外的信息)。其结构如下:
其计算步骤是:
a、首先根据上一时刻的隐藏层和当前时刻的输入计算输入门、遗忘门、输出门
b、然后根据上一时刻的隐藏层和当前时刻的输入计算当前层候选记忆细胞
c、接着根据上一时刻的记忆细胞和当前层的输入门、遗忘门以及候选记忆细胞计算当前层的记忆细胞
d、紧接着根据输出门和记忆细胞计算当前层隐藏层状态
e、最后根据应隐藏层状态计算输出层
输入门(input gate)、遗忘门(forget date)、输出门(output gate)的计算格式如下:
候选记忆细胞计算格式如下:
记忆细胞计算格式如下:
隐藏层状态计算格式如下:
输出层计算格式如下:
总结:
LSTM的隐藏层输出由两个:记忆细胞和隐藏状态
可以应对循环神经网络的梯度消失问题,并且能够很好的记忆时间步较大距离的依赖关系