为什么RNN会产生梯度爆炸与消失,LSTM为什么可以解决这一问题
原文链接–知乎
首先明确: 梯度消失带来的后果– 后面层的输出误差很难影响前面层的计算。
经典的RNN结构如下图所示:
假设我们的时间序列只有三段, S_{0} 为给定值,神经元没有激活函数,则RNN最简单的前向传播过程如下:
假设在t=3时刻,损失函数为
则对于一次训练任务的损失函数为 ,即每一时刻损失值的累加。
使用随机梯度下降法训练RNN其实就是对 Wx 、 Ws 、 Wo 以及 b1,b2 求偏导,并不断调整它们以使L尽可能达到最小的过程。
现在假设我们我们的时间序列只有三段,t1,t2,t3。
我们只对t3时刻的 Wx、Ws、Wo求偏导(其他时刻类似):
可以看出对于 W_{0} 求偏导并没有长期依赖,但是对于 Wx、Ws 求偏导,会随着时间序列产生长期依赖。因为 St 随着时间序列向前传播,而 St 又是 Wx、Ws的函数。
根据上述求偏导的过程,我们可以得出任意时刻对 Wx、Ws 求偏导的公式:
任意时刻对W_{s} 求偏导的公式同上。如果加上激活函数,
激活函数tanh和它的导数图像如下。
其实这就是LSTM做的事情。
为什么LSTM 可以解决:见https://weberna.github.io/blog/2017/11/15/LSTM-Vanishing-Gradients.html#fnref:1