1.梯度消失和梯度爆炸产生的原因:
传统的神经网络通常是基于BP算法优化权重参数的,即通过损失函数计算的误差通过梯度反向传播的方式对神经网络中的权重进行更新,其中用到的是连乘形式的链式法则。
梯度消失:产生的原因基本上是网络太深或是采用了不恰当的损失函数,如sigmoid函数、tanh函数等。由于sigmoid函数的导数最大值是0.25,因而通过链式法则,导致靠近输入层的权重更新缓慢甚至停滞。
梯度爆炸:产生的原因一般是深层网络或是权重初始化过大的情况,伴随着传统神经网络的链式法则,梯度会越来越大,训练过程中,很容易使得权重的值也越来越大导致溢出等情况。
2.解决方法:
由于梯度消失和梯度爆炸都是由于网络太深或是权重更新过大或是过小,并且伴随着链式乘法法则导致的,主要有以下几种解决方法:
- 预训练+微调
- 换成Relu、LeakyRelu等非饱和的激活函数
- 梯度剪切、梯度正则
- 使用Batch Normalization
- 使用LSTM或是GRU等
- 使用残差结构
- 神经网络权重初始化(Xavier, He初始化等)