梯度消失与梯度爆炸问题
循环神经网络(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的梯度爆炸与消失的理论分析,接下来可以通过论文以及具体代码来分析