一、循环神经网络概述:
1.传统神经网络与循环神经网络的区别:
MLP、卷积神经网络输入的batch都是独立的样本数据,一个batch中各个样本之间独立没有关系,独立作为输入进入神经网络进行训练与预测。如果要完成序列问题(序列信息即信息之间有明显的上下文关系、顺序关系的数据集),举个例子,batch中包含三个训练样本:Hello、World、!,训练目标即输入Hello来预测World!时,使用传统神经网络就无法很好的进行训练,因为神经网络输入层的输入规模是固定的,仅能使用Hello作为输入预测World、使用World作为输入预测!,显然这存在弊端,因为使用World预测!很困难。于是我们在想如何使用Hello World来来预测!。循环神经网络应运而生。
下图展示了传统神经网络与循环神经网络的区别:
RNN 能够在处理序列数据时考虑到数据之间的依赖关系是通过红线部分实现的,这一部分叫做隐藏状态,他保存了前面的样本隐藏层输出的所有特征信息。
具体来说:
- 1.对于输入Hello来预测World!时,首先输入层样本Hello通过隐藏层提取Hello的特征后由输出层预测World,这一步和传统神经网络没有区别。
- 2.对于第二个样本输入World时,我们不仅想要使用输入层样本World来预测!,还想要加入序列中的Hello来更好的执行预测,因此我们将输入层样本World与上一层Hello的特征信息进行Concat拼接共同作为当前隐藏层的输入。
2.循环神经网络定义:
在一个经典的循环神经网络中,每一层隐藏层的输入由当前层输入层的输出样本和上一时刻隐藏层的输出组成。这意味着在每个时间步,隐藏层会接收来自输入层和上一时刻隐藏层的特征信息,帮助模型更好地捕捉来自不同时间步的信息,并从中学习到时序特征。(而传统神经网络中每个时间步,隐藏层仅接收输入层的输出样本)
注意:其中上一层隐藏层的输出特征记录了之前所有时间步内的特征信息(迭代)。
注:这里说的一个时间步就是一个输入样本(而不是batch)经过完整神经网络完成预测的过程。
模型展开如下: