循环神经网络

花书中关于RNN的内容记录在/p/206090600f13中。

在前向神经网络中,信息传递是单向的。这种限制虽然使网络更容易学习,但也在一定程度上削弱了神经网络模型的能力。在生物神经网络中,神经元之间的连接要复杂得多。前馈神经网络可以看作是一个复杂的函数,每个输入都是独立的,即网络的输出只取决于当前的输入。然而,在许多实际任务中,网络的输入不仅与当前输入有关,还与其过去的输出有关。因此,前馈网络很难处理时间序列数据,如视频、语音、文本等。时间序列数据的长度一般是不固定的,而前馈神经网络要求输入和输出的维数是固定的,不能任意改变。因此,在处理这类与时间序列相关的问题时,需要一个更强大的模型。

递归神经网络(RNN)是一种具有短期记忆能力的神经网络。在循环神经网络中,神经元不仅可以接受其他神经元的信息,也可以接受自身的信息,形成一个具有环路的网络结构。与前馈神经网络相比,循环神经网络更符合生物神经网络的结构。循环神经网络已广泛应用于语音识别、语言建模和自然语言生成。循环神经网络的参数学习可以用带时间的反向传播算法来学习。

为了处理这些时间序列数据并利用它们的历史信息,我们需要使网络具有短时记忆能力。前馈网络是静态网络,不具有这种记忆能力。

使用历史信息的一个简单方法是设置一个额外的延时单元来存储网络的历史信息(包括输入、输出、隐藏状态等。).典型的模型是延迟神经网络。

延迟神经网络是在前馈网络的非输出层增加一个延迟,记录神经元最近时刻的输出。在第个时刻,层神经元的最新输出与层神经元的输出相关,即:

延迟神经网络在时间维度上享有权值以减少参数数量。因此,对于序列输入,延迟神经网络相当于卷积神经网络。

自回归模型(AR)是统计学中常用的一种时间序列模型,它利用一个变量的历史信息来预测自身:

其中是超参数,是参数,是一阶矩的噪声,方差与时间无关。

具有外部输入的非线性外生输入自回归模型(NARX)是自回归模型的扩展,每时每刻都有一个外部输入产生一个输出。NARX通过一个延时装置记录最近的外部输入输出,第一时刻的输出为:

其中它表示非线性函数,可以是前馈网络,和是超参数。

通过使用具有自反馈的神经元,循环神经网络可以处理任意长度的时间序列数据。

给定一个输入序列,递归神经网络经历以下过程

该公式使用反馈边更新隐藏层的活动值:

其中它是非线性函数或前馈网络。

数学上,上述公式可以看作是一个动态系统。动力系统是一个数学概念,指状态随时间按照一定规律变化的系统。具体来说,动态系统是用一个函数来描述给定空间(如物理系统的状态空间)中所有点随时间的变化。因此,隐藏层的活动值在许多文献中也被称为状态或隐藏状态。理论上,循环神经网络可以逼近任何非线性动态系统。

简单递归网络(SRN)是一种非常简单的递归神经网络,只有一个隐含层。

在两层前馈神经网络中,相邻层之间存在连接,隐藏层中的节点是不连接的。而简单循环网络增加了隐含层到隐含层的反馈连接。

假设在时刻,网络的输入是隐层状态(即隐层神经元活动值)不仅与当前时刻的输入有关,还与前一时刻的隐层状态有关:

其中它是隐藏层的净输入、通常为逻辑函数或双曲正切函数的非线性激活函数、状态-状态权重矩阵、状态-输入权重矩阵和偏移量。以上两种类型往往直接写成:

如果我们把每个时刻的状态看成一层前馈神经网络,那么循环神经网络就可以看成是一个在时间维度上有* * *个权值的神经网络。下图显示了按时间展开的循环神经网络。

递归神经网络由于具有短期记忆能力,相当于一个存储设备,所以计算能力非常强大。前馈神经网络可以模拟任何连续函数,而循环神经网络可以模拟任何程序。

定义一个全连接的循环神经网络,其输入为,输出为:

其中是隐藏状态、非线性激活函数和网络参数。

这样的全连接循环神经网络可以近似解决所有可计算的问题。

循环神经网络可以应用于许多不同类型的机器学习任务。根据这些任务的特点,可以分为以下几种模式:序列到类别模式、同步序列到序列模式和异步序列到序列模式。

序列到类别模式主要用于序列数据的分类:输入是序列,输出是类别。例如,在文本分类中,输入数据是单词序列,输出是文本的类别。

假设一个样本是一个长度序列,输出是一个类别。我们可以在不同时刻将样本输入递归神经网络,得到不同时刻的隐状态。我们可以将其视为整个序列的最终表示(或特征),并将其输入分类器进行分类:

可以是简单的线性分类器(如Logistic回归),也可以是复杂的分类器(如多层前馈神经网络)。

除了将最后时刻的状态表示为一个序列,我们还可以对整个序列的所有状态进行平均,并将这个平均状态作为整个序列的表示:

同步序列对序列模式主要用于序列标记,即每一时刻都有输入和输出,输入序列和输出序列长度相同。例如,在词性标注中,每个单词都需要用其对应的词性标签进行标注。

输入是序列,输出是序列。在不同时刻将样本输入递归神经网络,得到不同时刻的隐状态。每个时刻的隐藏状态代表当前和历史信息,输入分类器得到当前时刻的标签。

异步序列对序列模式也称为编解码模型,即输入序列和输出序列不需要有严格的对应关系,也不需要保持相同的长度。例如,在机器翻译中,输入源语言的单词序列,输出目标语言的单词序列。

