27、梯度消失与梯度爆炸

梯度消失经常出现在深层网络、采用了不合适的损失函数,比如sigmoid。

梯度爆炸一般出现在深层网络、权值初始化值太大的情况下。

1、梯度消失、梯度爆炸的原因:

对激活函数进行求导,如果求导的每个部分部分小于1,那么随着层数增多,求出的梯度更新信息将会以指数形式衰减,即发生了梯度消失

如果此部分大于1,那么层数增多的时候,最终的求出的梯度更新将以指数形式增加,即发生梯度爆炸

2、梯度爆炸的原因:
当我们将w初始化为一个较大的值时,例如>10的值,那么从输出层到输入层每一层都会有一个s‘(zn)*wn的增倍,当s‘(zn)为0.25时s‘(zn)*wn>2.5,同梯度消失类似,当神经网络很深时,梯度呈指数级增长,最后到输入时,梯度将会非常大,我们会得到一个非常大的权重更新,这就是梯度爆炸的问题,在循环神经网络中最为常见。

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

3、解决方案

梯度消失:

非饱和的激活函数(如 ReLU)

批量规范化(Batch Normalization)

LSTM

残差结构

梯度爆炸:

梯度剪切、正则

非饱和的激活函数(如 ReLU)

批量规范化(Batch Normalization)

梯度截断(Gradient Clipping)

好的参数初始化方式,如He初始化

posted @ 2020-09-24 10:26  Andy_George  阅读(222)  评论(0编辑  收藏  举报