您的位置 首页 百科知识

循环神经网络

循环神经网络

花书中关于RNN的内容记录于https://www.***.com/p/206090600f13。

在前馈神经网络中,信息的传递是单向的来自,这种限制虽然使得网络变得更容易学习,但在一定程度上也减弱了神经思胞互婷手网络模型的能力。在生物神经网络中,神经元之间的连接关系要复杂的多。前馈神经网络策通不满可以看作是一个复杂的函数,每次输入都是独立的,即网络的输出只依赖于当前的输入。但是在很多现实任务中,网络的输入不仅和当前时刻的输入相关,也和其过去一段时间的输出相关。因此,前馈网络难以处理时序数据,比如视频、语音、文本等。时序数据的长度一般是不固定的,而前馈神经网络要求输入和输出的维数都是固定的,不能任意改变。因此,当处理这一类和时序相关的问题时,就需要一种能力更强的模型。

循环神经网络(RecurrentNeuralNetwork,RNN)是一类具有短期记忆能力的神经网络。在循环神经网络中,神经元不但可以接受其它神经元的信息,也可以接受自身的信息,形成具有环路的网络结构。和前馈神经网络相比,循环神经网络更加符合生物神经网络的结和国沉建构。循环神经网络已经被广泛应用在语音识别、语言模型以及自然语言生成等任务上。循环神经网络的参数学习可以通过随时间反向传播算法来学习。

为了处理这些时序数据并利用其360问答历史信息,我们需要让网络具有短期记忆能力。块镇而前馈网络是一个静态网络,不具备这种记忆能力。

一种简单的利用历史信息的方法是建立一个额外的延时单元,用来存储网络的历史信息(可以包括输入、输出、隐状态等)。比较有代表性的模型是延时神经网络。

延时神经网络是在前馈网络中的非输出层都添加一个延时器,记录最近几次神经元的输出七县亮责题话情密致到然。在第个时刻,第层神经元和第层神经元的最近次输出相关,即:

延时神经网络存许道呼济阶论在时间维度上共享权殖候值,以降低参数数量。因此对于序列输入来讲,延时神经网络就相当于卷积神经言尔态晚网络。

自回归模型(AutoregressiveModel,AR)是统计学上常用仅卷践氧冷源的一类时间序列模型,用一个变量的历史信息来预测自己:

其中为超参数,为参数,为第个时刻的乙流菜世阻具噪声,方差和时间无关。

有外部输入的非线性自回归模型(NonlinearAutoregressivewithExogenousInputsModel,NARX度响设煤经原差干守)是自回归模型的扩展,在每个时刻都有讲汽兵必力变轮供规一个外部输入,产生面万白能均一只土伟率一个输出。NARX通过一个延时器记录最近几次的外部输入和输出,第个时刻的输出为:

其中表示非线性函数,可以是一个前馈网络,和为超参芹察让数。

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

给定一个输入序列,循环神经网络通过下面

公式更新带反馈边的隐藏层的活性值:

其中,为一个非线性函数,也可以是一个前馈网络。

从数学上讲,上式可以看成酸犯害一个动力系统。动力系统(Dynamica导了厚lSystem)是济孙供另括群案技色盐友一个数学上的概念,指系统状态按照一定的规律随时间变化的系统。具体地讲,动力系统是买款单使用一个函数来描述一个给定空间(如某个物理系统的状态空间)中所有点随时间的变化情况。因此,隐藏层的活性值在很多文献上也称为状态(State)或隐状态(HiddenStates)。理论上,循环神经网络可以近似任意的非线性动力系统。

简单循环网络(SimpleRecurrentNetwork,SRN)是一个非常简单的循环神经网络没逗,只有一个隐藏层的神经网络。

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

假设在时刻时,网络的输入为,隐藏层状态(即隐藏层神经元活性值)不仅和当前时刻嫌局的输入相关,也和上一个时刻的隐藏层状态相关:

其中为隐藏层的净输入,是非线性激活函数,通常为Logistic函数或Tanh函数,为状态-状态权重矩阵,为状态-输入权重矩阵,为偏置。上面两式也经常直接写为:

如果我们把每个时刻的状态都看作是前馈神经网络的一层的话,循环神经网络可以看作是在时间维度上权值共享的神经网络。下图给出了按时间展开的循环神经网络。

由于循环神经网络具有短期记忆能力,相当于存储装置,因此其计算能力十分强大。前馈神经网络可以模拟任何连续函数,而循环神经网络可以模拟任何程序。

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

其中为隐状态,为非线性激活函数,和为网络参数。

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

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

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

假设一个样本为一个长度为的序列,输出为一个类别。我们可以将样本按不同时刻输入到循环神经网络中,并得到不同时刻的隐藏状态。我们可以将看作整个序列的最终表示(或特征),并输入给分类器进行分类:

其中可以是简单的线性分类器(比如Logistic回归)或复杂的分类器(比如多层前馈神经网络)

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

同步的序列到序列模式主要用于序列标注(SequenceLabeling)任务,即每一时刻都有输入和输出,输入序列和输出序列的长度相同。比如词性标注(Partof-SpeechTagging)中,每一个单词都需要标注其对应的词性标签。

输入为序列,输出为序列。样本按不同时刻输入到循环神经网络中,并得到不同时刻的隐状态。每个时刻的隐状态代表当前和历史的信息,并输入给分类器得到当前时刻的标签。

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

在异步的序列到序列模式中,输入为长度为的序列,输出为长度为的序列。经常通过先编码后解码的方式来实现。先将样本按不同时刻输入到一个循环神经网络(编码器)中,并得到其编码。然后再使用另一个循环神经网络(解码器)中,得到输出序列。为了建立输出序列之间的依赖关系,在解码器中通常使用非线性的自回归模型。

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

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

其中为第时刻的输出,为可微分的损失函数,比如交叉熵。那么整个序列上损失函数为:

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

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

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

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

BPTT算法将循环神经网络看作是一个展开的多层前馈网络,其中“每一层”对应循环网络中的“每个时刻”。在“展开”的前馈网络中,所有层的参数是共享的,因此参数的真实梯度是将所有“展开层”的参数梯度之和。

因为参数和隐藏层在每个时刻的净输入有关,因此第时刻的损失函数关于参数的梯度为:

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

其中为第时刻隐状态的第维;除了第个值为外,其余都为的行向量。

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

从而:

写成矩阵形式为:

由此得到整个序列的损失函数关于参数的梯度:

同理可得,关于权重和偏置的梯度为:

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

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

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

其关于参数的偏导数为:

RTRL算法从第1个时刻开始,除了计算循环神经网络的隐状态之外,还依次前向计算偏导数。

两种学习算法比较:

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

循环神经网络在学习过程中的主要问题是由于梯度消失或爆炸问题,很难建模长时间间隔(LongRange)的状态之间的依赖关系。

在BPTT算法中,我们有:

如果定义,则:

若,当时,,会造成系统不稳定,称为梯度爆炸问题;相反,若,当时,,会出现和深度前馈神经网络类似的梯度消失问题。

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

一般而言,循环网络的梯度爆炸问题比较容易解决,一般通过权重衰减或梯度截断来避免。权重衰减是通过给参数增加或范数的正则化项来限制参数的取值范围,从而使得。梯度截断是另一种有效的启发式方法,当梯度的模大于一定阈值时,就将它截断成为一个较小的数。

梯度消失是循环网络的主要问题。除了使用一些优化技巧外,更有效的方式就是改变模型,比如让,同时使用,即:

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

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

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

这样和之间为既有线性关系,也有非线性关系,并且可以缓解梯度消失问题。但这种改进依然存在两个问题:

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

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

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

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

其中和三个门(gate)来控制信息传递的路径;为向量元素乘积;为上一时刻的记忆单元;是通过非线性函数得到的候选状态:

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

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

(1)遗忘门控制上一个时刻的内部状态需要遗忘多少信息。

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

(3)输出门

上一篇 最新房地产抵押估价指导意见全文 房地产评估有效期是多久
下一篇 穿寿衣有何讲究
扫一扫,手机访问

扫一扫,手机浏览