赞
踩
DNN及DNN的特例CNN的模型都是前向反馈的,模型的输出和模型本身没有关联关系。循环神经网络(Recurrent Neural Networks ,RNN)是一种输出和模型间有反馈的神经网络。
DNN和CNN中,训练样本的输入和输出是比较的确定的。但当训练样本输入是连续的长短不一的序列,如基于时间的序列:一段段连续的语音,一段段连续的手写文字时,很难直接将其拆分成一个个独立的样本来通过DNN/CNN进行训练。
RNN模型有比较多的变种,这里介绍最主流的RNN模型结构:
上图中左边是RNN模型没有按时间展开的图,如果按时间序列展开,则是上图中的右边部分。我们重点观察右边部分的图。
这幅图描述了在序列索引号t附近RNN的模型。其中:
RNN反向传播算法的思路和DNN一样,即通过梯度下降法一轮轮的迭代,得到合适的RNN模型参数U,W,V,b,c。由于是基于时间反向传播,所以RNN的反向传播有时也叫做BPTT(back-propagation through time)。BPTT和DNN有一些不同点,RNN所有的U,W,V,b,c在序列的各个位置是共享的,反向传播时更新的是相同的参数。
损失函数使用对数损失函数,输出的激活函数为softmax函数,隐藏层的激活函数为tanh函数。对于RNN,由于在序列的每个位置都有损失函数,因此最终的损失L为:
除了梯度表达式不同,RNN的反向传播算法和DNN区别不大。
RNN理论上可以解决序列数据的训练,但是它像DNN一样有梯度消失的问题,当序列很长的时候问题尤其严重。因此,上面的RNN模型一般不能直接用于应用领域。在语音识别,手写书别以及机器翻译等NLP领域实际应用比较广泛的是基于RNN模型的一个特例LSTM。
循环神经网络(Recurrent Neural Networks ,RNN)
RNN是一种输出和模型间有反馈,可以对序列型数据进行建模的神经网络模型。传统的前馈神经网络一般输入的都是一个定长的向量,无法处理变长的序列信息,即使通过一些方法把序列处理成定长的向量,模型也很难捕捉序列中的长距离依赖关系。为了解决这个问题,RNN通过将神经元串行来处理序列化的数据,引入了隐状态h的概念(hidden state),h可以对序列形的数据提取特征,由于每个隐状态神经元能用它的内部变量保存之前输入的序列信息,可以据此进行分类或生成新的序列。
RNN的重要特点:在计算所有隐状态时,每一步使用的参数U,W,b都是一样的,即每个步骤的参数都是共享的。
使用新的参数V和c,通过对h进行计算可以得到输出值(每一步使用的参数V和c也都是一样的)。分类问题使用Softmax函数,将输出转换成各个类别的概率。输入和输出序列是等长的,
优点:模型是时间维度上的深度模型,可以对序列内容建模;h=f(现有的输入+过去记忆总结)
缺点:需要训练的参数较多,容易出现梯度消失梯度爆炸问题;不具有特征学习能力
梯度爆炸与梯度消失
RNN反向传播算法的思路和DNN一样,即通过梯度下降法一轮轮的迭代,得到合适的RNN模型参数U,W,V,b,c。具体来说:RNN每一层的的隐状态都由前一层的隐状态经过变换和激活函数得到,反向传播求导时最终得到的导数会包含每一步梯度的连乘,这会引起梯度爆炸或梯度消失,所以RNN很难处理“长程依赖”问题,即无法学到输入序列中的长距离依赖关系。
梯度爆炸与梯度消失的解决
梯度爆炸:可以通过梯度裁剪来缓解,当梯度大于给定阈值时,对梯度进行等比收缩。
梯度消失:
长短期记忆网络(Long Short Term Memory,LSTM)
LSTM是循环神经网络的扩展,RNN每一层的的隐状态都由前一层的隐状态经过变换和激活函数得到,反向传播求导时最终得到的导数会包含每一步梯度的连乘,这会引起梯度爆炸或梯度消失,所以RNN很难处理“长程依赖”问题,即无法学到输入序列中的长距离依赖关系。LSTM在隐状态计算时以加法代替了这里的迭代变换,可以避免梯度消失的问题,使网络学到长程的规律。
一个RNN单元的输入由两部分组成,即前一步RNN单元的隐状态和当前这一步的外部输入,此外还有一个输出。从外部结构看,LSTM和RNN的输入输出一模一样,同样是在每一步接受外部输入和前一阶段的隐状态,并输出一个值。因此,RNN可以无缝切换到LSTM。
LSTM里各模块分别使用什么激活函数,可以使用别的激活函数吗?
在LSTM中,遗忘门、输入门和输出门使用Sigmoid函数作为激活函数;在生成候选记忆时,使用双曲正切函数Tanh作为激活函数。这两个激活函数都是饱和的,在输入达到一定值的情况下,输出就不会发生明显变化了。如果使用非饱和的激活函数,例如ReLU,那么将难以实现门控的效果。 Sigmoid函数的输出在0~1之间,符合门控的物理定义。且当输入较大或较小时,其输出会非常接近1或0,从而保证该门开或关。在生成候选记忆时,使用Tanh函数,是因为其输出在−1~1之间,这与大多数场景下特征分布是0中心的吻合。此外,Tanh函数在输入为0附近相比Sigmoid函数有更大的梯度,通常使模型收敛更快。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。