RNN
RNN:产生梯度消失或者爆炸的原因:
跟随时间序列连续相乘,当w>1时,造成w变化很小,但时间序列后面的y值会变化较大,这样也就是偏导数较大,也就是梯度爆炸了。
当w<1,时,即使w从0.01变化到0.99,时间序列后面的y也不会有多大变化,也就是偏导数很小,也就是梯度消失了。
实质就是因为rnn增加了时间序列,导致连乘更多。
LSTM:
下图所示,从左往右是时间序列,从下往上是lstm的堆叠,从左往右的时间序列相当于cnn中在输入x,x有多个特征,就有多少个神经元,在rnn表现为有多少次循环,也就是一个样本有多少次时间点,深度叠加cnn和rnn是一致的,后面神经元与前面神经元连接即可,所以在rnn实际堆叠的形状如下图手绘。一般来说是这种堆叠方式,其他的堆叠方式暂时没看到,就是竖着堆叠。
如下图所示:
拿处理句子来说,xt代表一个单词,一个单词外加上一时间序列处理后的ht-1和ct-1值分出四个向量,z,zo,zi,zf分别控制lstm的四个门,xt当经过lstm的第一层输出xt1,xt1外加上一次分解的ht1-1和ct1-1进行分解为四个向量,执行相同操作,知道经过所有竖着叠加的lstm神经元,最后输出一个yt值,当下一个单词xt+1到来时,执行上述步骤得到yt+1值
LSTM可以解决RNN梯度消失问题的原因
rnn S 与St-1:
lstm S与St-1:
rnn在偏导数连乘由于tan’在0-1,之间,所以梯度消失,而lstm虽然偏导连乘也在在0~1之间,但是在实际参数更新中,可以通过控制bf较大,使得偏导值接近于1;在这种情况下,即使通过很多次连乘的操作,梯度也不会消失,即总可以通过选择合适的参数,在不发生梯度爆炸的情况下,找到合理的梯度方向来更新参数。本质原因时因为更新memory系数的构成方式不同,一个是只有W,一个是W+b。