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

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

1. 梯度消失原因

(1)深层网络角度

如果上一层梯度大于1,那么层数增多的时候,最终的求出的梯度更新将以指数形式增加,即发生梯度爆炸,如果上一层梯度小于1,那么随着层数增多,求出的梯度更新信息将会以指数形式衰减,即发生了梯度消失。

如果导数大于1,那么随着网络层数的增加梯度更新将会朝着指数爆炸的方式增加这就是梯度爆炸

(2)激活函数角度

如果使用sigmoid作为损失函数,其梯度是不可能超过0.25的,这样经过链式求导之后,很容易发生梯度消失。

2. 梯度消失、爆炸的解决方案

在各层预训练完成后,再利用BP算法对整个网络进行训练。此思想相当于是先寻找局部最优,然后整合起来寻找全局最优

(1)梯度剪切、正则

设置一个梯度剪切阈值,然后更新梯度的时候,如果梯度超过这个阈值,那么就将其强制限制在这个范围之内。这可以防止梯度爆炸。

正则化是通过对网络权重做正则限制过拟合。

sigmoid为什么会出现梯度消失_正则

(2)relu、leakrelu、elu等激活函数
Relu:思想也很简单,如果激活函数的导数为1,那么就不存在梯度消失爆炸的问题了,每层的网络都可以得到相同的更新速度。

relu的主要贡献在于:

– 解决了梯度消失、爆炸的问题
– 计算方便,计算速度快
– 加速了网络的训练
relu的缺点:

  • 由于负数部分恒为0,会导致一些神经元无法激活(可通过设置小学习率部分解决)
  • 输出不是以0为中心的

(3)batchnorm

具有加速网络收敛速度,提升训练稳定性的效果,Batchnorm本质上是解决反向传播过程中的梯度问题。batchnorm全名是batch normalization,简称BN,即批规范化,通过规范化操作将输出信号x规范化到均值为0,方差为1保证网络的稳定性。

(4)残差结构

sigmoid为什么会出现梯度消失_sigmoid为什么会出现梯度消失_02

(5)LSTM中的门控结构

sigmoid为什么会出现梯度消失_sigmoid为什么会出现梯度消失_03


sigmoid为什么会出现梯度消失_正则_04


sigmoid为什么会出现梯度消失_正则_05