一,RNN
在BP神经网络和CNN中,输入输出都是互相独立的,但是在实际应用中有些场景输出内容和之前的内容是由关联的,比较典型的就是在处理序列信息的时候。
循环神经网络,在全连接神经网络的基础上增加了前后时序上的关系,对序列数据有较强的处理能力
在Pytorch的关于RNN的介绍中(详细页面),对于每层的定义如下:
式子中的代表这层的激活函数,后面括号里面的前半部分代表时间t的的输入,后半部分代表时刻t-1的输入
在如下的RNN计算结构图中
圆形的箭头表示隐藏层的自连接。在RNN中,每一层都共享参数U、V、W,降低了网络中需要学习的参数,提高学习效率。
网络的参数通过使用Back Propagation Through Time 算法,简称BPTT来得到。
循环神经网络的每个训练样本是一个时间序列,同一个训练样本前后时刻的输入值之间有关联,每个样本的序列长度可能不相同。训练时先对这个序列中的每个时刻的输入值进行正向传播,再通过反向传播计算出参数的梯度值并更新参数。
二,LSTM
2.1 理解LSTM
长短时记忆神经网络,简称LSTM,是一种特殊的RNN。
传统的RNN在处理长序列数据时存在梯度消失和梯度爆炸的问题,这会导致难以捕捉到长距离依赖关系,因此在长序列任务上的表现不佳。
具体来说:
- 梯度消失问题:在反向传播过程中,RNN中的梯度会随着时间步的增加而指数级衰减,导致在处理长序列时难以有效地传播梯度,从而无法捕捉到远距离的依赖关系。
- 梯度爆炸问题:有时梯度反而会增长得过快,导致数值溢出(梯度爆炸),使得训练不稳定甚至不可行。
于是提出了长短时记忆网络(LSTM)(论文地址),它的结构如下所示:
2.2 LSTM结构
LSTM引入三个门(输入门、遗忘门和输出门)和一个记忆单元,这些门控制着信息的流动,允许LSTM在长序列中选择性地记忆或遗忘信息。
2.2.1 核心
首先是核心,这条长直线被称为细胞状态,决定什么样的信息会被保留,什么样的信息会被遗忘
2.2.2 门结构
而决定哪些信息通过即是通过如下所示的门结构完成,门是由sigmoid层和点乘操作组成的,sigmoid层输出0-1,0表示不允许通过,1表示都可以通过,中间的即表示可以通过的部分
在LSTM中,有着三个门,即遗忘门、输入门和输出门
(1)遗忘门
结构如下
结合结构可看出,和通过sigmoid层后,输出,的值为0表示完全丢弃,1表示完全保留。
所以它负责决定保留多少上一时刻的单元状态到当前时刻的单元状态
(2)输入门
结构如下
决定保留多少当前时刻的输入到当前时刻的单元状态,一个是先通过sigmoid层决定要更新什么值,另一个部分是tanh层,把需要更新的信息更新到细胞状态里
然后再更新旧细胞状态
将更新为,就是把经过遗忘门后传递来的信息加上这时的输入门的信息,这个也是传递给下一个单元的
(3)输出门
决定当前时刻的单元状态有多少输出。sigmoid层确定细胞状态的哪个部分输出,通过 tanh 进行处理,并将它和 sigmoid 门的输出相乘,得到我们确定输出的那部分
三,GRU
GRU(Gated Recurrent Unit,门控循环单元)是一种类似于LSTM的循环神经网络(RNN)变体,也是为了解决传统RNN的梯度消失和梯度爆炸问题而提出的。
内部结构如下:
与LSTM相比,GRU的结构更加简单,只有两个门,更新门和重置门
- 更新门(Update Gate):控制了新输入数据与之前记忆的融合程度。更新门的开关性质允许GRU决定保留多少先前的信息。
- 重置门(Reset Gate):控制了之前记忆对当前时间步输入的影响程度。通过这种方式,GRU能够选择性地忽略先前的信息,从而适应不同时间步的数据特征。
GRU的训练速度通常更快,参数数量更少。由于其较简单的结构和良好的性能,GRU在很多应用中被广泛使用,尤其是当计算资源有限或需要快速迭代模型时。