RNN学习不到长距离信息& LSTM学习到长距离信息

RNN推导参考:http://www.wildml.com/2015/10/recurrent-neural-networks-tutorial-part-3-backpropagation-through-time-and-vanishing-gradients/

RNN学习不到长距离信息& LSTM学习到长距离信息_第1张图片

RNN学习不到长距离信息& LSTM学习到长距离信息_第2张图片

说明:对于RNN为什么会学不到长距离信息,可以说是RNN会遇到梯度消失的问题,梯度消失的问题, 本质上还是使用BP算法导致的,也是激活函数的导数小于1导致的。正如上述所讲的,使用RNN时,在每次输入进行优化计算梯度的时候,会侧重于考虑最近的几次输入,以此让损失减小,而比较远的输入,其实对于计算当前输入的梯度已经不起作用了 RNN可以等价于去调整参数,拟合最近的一些序列,比如说输入的是t时刻,那么可能当前的参数就调整为拟合t到t-p时刻的序列,并且p会比较小 也即RNN的学习不会兼顾到很久以前的输入, 就学习不到长距离信息
RNN学习不到长距离信息& LSTM学习到长距离信息_第3张图片

说明:
1、 对于RNN这种递归模型的训练而言,其样本应该是一句话。而不是说是将所有的句子拼起来,形成一个长文本。
2、RNN对每次输入要计算一次梯度,需要用到链式法则,如果输入的序列非常长,会非常耗时。

RNN学习不到长距离信息& LSTM学习到长距离信息_第4张图片

说明:如果一个序列太长,那么每次输入的话,计算在该输入下的梯度的计算量非常大。所以,有时候就使用截断的BPTT,比如说20个词,使用的step越长,计算量就越大。
3、 对于RNN的一次权重迭代过程的描述,比如说文本的一句话。首先,对于每个词都输入网络,计算在该网络参数下计算得到的梯度。然后,等最后一个词输入完毕后,再将梯度进行平均,最后进行权重的更新。 只有在最后一个词进去之后,再进行权重的更新。而不是说每输入一个词,就进行一次权值的更新
4、 RNN梯度消失的原因,还是跟激活函数有关系,因为激活函数的导数小于1
RNN学习不到长距离信息& LSTM学习到长距离信息_第5张图片

解决方案:使用RELU激活函数来替代sigmoid函数。
5、 搞清楚RNN的输入是一个样本对应于一个序列。
6、LSTM 这个模型本身就不存在梯度消失的问题,也即它是可以对任意长度的序列进行建模的,对任意长的序列进行建模是LSTM的默认行为,跟CNN对图片建模其实是一样的,只是LSTM建模的对象是序列,序列是LSTM的一个样本
可以参考一下 http://blog.csdn.net/a635661820/article/details/45390671讲述的是LSTM的设计理念,本身就是来克服梯度消失问题的。也即当输入为T时刻时, 计算梯度也即优化的目标是在对t=0及到t =T的序列建模。而不是像RNN一样,在输入为T时刻时,只能对t=t-p到t=T的序列进行建模,因为t=0到t=t-p的输入已经对当前的梯度计算不起作用了。

你可能感兴趣的:(哈工大SCIR,神经网络和深度学习转载)