才子佳人博客

我的故事我讲述

梯度消失与梯度爆炸问题简述
 
来源:blog.csdn.net  编辑:xjh  2020-05-12

1、梯度消失与梯度爆炸问题简述

层数比较多的神经网络模型在使用梯度下降法对误差进行反向传播时会出现梯度消失和梯度爆炸问题。梯度消失问题和梯度爆炸问题一般会随着网络层数的增加变得越来越明显。     

例如,对于下图所示的含有3个隐藏层的神经网络,梯度消失问题发生时,靠近输出层的hidden layer 3的权值更新相对正常,但是靠近输入层的hidden layer1的权值更新会变得很慢,导致靠近输入层的隐藏层权值几乎不变,仍接近于初始化的权值。这就导致hidden layer 1 相当于只是一个映射层,对所有的输入做了一个函数映射,这时此深度神经网络的学习就等价于只有后几层的隐藏层网络在学习。  


  

梯度爆炸的情况是:当初始的权值过大,靠近输入层的hidden layer 1的权值变化比靠近输出层的hidden layer 3的权值变化更快,就会引起梯度爆炸的问题。在深层网络或循环神经网络中,误差梯度可在更新中累积,变成非常大的梯度,然后导致网络权重的大幅更新,并因此使网络变得不稳定。在极端情况下,权重的值变得非常大,以至于溢出,导致 NaN 值。网络层之间的梯度(值大于 1.0)重复相乘导致的指数级增长会产生梯度爆炸。

2、那么为什么会出现梯度消失的现象呢?

因为通常神经网络所用的激活函数是sigmoid函数,这个函数有个特点,就是能将负无穷到正无穷的数映射到0和1之间,并且对这个函数求导的结果是f′(x)=f(x)(1−f(x))。因此两个0到1之间的数相乘,得到的结果就会变得很小了。神经网络的反向传播是逐层对函数偏导相乘,因此当神经网络层数非常深的时候,最后一层产生的偏差就因为乘了很多的小于1的数而越来越小,最终就会变为0,从而导致层数比较浅的权重没有更新,这就是梯度消失。

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

3、如何确定是否出现梯度爆炸?如:

·模型无法从训练数据中获得更新(如低损失)。

·模型不稳定,导致更新过程中的损失出现显著变化。 

·训练过程中,模型损失变成 NaN。

梯度消失和梯度爆炸本质上是一样的,都是因为网络层数太多而引发的梯度反向传播中的连乘效应。

4、解决梯度消失、爆炸主要有以下几种方案:

1)重新设计网络模型

梯度爆炸可以通过重新设计层数更少的网络来解决。

2)换用Relu、LeakyRelu、Elu等激活函数

梯度爆炸的发生可能是因为激活函数,如之前很流行的 Sigmoid 和 Tanh 函数。使用 ReLU 激活函数可以减少梯度爆炸。采用 ReLU 激活函数是最适合隐藏层的,是目前使用最多的激活函数。

5、为什么使用梯度下降法来优化神经网络参数?

反向传播:根据损失函数计算的误差通过反向传播的方式,指导深度神经网络参数的更新优化。

采取反向传播的原因:首先,深度网络由许多线性层和非线性层堆叠而来,每一层非线性层都可以视为是一个非线性函数f(x)(非线性来自于非线性激活函数),因此整个深度网络可以视为是一个复合的非线性多元函数。

我们最终的目的是希望这个非线性函数很好的完成输入到输出之间的映射,也就是找到让损失函数取得极小值。所以最终的问题就变成了一个寻找多元函数最小值的问题,在数学上,很自然的就会想到使用梯度下降来解决。

原文链接:
https://blog.csdn.net/qq_30815237/java/article/details/89453315
https://www.sohu.com/a/332473808_468740


分类:网络日志| 查看评论
相关文章
文章点击排行
本年度文章点击排行
发表评论:
  • 昵称: *
  • 邮箱: *
  • 网址:
  • 评论:(最多100字)
  • 验证码: