天天看点

深度学习中的梯度消失、梯度爆炸问题1、什么是梯度消失、梯度爆炸2、为什么会发生梯度消失、梯度爆炸3、梯度消失、梯度爆炸在深度学习、机器学习模型训练中的表现形式4、在模型中快速定位梯度消失、梯度爆炸问题5、梯度消失、梯度爆炸问题的解决方法6、总结

写在前面:

有些博主对这个问题的解释很好,这里参考了:

详解机器学习中的梯度消失、爆炸原因及其解决方法

我在这方面的工作经验和知识面还不够,还需要积累后再做出更为专业的解答。

参考我之前转发过的一篇文章 : 转载-从ReLU到GELU,一文概览神经网络的激活函数​​​​​​​

1、什么是梯度消失、梯度爆炸

深度学习中的梯度消失和梯度爆炸的问题发生在深度神经网络模型训练时反向传播阶段。深层网络由许多非线性层堆叠而来,每一层非线性层都可以视为是一个非线性函数 f(x)(非线性来自于非线性激活函数),因此整个深度网络可以视为是一个复合的非线性多元函数

深度学习中的梯度消失、梯度爆炸问题1、什么是梯度消失、梯度爆炸2、为什么会发生梯度消失、梯度爆炸3、梯度消失、梯度爆炸在深度学习、机器学习模型训练中的表现形式4、在模型中快速定位梯度消失、梯度爆炸问题5、梯度消失、梯度爆炸问题的解决方法6、总结

优化深度网络就是为了寻找到合适的权值,求解损失函数的最小值问题,采用梯度下降的方法再适合不过了。

可训练参数的更新公式一般使用的梯度更新规则推导出的公式,w←w+Δw。

深度学习中的梯度消失、梯度爆炸问题1、什么是梯度消失、梯度爆炸2、为什么会发生梯度消失、梯度爆炸3、梯度消失、梯度爆炸在深度学习、机器学习模型训练中的表现形式4、在模型中快速定位梯度消失、梯度爆炸问题5、梯度消失、梯度爆炸问题的解决方法6、总结

所以,根据链式法则,当梯度很少的时候,多层梯度相乘,就会使得更新项几乎为零,那么可训练参数就不会发生改变。这就是梯度消失问题。

 当梯度值很大的时候,多层梯度相乘,会使得更新项异常大,那么可训练参数可能波动很大,不会收敛。这就是梯度爆炸问题。

2、为什么会发生梯度消失、梯度爆炸

1.深层网络角度

深度学习中的梯度消失、梯度爆炸问题1、什么是梯度消失、梯度爆炸2、为什么会发生梯度消失、梯度爆炸3、梯度消失、梯度爆炸在深度学习、机器学习模型训练中的表现形式4、在模型中快速定位梯度消失、梯度爆炸问题5、梯度消失、梯度爆炸问题的解决方法6、总结

 从深层网络角度来讲,不同的层学习的速度差异很大,表现为网络中靠近输出的层学习的情况很好,靠近输入的层学习的很慢,有时甚至训练了很久,前几层的权值和刚开始随机初始化的值差不多。因此,梯度消失、爆炸,其根本原因在于反向传播训练法则,属于先天不足,另外多说一句,Hinton提出capsule的原因就是为了彻底抛弃反向传播

深度学习中的梯度消失、梯度爆炸问题1、什么是梯度消失、梯度爆炸2、为什么会发生梯度消失、梯度爆炸3、梯度消失、梯度爆炸在深度学习、机器学习模型训练中的表现形式4、在模型中快速定位梯度消失、梯度爆炸问题5、梯度消失、梯度爆炸问题的解决方法6、总结

2.激活函数角度

计算权值更新信息的时候需要计算前层偏导信息,因此如果激活函数选择不合适,比如使用sigmoid,梯度消失就会很明显了。下图是sigmoid的导数的图像,其梯度不会超过0.25,如果使用sigmoid作为损失函数,经过链式求导之后,很容易发生梯度消失。

深度学习中的梯度消失、梯度爆炸问题1、什么是梯度消失、梯度爆炸2、为什么会发生梯度消失、梯度爆炸3、梯度消失、梯度爆炸在深度学习、机器学习模型训练中的表现形式4、在模型中快速定位梯度消失、梯度爆炸问题5、梯度消失、梯度爆炸问题的解决方法6、总结
深度学习中的梯度消失、梯度爆炸问题1、什么是梯度消失、梯度爆炸2、为什么会发生梯度消失、梯度爆炸3、梯度消失、梯度爆炸在深度学习、机器学习模型训练中的表现形式4、在模型中快速定位梯度消失、梯度爆炸问题5、梯度消失、梯度爆炸问题的解决方法6、总结

3、梯度消失、梯度爆炸在深度学习、机器学习模型训练中的表现形式

表现为网络中靠近输出的层学习的情况很好,靠近输入的层学习的很慢,有时甚至训练了很久,前几层的权值和刚开始随机初始化的值差不多

4、在模型中快速定位梯度消失、梯度爆炸问题

5、梯度消失、梯度爆炸问题的解决方法

1、 预训练加微调

2、梯度剪切、权重正则(针对梯度爆炸)

梯度剪切这个方案主要是针对梯度爆炸提出的,其思想是设置一个梯度剪切阈值,然后更新梯度的时候,如果梯度超过这个阈值,那么就将其强制限制在这个范围之内。这可以防止梯度爆炸。

另外一种解决梯度爆炸的手段是采用权重正则化(weithts regularization)比较常见的是L1正则,和 L2正则,在各个深度框架中都有相应的API可以使用正则化。

3、 使用不同的激活函数,relu、leakrelu、elu等激活函数

4、使用batchnorm(梯度消失、梯度爆炸)

batchnorm是batch normalization,简称BN,即批规范化,通过规范化操作将输出信号x规范化保证网络的稳定性。目前已经被广泛的应用到了各大网络中,具有加速网络收敛速度,提升训练稳定性的效果,Batchnorm本质上是解决反向传播过程中的梯度问题。

BatchNormalization就是通过对每一层的输出规范为均值和方差一致的方法,消除了x带来的放大缩小的影响,进而解决梯度消失和爆炸的问题,或者可以理解为BN将输出从饱和区拉倒了非饱和区。

5、 使用残差结构(梯度消失)

来自何恺明的深度残差网络中的残差结构。残差结构中有跨层的连接连接,在反向传播中可以解决梯度消失过快问题。神经网络层数可以增加到上千层。

深度学习中的梯度消失、梯度爆炸问题1、什么是梯度消失、梯度爆炸2、为什么会发生梯度消失、梯度爆炸3、梯度消失、梯度爆炸在深度学习、机器学习模型训练中的表现形式4、在模型中快速定位梯度消失、梯度爆炸问题5、梯度消失、梯度爆炸问题的解决方法6、总结

6、使用LSTM网络(梯度消失、梯度爆炸)

LSTM全称是长短期记忆网络(long-short term memory networks),是不那么容易发生梯度消失的,主要原因在于LSTM内部复杂的“门”(gates),如下图,LSTM通过它内部的“门”可以接下来更新的时候“记住”前几次训练的”残留记忆“。

6、总结

继续阅读