前言
梯度消失和梯度爆炸是深度网络训练过程中容易遇到的问题,由于网络层数的加深,梯度的膨胀或缩小效应不断累积,最终很容易造成模型无法收敛。除了模型本身的深度,发生的原因往往与参数初始化及模型设置,这里列举一些场景的原因与解决策略,以供参考。
一、发生原因
梯度消失与梯度爆炸出现的原因基本一致,一般可能是网络层数过深、激活函数、损失函数设置与参数初始化问题。学过梯度下降理论就很好理解,无非就是求梯度过程某个值过大过小或链式法则层数过多导致累积效果过大。
梯度消失:隐层过多;不合适的激活函数(也有可能产生梯度爆炸)
梯度爆炸:隐层过多;权重初始值过大
深层网络
反向传播算法根据链式求导法则,如果某部分比如激活函数求导的值持续小于1,那么随着网络变深效果累积就会导致梯度以指数形式衰减,即发生了梯度消失;相应的如果持续大于1,那么最终的梯度信息会以指数形式增加,最终发生了梯度爆炸。

这张图就可以很好的说明这个现象,对于layer1,反向传播过程链式法则的项数较多,如果持续小于1那么梯度会变得很小,学习的速度也会相应变得很慢,正是由于这种累积效应,速度差异达到很多数量级。(这里那能不能对于深层区域通过设计优化算法采用更高的学习率使之一致呢
总结一下,从深层网络角度来讲,不同的层学习的速度差异很大,表现为网络中靠近输出的层学习的情况很好,靠近输入的层学习的很慢,有时甚至训练了很久,前几层的权值和刚开始随机初始化的值差不多。因此,梯度消失、爆炸,其根本原因在于反向传播训练法则,属于先天不足。
激活函数


本文探讨了深度网络训练中常见的梯度消失和梯度爆炸问题,分析了问题产生的原因,如网络层数过深、激活函数选择不当及权重初始化不合理等,并提出了包括使用ReLU激活函数、He初始化、BatchNorm、残差结构等多种解决方案。
最低0.47元/天 解锁文章
2066

被折叠的 条评论
为什么被折叠?



