RNN中的梯度消失与梯度爆炸问题


梯度消失与梯度爆炸问题

循环神经网络(Recurrent Neural Network,RNN)是一类具有短期记忆能力的神经网络.在循环神经网络中,神经元不但可以接受其他神经元的信息,也可以接受自身的信息,形成具有环路的网络结构。

在RNN中,梯度计算时需要沿时间步反向传播(BPTT,Backpropagation Through Time),这个算法即按照时间的逆序将梯度信息一步步地往前传递.当输入序列比较长时了,时间步展开导致的长链乘积会存在梯度爆炸和消失问题,也称为长程依赖问题。

简单的前馈神经网络

上图是一个简单的循环神经网络,只有一个隐藏层的神经网络,𝒉_𝑡不仅和当前时刻的输入𝒙_𝑡 相关,也和上一个时刻的隐藏层状态𝒉_{𝑡−1} 相关

梯度消失与爆炸

分析步骤

分析步骤

分析:

1、使用了一个4层的前馈神经网络来模拟展开的RNN。

2、若激活函数是Sigmoid,求梯度的最大值是0.25,可能会导致梯度消失问题,这时候网络就学习不到东西了,即无法更新梯度。

3、若权重设置过大了,可能出现梯度爆炸问题,梯度变成NaN。

注:最后等式括号中根据不同的激活函数有不同的导数。

解决方案

从上面的分析过程可以看出,产生梯度爆炸或者梯度消失的原因有以下3个角度:
1、激活函数
2、初始化的权重过大
3、网络层数太深
所以解决方案也是从这三个方面来处理
1、用ReLU、Leaky-ReLU、P-ReLU、R-ReLU、Maxout等替代sigmoid函数
2、用Batch Normalization,批量归一化。
3、LSTM的结构设计也可以改善RNN中的梯度消失问题,每个记忆单元(图中A)中包括细胞状态(Ct),遗忘门,输入门和输出门。

以上就是在看完:
1、李沐学AI
2、邱锡鹏,神经网络与深度学习
后对RNN的梯度爆炸与消失的理论分析,接下来可以通过论文以及具体代码来分析


文章作者: AllenMirac
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 AllenMirac !
  目录