专栏首页中科院渣渣博肆僧一枚梯度消失和梯度爆炸原因及其解决方案

梯度消失和梯度爆炸原因及其解决方案

当我们需要解决一个非常复杂的问题,例如在高分辨率图像中检测数百种类型的对象,我们可能需要训练一个非常深的DNN,可能需要几十层或者上百层,每层包含数百个神经元,通过成千上万个连接进行连接,我们会遇到以下问题:

首先,梯度消失或梯度爆炸

其次,训练缓慢

第三,训练参数大于训练集的风险

梯度消失的原因:


生物神经元似乎是用 Sigmoid(S 型)激活函数活动的,因此研究人员在很长一段时间内坚持 Sigmoid 函数。但事实证明,Relu 激活函数通常在 ANN 工作得更好。这是生物研究误导的例子之一。

当神经网络有很多层,每个隐藏层都使用Sigmoid函数作为激励函数时,很容易引起梯度消失的问题

我们知道Sigmoid函数有一个缺点:当x较大或较小时,导数接近0;并且Sigmoid函数导数的最大值是0.25

我们将问题简单化来说明梯度消失问题,假设输入只有一个特征,没有偏置单元,每层只有一个神经元:

我们先进行前向传播,这里将Sigmoid激励函数写为s(x):

z1 = w1*x

a1 = s(z1)

z2 = w2*a1

a2 = s(z2)

...

zn = wn*an-1 (这里n-1是下标)

an = s(zn)

根据链式求导和反向传播,我们很容易得出,其中C是代价函数

如果我们使用标准方法来初始化网络中的权重,那么会使用一个均值为0标准差为1的高斯分布。因此所有的权重通常会满足|wj|<1,而s‘是小于0.25的值,那么当神经网络特别深的时候,梯度呈指数级衰减,导数在每一层至少会被压缩为原来的1/4,当z值绝对值特别大时,导数趋于0,正是因为这两个原因,从输出层不断向输入层反向传播训练时,导数很容易逐渐变为0,使得权重和偏差参数无法被更新,导致神经网络无法被优化,训练永远不会收敛到良好的解决方案。 这被称为梯度消失问题。

那么我们继续推广到每层有多个神经元时,有

其中a是Sigmoid函数的输出,那么它的范围就是-1<a<1,那么我们只考虑δ,有

那么很容易得出当参数|θ|<1时,容易引发梯度消失。

梯度爆炸的原因:


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

解决方案:


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

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

批量规范化(Batch Normalization)

梯度截断(Gradient Clipping)

更快的优化器

LSTM

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 截断梯度

    强非线性函数往往倾向于非常大或非常小幅度的梯度。这导致的困难是,当参数梯度非常大时,梯度下降的参数更新可以将参数抛出很远,进入目标函数较大的区域,到达当前解所做...

    于小勇
  • Gradient Harmonized Single-stage Detector

    虽然两级检测器取得了巨大的成功,但是单级检测器仍然是一种更加简洁和高效的方法,在训练过程中存在着两种众所周知的不协调,即正、负样本之间以及简单例子和困难例子之间...

    于小勇
  • 梯度下降及其优化

    偏导数刻画了函数沿坐标轴方向的变化率,但有些时候还不能满足实际需求。为了研究函数沿着任意方向的变化率,就需要用到方向导数。

    于小勇
  • 干货 | 深度学习之损失函数与激活函数的选择

    关键字全网搜索最新排名 【机器学习算法】:排名第一 【机器学习】:排名第二 【Python】:排名第三 【算法】:排名第四 前言 在深度神经网络(DNN)反向传...

    昱良
  • Andrew Ng机器学习课程笔记--week1(机器学习介绍及线性回归)

    之前看过一遍,但是总是模模糊糊的感觉,也刚入门,虽然现在也是入门,但是对于一些概念已经有了比较深的认识(相对于最开始学习机器学习的时候)。所以为了打好基础,决定...

    marsggbo
  • 详解机器学习中的梯度消失、爆炸原因及其解决方法

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_25737169/article/d...

    DoubleV
  • 机器学习 学习笔记(3) 梯度下降

    梯度下降法是一种常用的一阶优化方法,是求解无约束优化问题最简单、最经典的方法之一。

  • 学界 | 深度梯度压缩:降低分布式训练的通信带宽

    选自arXiv 机器之心编译 参与:Panda ICLR 2018 将在当地时间明年 4 月 30 日~5 月 3 日在加拿大温哥华举办。目前正处于评审阶段的会...

    机器之心
  • 为什么ResNet和DenseNet可以这么深?一文详解残差块为何有助于解决梯度弥散问题

    传统的“提拉米苏”式卷积神经网络模型,都以层叠卷积层的方式提高网络深度,从而提高识别精度。但层叠过多的卷积层会出现一个问题,就是梯度弥散(Vanishing),...

    AI研习社
  • 神经网络使用梯度下降的原因(摘自我写的书)

    目前深度神经网络模型的优化方法主要是梯度下降。我们使用梯度下降的方法来进行误差的反向传播,不断地调整模型参数,以降低模型所产生的误差,使模型更好实现从输入到输出...

    黄鸿波

扫码关注云+社区

领取腾讯云代金券