深度神经网络中的梯度消失与爆炸

在这里插入图片描述

在反向传播过程中需要对**函数进行求导,如果导数大于1,那么随着网络层数的增加梯度更新将会朝着指数爆炸的方式增加这就是梯度爆炸。同样如果导数小于1,那么随着网络层数的增加梯度更新信息会朝着指数衰减的方式减少这就是梯度消失。因此,梯度消失、爆炸,其根本原因在于反向传播训练法则。计算权值更新信息的时候需要计算前层偏导信息,因此如果**函数选择不合适,比如使用sigmoid,梯度消失就会很明显了,原因看下图,左图是sigmoid的损失函数图,右边是其导数的图像,如果使用sigmoid作为损失函数,我们知道Sigmoid函数有一个缺点:当x较大或较小时,导数接近0;并且Sigmoid函数导数的最大值是0.25,这样经过链式求导之后,很容易发生梯度消失。
在这里插入图片描述
同理,tanh作为**函数,它的导数图如下,可以看出,tanh比sigmoid要好一些,但是它的导数仍然是小于1的。
在这里插入图片描述

Sove :梯度消失和爆炸的解决办法

a)预训练+微调

b)梯度裁剪:主要针对梯度爆炸问题,设置一个阈值,当梯度查过这个阈值之后将它限制在这个范围之内。

c)权重正则化,L1和L2正则化。

在这里插入图片描述

d)使用Relu Lrelu Prelu Rrelu**函数来防止梯度消失问题。
Relu:思想也很简单,如果**函数的导数为1,那么就不存在梯度消失爆炸的问题了,每层的网络都可以得到相同的更新速度

e)batchnorm

f)使用残差网络

参考博客: https://blog.csdn.net/qq_25737169/article/details/78847691?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.pc_relevant_is_cache&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.pc_relevant_is_cache