循环神经⽹络(RNN)简介
这⾥在以上两篇基础上整理介绍循环神经⽹络:
前馈⽹络可以分为若⼲”层”,各层按信号传输先后顺序依次排列,第i层的神经元只接受第(i-1)层神经元给出的信号,各神经元之间没有反馈。前馈型⽹络可⽤⼀有向⽆环路图表⽰。前馈神经⽹络⽤于处理有限的,定长的输⼊空间上的问题是很有优势的。使⽤越多的隐藏层节点就能学习到越多的信息,能更好的处理特定的任务。⽽循环神经⽹络(Recurrent Neural Networks, RNN)处理⽅式与前馈神经⽹络有着本质上的不同,循环神经⽹络只处理⼀个单⼀的输⼊单元和上⼀个时间点的隐藏层信息。这使得循环神经⽹络能够更加⾃由和动态的获取输⼊的信息,⽽不受到定长输⼊空间的限制。
传统神经⽹络对于声⾳类似的时间序列信号,由于⽹络的单向⽆反馈连接⽅式使得⽹络只能处理输⼊信号所包含时间段的信号,对于该信号所包含时间段以外的信号在处理本段信号时常没有任何参考,⽽常见时间序列信号都和它所在时间段前后时间区间的背景信号有着密切的联系。例如,对包含”早上好”语义的语⾳进⾏识别时,训练时同时⽤包含”早上好”的这段语⾳分别对传统神经⽹络和循环神经⽹络进⾏训练,在处理包含”好”所在的语⾳信号时,以往的神经⽹络不会参考包含”早”或者”上”的语⾳信号只能对⽹络输⼊语⾳信
号”好”进⾏处理分析,⽽对于循环神经⽹络⽽⾔它会根据历史数据信息结合”好”语⾳所处的时间位置参考
该时间位置前⾯的语⾳信
号”早上”更加容易的识别出语义为”上”的语⾳信号。包含这种潜在能⼒的原因在于以往的前馈神经⽹络神经元仅为顺序连接,⽽循环神经⽹络存在神经元反馈连接,这种形式的连接使得⽹络能够以⼀种激励的形式存储最近时间段的输⼊数据信息(短时记忆),⽽⽹络的这种潜在意义在实际应⽤⽅⾯着⼴泛的意义。
RNN之所以称为循环神经⽹络,即”⼀个序列的当前输出与前⾯的输出也是有关的”。具体体现在后⾯层数的输⼊值要加⼊前⾯层的输出值,即隐藏层之间不再是不相连的⽽是有连接的。
⼀个多层感知机仅仅是将输⼊映射到输出向量,然⽽RNN原则上是将之前输⼊的整个历史映射到每个输出。所以与MLPs的全局逼近理论对应的是RNN拥有⾜够的隐藏节点个数可以以任意精度逼近任意可度量的序列到序列映射。环状连接最重要的特点是可以将之前的”记忆”保留在⽹络的中间状态,⽽这个状态会影响最终的⽹络输出。
RNN的前向传播和单个隐藏层的MLP基本是⼀样的,除了当前点的激活值是通过当前的输⼊和隐藏层在上⼀次激活值⼀起计算得到。
和标准的反向传播算法⼀样,循环神经⽹络中的反向传播算法(BackPropagation Through Time, BPTT)
也需要不断的使⽤链式法则。微⼩的不同之处是对于循环⽹络,⽬标函数依赖的隐藏层激活值不仅将激活值传递到输出层,并且会影响下⼀个时间⽚段的隐藏层。
循环神经⽹络的定义:
娃娃菜怎么做
循环神经⽹络的单个神经元模型如下图所⽰,与以往的神经元相⽐它包含了⼀个反馈输⼊,如果将其按照时间变化展开可以看到循环神经⽹络单个神经元类似⼀系列权值共享前馈神经元的依次连接,连接后同传统神经元相同随着时间的变化输⼊和输出会发⽣变化,但不同的是循环神经⽹络上⼀时刻神经元的”历史信息”会通过权值与下⼀时刻的神经元相连接,这样循环神经⽹络在t时刻的输⼊完成与输出的映射且参考了t之前所有输⼊数据对⽹络的影响,形成了反馈⽹络结构。虽然反馈结构的循环神经⽹络能够参考背景信号但常见的信号所需要参考的背景信息与⽬标信息时间相隔可能⾮常的宽泛,理论上循环神经⽹络可以参考距离背景信息任意范围的参考信息,但实际应⽤过程中对于较长时间间隔的参考信息通常⽆法参考。
对于上述问题主要在于⽹络训练时需要计算的⽹络代价函数梯度,⽽梯度计算与神经元之间连接的权值密切相关,在训练学习过程中很容易造成梯度爆炸或者梯度消失问题。常见的⽹络训练学习算法以反向传播算法或者实时递归学习算法为主,随着时间推移数据量逐步增⼤以及⽹络隐层神经元⾃⾝循环问题,这些算法的误差在按照时间反向传播时会产⽣指数增长或者消失问题。由于时间延迟越来越长从⽽需要参考的信号也越来越多,这样权值数量也会出现激增,最终,很⼩的误差经过⼤量的权值加和之后出现指数式增长,导致⽆法训练或者训练时间过长。⽽梯度消失问题指⽹络刚开始输⼊的具有参考价值的数据,随着时间变化新输⼊⽹络的数据会取代⽹络先前的隐层参数导致最初的有效信息逐步被”忘记”,如果以颜⾊深浅代表数据信息的有⽤程度,那么随着时间的推移数据信息的有⽤性将逐步被淡化。这两种问题都会导致⽹络的实际建模缺陷,⽆法参考时间间隔较远的序列状态,最终在与⽹络相关的分类识别类似的应⽤中仍旧⽆法获得好的实践效果。
小蜜蜂卡通图片
怎么删除页脚⼀个最简单的循环神经⽹络如下图所⽰:这样的神经⽹络⼀共有3层,分别是输⼊层x,隐藏层h和输出层y。定义每⼀层的节点下标如下:k表⽰的是输出层的节点下标,j表⽰的是当前时间节点隐藏层的节点下标,l表⽰的是上⼀时间节点隐藏层的节点下标,i表⽰的是输⼊层的节点下标。
对于⼀个普通的单输⼊前馈神经⽹络来说,隐藏层某⼀时刻某⼀节点的激活netj(t)可以⽤公式表⽰:
13个色鬼其中,n表⽰的是输⼊层节点的个数,θj表⽰的是⼀个偏置参数,(t)表⽰的是t时间节点。但是在循环
神经⽹络中,隐藏层在某⼀时刻某个节点的激活不再单单受到输⼊层的影响,也受到上⼀时刻的隐藏层状态的影响。隐藏层的节点状态被”循环”地利⽤与神经⽹络之中,这就组成了⼀个循环神经⽹络。如上图所⽰,这样隐藏层节点的激活netj(t)的计算⽅式被更新为:
禁狗令
其中,m表⽰的是隐藏层节点的总个数。f表⽰的是隐藏层节点的激活函数。对于⼀个神经⽹络来说,激活函数有多种选择,例
如,sigmoid函数,tanh函数或者⼆值函数都是可选的激活函数。
对于输出层的激活计算循环神经⽹络与常见的前馈神经⽹络并没有太⼤的区别,都可以使⽤如下公式来计算:
其中g表⽰的是输出层节点的激活函数(可以与隐藏层节点的f是同⼀个激活函数)。
循环神经⽹络的训练:
当⼀个神经⽹络结构的每⼀个激活函数都是可导的并且整个⽹络的预先设计输出是可以获得时,该神经⽹络的训练可以通过反向传播算法(Back Propagation, BP)来学习。反向传播算法的基础是梯度下降优化法。对于任何⼀个需要优化的权重参数,计算它们关于优化⽬标函数的梯度并且根据梯度更新权重参数是反向传播算法的基本思想。
常⽤的优化⽬标函数有和⽅差函数(Summed Squard Error, SSE),交叉熵函数(Cross Entropy)等。这⾥以和⽅差函数为例,采⽤随机梯度下降法,分析循环神经⽹络的学习过程。和⽅差的⽬标函数⼀般形式如下所⽰:
随机梯度下降法是不处理所有的样本,每次只处理⼀个样本,针对⼀个样本就对这个神经⽹络进⾏⼀次更新,再读⼊下⼀个样本,依次循环来更新整个神经⽹络。
根据梯度下降算法的思想,所有的权重参数都需要被相应的负梯度乘以⼀个学习率(Learning Rate)的值更新,对于输出层与隐藏层之间的参数w,其更新值可以由以下公式表⽰:
其中α表⽰的是学习率。但是直接对于这个函数求导并不容易,在此我们先定义残差δ,来⽅便计算导数。对于输出层来说,残差的计算公式如下:地下车库出入口
根据上述公式关于残差的计算,我们可以得到权重参数w中某⼀个节点的更新公式:
这样计算起来就会⽅便的多,同理对于隐藏层的节点,我们也可以计算它们的残差:
根据这个残差节点的公式,我们可以得到权重v的更新公式:
年会表演节目
同理,对于循环部分的权重u,我们可以得到如下的更新公式:
⼀般⽽⾔,为了简化计算,会选择导数相对好求的函数作为激活函数以提升训练的效率。例如逻辑斯蒂函数(Logistic Function):
对于这样的⼀个激活函数,其求导就变得⼗分的⽅便,该函数的导数为g’(net)=g(net)(1-g(net))。
⼀般⽽⾔,训练之初循环神经⽹络是随机初始化的,⽽初始的输⼊隐藏层⼀般采⽤随机⼩实数向量或者是全相等⼩实数向量。
长短时间记忆单元:
为了解决循环神经⽹络在训练过程中的梯度问题,循环神经⽹络神经元在以往的循环神经元结构基础上进⾏改进,1997年由Hochreiter和Schmidhuber提出了⼀种称作长短时间记忆单元(Long Short-Term Memory,LSTM)的特殊结构循环神经⽹络,最终Graves对该结构进⾏了进⼀步改良和推⼴,获得了巨⼤成功。该⽹络结构基于梯度学习算法能够避免上述提及的梯度问题且对于存在噪声或不可压缩的输⼊序列数据依然可以参考时间间隔在1000 时间步长以上的数据信息。经过⼤量的实验结论证明LSTM⽹络已经解决了传统循环神经⽹络⽆法解决的问题,在蛋⽩质结构预测,语⾳识别及⼿写字符识别等常见研究⽅⾯取得了新的突破。
自制仓鼠跑轮
LSTM⽹络由⼀个⼀个的单元模块组成,每个单元模块⼀般包含⼀个或者多个反馈连接的神经元及三个乘法单元,正是由于这些乘法单元的存在我们可以⽤这些乘法单元实现数据是否输⼊、输出及遗忘摒弃。常⽤取值为’0’或’1’的输⼊门,输出门和遗忘门与对应数据相乘实现如下图所⽰,输⼊门控制是否允许输⼊信息输⼊到当前⽹络隐层节点中,如果门取值为’1’则输⼊门打开允许输⼊数据,相反若门取值为’0’,则输⼊门关闭不允许数据输⼊;输出门控制经过当前节点的数据是否传递给下⼀个节点,如果门取值为’1’,则当前节点的数据会传递给下⼀个节点,相反若门取值为’0’,则不传递该节点信息;遗忘门控制神经元是否摒弃当前节点所保存的历史时刻信息,该门通过⼀种称为”peephole”的连接⽅式和内部神经元相连这种连接⽅式可以提⾼LSTM在时间精度及计算内部状态相关研究的学习能⼒,若门取值为’1’则保留以往的历史信息,相反若门取值为’0’,则清除当前节点所保存的历史信息。除了多增加的三个信息输⼊控制门以外,模块内部的神经元连接⽅式也有所不同,线性性质的内部神经元以⼀个权值固定为1的循环⾃连接⽅式连接称为”Constant Error Caroul”(CEC),CEC连接保证了误差或梯度随着时间的传播不会发⽣消失现象。当没有新的输⼊或者误差信号进⼊神经元
时,CEC的局部误差既不增长也不下降保持不变状态,最终能够在前向传播和反向传播时都能通过输⼊输出门保证不必要的信息进⼊到⽹络。对较远时间步长的信号参考⽽⾔,更远时间步长的有效数据信息可以通过各个门的组合开或关保存下来,⽽⽆效的数据信息可以被摒弃其对应的参数⽆需保存,最终前⾯提及的梯度消失问题得到遏制。例如,当有参考价值的有效信息出现时,我们打开输⼊门使
有效数据可以输⼊,当有效数据输⼊⽹络后输⼊门再保持关闭状态,随着时间的推移如果输⼊门⼀直保持关闭状态,那么,⽹络新输⼊的数据将⽆法替换单元以前的激励输出,在任意时刻只要⽹络输出门打开该有效数据信息都可以随时参考,从⽽⽹络实现了时间距离步长更远的有效数据信息参考。
从以上的分析来看单个LSTM⽹络与最初的循环神经⽹络除了隐层的⾮线性单元被替换成为了记忆模块以外别的⽅⾯都⾮常相似,但LSTM⽹络内部隐层连接⽅⾯却有了⾮常⼤的变化。LSTM⽹络隐层由⼀系列具有循环连接的记忆单元模块所构成,这些记忆单元模块类似于计算机的内存芯⽚可以存储对应的状态信息,如下图所⽰,⽹络输⼊层和输出层节点个数都为3,图中各个记忆单元所包含的神经元个数取2,神经元输出与所有的控制门、所有的神经元输⼊及⽹络所有输出节点都保持全连接状态,⽹络输⼊层各个节点与各个神经元的输⼊及状态控制门都为全连接形式,此外⽹络输出层节点和输⼊层节点也有附加的快捷连接。⽹络各个单元通过如上所述的连接⽅式基本就可以构建成对应的LSTM⽹络,但是,各个⽹络之间因为应⽤范围不同还是有部分连接差异。
双向LSTM⽹络:
虽然以上提及的⽹络能够对数据点所在时刻的”历史”信息进⾏参考,但同时参考数据点所在时刻的”未来”信息更有利于我们分析数据。为了能对输⼊数据的背景信息更加有效的利⽤,⼀种沿着时间刻度前进和倒退的双向分离式⽹络结构被提出。假设每⼀层的⽹络都是⼀位专家,那么要合并两个专家的意见意味着他们的意见是相互关联的。实践证明Graves团队所改进的双⽅向结构LSTM⽹络输出确实与背景信息存在密切联系,且通过简单的线性或者对数合并算法就可以获得⽹络识别率的提⾼。
如下图所⽰,双向循环神经⽹络前向传播层和后向传播层相互分离,如果没有后向传播层那么该⽹络结构和我们最早提到的前馈⽹络结构完全相同。⽹络输⼊节点同时和前向后向传播单元连接,对于前向传播层⽽⾔,上⼀时刻的输出状态作为下⼀时刻的输⼊状态;对于后向传播层⽽⾔,上⼀时刻的输⼊为下⼀时刻的输出状态,最终,前向传播输出和输⼊同时输出到⽹络输出节点。对于这样的⽹络组成形式,我们在同⼀⽹络结构中,可以直接⽤两个相反时间⽅向的输⼊信息来减少代价函数的误差⽽不需要额外的算法处理”未来”数据信息,较前⾯提及的传统循环神经⽹络⽅法更为简便。虽然双向循环神经⽹络结构发⽣了很⼤的变化,但是⽹络隐层中的两个传播层之间仍然互不连接,单个隐层⽹络完全可以看作是前馈⽹络结构,若仍旧采⽤传统⽹络训练时的反向传播算法,由于传播⽅向不同,前向传播层和后向传播层的神经元状态及输出与以往相⽐将不能同时进⾏。此外,对于t = 1时的前向层和t = T时的后向传播层它们的初始状态必须在训练之前给出。所以,⽹络训练⽅⾯我们可以参考部分
以往循环神经⽹络的训练算法,只是训练算法因⽹络结构改变有所增加。