循环神经网络

循环神经网络

循环神经网络(Recurrent Neural Network,RNN)是一类具有短期记忆能力的神经网络。在循环神经网络中,神经元不但可以接受其它神经元的信息,也可以接受自身的信息,形成具有环路的网络结构。和前馈神经网络相比,循环神经网络更加符合生物神经网络的结构。循环神经网络已经被广泛应用在语音识别、语言模型以及自然语言生成等任务上。循环神经网络的参数学习可以通过随时间反向传播算法来学习。随时间反向传播算法即按照时间的逆序将错误信息一步步地往前传递。当输入序列比较长时,会存在梯度爆炸和消失问题,也称为长期依赖问题。为了解决这个问题,人们对循环神经网络进行了很多的改进,其中最有效的改进方式引入门控机制。

循环神经网络RNN

循环神经网络通过使用带自反馈的神经元,能够处理任意长度的时序数据。
循环神经网络
循环神经网络

简单循环网络SRN

SRN是一个非常简单的循环神经网络,只有一个隐藏层的神经网络。
在一个两层的前馈神经网络中,连接存在相邻的层与层之间,隐藏层的节点之间是无连接的。而简单循环网络增加了从隐藏层到隐藏层的反馈连接。
循环神经网络

参数学习

循环神经网络的参数可以通过梯度下降方法来进行学习。
循环神经网络

随时间反向传播算法BPTT

随时间反向传播(Backpropagation Through Time,BPTT)算法的主要思想是通过类似前馈神经网络的错误反向传播算法来进行计算梯度。
BPTT算法将循环神经网络看作是一个展开的多层前馈网络,其中“每一层”对应循环网络中的“每个时刻”。这样,循环神经网络就可以按照前馈网络中的反向传播算法进行计算参数梯度。在“展开”的前馈网络中,所有层的参数是共享的,因此参数的真实梯度是将所有“展开层”的参数梯度之和。
循环神经网络
循环神经网络

实时循环学习算法RTRL

与反向传播的BPTT算法不同的是,实时循环学习(Real-Time RecurrentLearning,RTRL)是通过前向传播的方式来计算梯度。

循环神经网络
两种算法比较 RTRL算法和BPTT算法都是基于梯度下降的算法,分别通过前向模式和反向模式应用链式法则来计算梯度。在循环神经网络中,一般网络输出维度远低于输入维度,因此BPTT算法的计算量会更小,但是BPTT算法需要保存所有时刻的中间梯度,空间复杂度较高。RTRL算法不需要梯度回传,因此非常适合用于需要在线学习或无限序列的任务中。

长期依赖问题

循环神经网络在学习过程中的主要问题是长期依赖问题。
循环神经网络
改进方案:
循环神经网络
循环神经网络
基于门控的循环神经网络
为了改善循环神经网络的长期依赖问题,一种非常好的解决方案是在公式(6.50)的基础上,引入门控机制来控制信息的累积速度,包括有选择地加入新的信息,并有选择地遗忘之前累积的信息。这一类网络可以称为基于门控的循环神经网络(Gated RNN)。本节中,主要介绍两种基于门控的循环神经网络:长短期记忆网络和门控循环单元网络。

长短期记忆网络LSTM
LSTM是循环神经网络的一个变体,可以有效地解决简单神经网络的梯度爆炸或消失问题。

循环神经网络
循环神经网络

循环神经网络
循环神经网络

参考:
https://blog.csdn.net/AZRRR/article/details/90550860