在异步序列到序列模式下,输入是长度序列,输出是长度序列。往往是先编码后解码来实现的。首先,在不同时间将样本输入到循环神经网络(编码器)中,并获得它们的编码。然后在另一个循环神经网络(解码器)中使用,得到输出序列。为了建立输出序列之间的相关性,解码器中通常使用非线性自回归模型。

其中,循环神经网络分别作为编码器和解码器,分类器和预测输出的向量表示。

循环神经网络的参数可以用梯度下降法学习。给定一个训练样本,其中是长度为的输入序列,是长度为的标签序列。即在每一时刻,都有一个监督信息,我们将该时刻的损失函数定义为:

其中是一阶矩的输出,是一个可微损失函数,比如交叉熵。那么整个序列损失函数是:

整个序列的损失函数相对于参数的梯度为:

即每一时刻损失对参数的偏导数之和。

递归神经网络中有一个递归调用的函数,因此计算参数梯度的方式与前馈神经网络不同。在递归神经网络中有两种计算梯度的主要方法:随时间反向传播(BPTT)和实时循环学习(RTRL)。

时间反向传播(BPTT)算法的主要思想是通过类似于前馈神经网络的误差反向传播算法来计算梯度。

BPTT算法将循环神经网络视为扩展的多层前馈网络,其中“每一层”对应循环网络中的“每一时刻”。在“扩展”的前馈网络中,所有层的参数都由* * *”共享,所以参数的真实梯度是所有“扩展层”的参数梯度之和。

因为该参数与每个时刻隐藏层的净输入相关,所以损失函数在第一时刻相对于该参数的梯度为:

其中表示“直接”偏导数,即公式不变,偏导数得到:

其中是第一时刻隐藏态的第一维度;除了第一个值,其余都是。

将误差项定义为第一时刻的损失对第一时刻隐藏神经层的净输入的导数,然后:

因此:

写成矩阵:

因此,获得了整个序列的损失函数相对于参数的梯度:

类似地,权重和偏差的梯度为:

在BPTT算法中,参数的梯度需要一个完整的“正向”计算和“反向”计算才能获得和更新。如下图所示。

与反向传播的BPTT算法不同,实时递归学习通过正向传播计算梯度。

假设循环神经网络中第一时刻的状态是:

它对参数的偏导数是:

从第1个时刻开始,RTRL算法不仅计算递归神经网络的隐状态,还依次向前计算偏导数。

两种学习算法的比较:

RTRL算法和BPTT算法都是基于梯度下降的,分别在正向模式和反向模式下应用链式法则计算梯度。在递归神经网络中,一般网络的输出维数远低于输入维数,因此BPTT算法的计算量会更小,但BPTT算法需要时刻保存中间梯度,空间复杂度高。RTRL算法不需要梯度反馈,因此非常适合需要在线学习或无限序列的任务。

递归神经网络学习过程中的主要问题是,由于梯度的消失或爆炸,很难对状态之间的依赖关系进行长范围建模。

在BPTT算法中,我们有:

如果已定义,则:

如果,当,会引起系统不稳定,这叫梯度爆炸问题;反之,如果,当,就会出现类似深度前馈神经网络的梯度消失问题。

虽然简单循环网络理论上可以建立长时间间隔状态之间的依赖关系,但实际上由于梯度爆炸或消失的问题,只能学习到短时间的依赖关系。这样,如果时间t的输出依赖于时间的输入,当区间较大时,简单的神经网络很难对这种长距离依赖进行建模,这就是所谓的长期依赖问题。

一般来说,环网的梯度爆炸问题比较容易解决,一般通过权值衰减或梯度截断来避免。权衰减是通过在参数或范数中加入正则项来限制参数的范围,从而使。梯度截断是另一种有效的启发式方法。当梯度的模数大于某个阈值时,它被截断成一个较小的数。

梯度的消失是环网的主要问题。除了使用一些优化技术,更有效的方法是改变模型,例如让同时使用,那就是:

其中是非线性函数,是一个参数。

上式中,和之间存在线性依赖关系,权重系数为1,不存在梯度爆炸或消失的问题。但这种变化也失去了反馈边神经元的非线性激活,所以也降低了模型的表示能力。

为了避免这一缺点,我们可以采取更有效的改进策略:

这样sum和之间的关系既是线性的又是非线性的,梯度消失的问题可以得到缓解。但是这种改进仍然存在两个问题:

为了解决这两个问题,可以通过引入门控机制对模型进行进一步的改进。

为了改善递归神经网络的长程依赖性,一个非常好的解决方案是引入门控机制来控制信息的积累速度,包括选择性地添加新信息和选择性地遗忘之前积累的信息。这种网络可以称为门控RNN。在这一节中,我们主要介绍两种门控循环神经网络:长时记忆网络和短时记忆网络以及门控循环细胞网络。

长短期记忆(LSTM)网络是递归神经网络的变种,可以有效解决简单递归神经网络的梯度爆炸或消失问题。

在此基础上,LSTM网络主要在以下两个方面进行了改进:

其中,有三个闸门控制信息传递的路径;是矢量元素的乘积;是最后一刻的记忆单位;是通过非线性函数获得的候选状态:

在每个时刻,LSTM网络的内部状态记录了到当前时刻的历史信息。

在数字电路中,门是一个二进制变量{0,1},其中0代表关闭状态,不允许任何信息通过;1代表开放状态,允许所有信息通过。LSTM网络中的“门”是一种“软”门,其值在(0,1)之间,表示信息按一定比例通过。LSTM网络中三个门的功能是:

(1)遗忘门控制着最后一刻的内部状态需要遗忘多少信息。

(2)输入门控制当前时刻候选状态需要保存多少信息。

(3)输出门