一 什么是梯度消失和梯度爆炸

在深层网络或循环神经网络中,梯度反向传播来更新网络权值,会应用链式法则进行计算链式法则的本质是连乘,误差梯度可在更新中累积,变成非常大的梯度,然后导致网络权重的大幅更新,在极端情况下,权重的值变得非常大,以至于溢出,导致W为 NaN 值。 梯度消失就是在计算累计之下,梯度更新缓慢,梯度将变为0, 网络权值参数W不更新。
梯度爆炸模型表现:

  1. 模型不稳定,导致更新过程中的损失(Loss)出现显著变化;
  2. 训练过程中,打印个别层,权重的值变得非常大,以至于溢出,导致模型损失变成 NaN等。

    二 产生梯度消失和梯度爆炸的原因

    下面将从这3个角度分析一下产生这两种现象的根本原因:

    (1)深层网络

    1. 在深层网络或循环神经网络中,**梯度反向传播来**更新网络权值,会应用**链式法则**进行计算**,**链式法则的本质是**连乘,**所以当层数越深的时候,梯度将以指数传播。输出层的激活函数求导后梯度值大于1,那么层数增多的时候,最终求出的梯度很容易指数级增长,就会产生**梯度爆炸**;相反,如果小于1,那么经过链式法则的连乘形式,也会很容易衰减至0,就会产生**梯度消失**。

    (2)激活函数

    image.png image.png
    z=0,a=1/2, 导数g’(z)=1/4
    复习:https://www.yuque.com/dengxiaotian0212/klyctg/txmsao
    image.png
    假设是深层网络:
    image.png
    而我们初始化的网络权值梯度消失/梯度爆炸(Vanishing / Exploding gradients) - 图5通常都小于1,因此梯度消失/梯度爆炸(Vanishing / Exploding gradients) - 图6,因此对于db[1] 网络越深,值越小,梯度越容易消失。

    (3)初始化权重的值过大

    1. 同上,![](https://cdn.nlark.com/yuque/0/2022/svg/22608420/1651894391802-6191c6a6-2d45-408a-b834-59a18aadc71d.svg#clientId=udacf8ba6-f66b-4&crop=0&crop=0&crop=1&crop=1&from=paste&id=ud8367e0c&margin=%5Bobject%20Object%5D&originHeight=20&originWidth=86&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=u1d4f7bfb-8e5e-4318-b6ac-6f57722b4f2&title=),梯度爆炸。

    三 解决方法

    (1) pre-training+fine-tunning

    1. 此方法来自Hinton2006年发表的一篇论文,Hinton为了解决梯度的问题,提出采取无监督逐层训练方法,其基本思想是每次训练一层隐节点,训练时将上一层隐节点的输出作为输入,而本层隐节点的输出作为下一层隐节点的输入,此过程就是逐层“预训练”(pre-training);在预训练完成后,再对整个网络进行“微调”(fine-tunning)。此思想相当于是先寻找局部最优,然后整合起来寻找全局最优,此方法有一定的好处,但是目前应用的不是很多了。

    (2) 梯度剪切:对梯度设定阈值

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

    (3) 权重正则化

    比较常见的是 L1 正则和 L2 正则,在各个深度框架中都有相应的API可以使用正则化。正则化主要是通过对网络权重做正则来限制过拟合,也可以通过正则化项来限制权重的大小。

    (4) 选择relu等梯度大部分落在常数上的激活函数

    relu函数的导数在正数部分是恒等于1的

    (5) batch normalization

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

    (6) 残差网络的捷径(shortcut)

    (7) LSTM的“门(gate)”结构

    Q:防止梯度爆炸的方法

    正则化
    梯度裁剪
    relu激活函数
    batch normalization
    权重正则化

    Q:防止梯度消失的方法

    残差网络
    relu激活函数
    batch normalization
    权重正则化
    LSTM的门结构

    ref: https://zhuanlan.zhihu.com/p/72589432