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

那么什么是梯度爆炸呢?梯度爆炸就是由于初始化权值过大,前面层会比后面层变化的更快,就会导致权值越来越大,梯度爆炸的现象就发生了。

在深层网络或循环神经网络中,误差梯度可在更新中累积,变成非常大的梯度,然后导致网络权重的大幅更新,并因此使网络变得不稳定。在极端情况下,权重的值变得非常大,以至于溢出,导致 NaN 值。

网络层之间的梯度(值大于 1.0)重复相乘导致的指数级增长会产生梯度爆炸。

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

训练过程中出现梯度爆炸会伴随一些细微的信号,如:

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

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

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

如何修复梯度爆炸问题?

 

有很多方法可以解决梯度爆炸问题,本节列举了一些最佳实验方法。

1. 重新设计网络模型

在深度神经网络中,梯度爆炸可以通过重新设计层数更少的网络来解决。

使用更小的批尺寸对网络训练也有好处。另外也许是学习率的原因,学习率过大导致的问题,减小学习率。

在循环神经网络中,训练过程中在更少的先前时间步上进行更新(沿时间的截断反向传播,truncated Backpropagation through time)可以缓解梯度爆炸问题。

2. 使用 ReLU 激活函数

在深度多层感知机神经网络中,梯度爆炸的发生可能是因为激活函数,如之前很流行的 Sigmoid 和 Tanh 函数。

使用 ReLU 激活函数可以减少梯度爆炸。采用 ReLU 激活函数是最适合隐藏层的新实践。

3. 使用长短期记忆网络

 在循环神经网络中,梯度爆炸的发生可能是因为某种网络的训练本身就存在不稳定性,如随时间的反向传播本质上将循环网络转换成深度多层感知机神经网络。

使用长短期记忆(LSTM)单元和相关的门类型神经元结构可以减少梯度爆炸问题。

采用 LSTM 单元是适合循环神经网络的序列预测的最新最好实践。

4. 使用梯度截断(Gradient Clipping)

 在非常深且批尺寸较大的多层感知机网络和输入序列较长的 LSTM 中,仍然有可能出现梯度爆炸。如果梯度爆炸仍然出现,你可以在训练过程中检查和限制梯度的大小。这就是梯度截断。

5. 使用权重正则化(Weight Regularization)

如果梯度爆炸仍然存在,可以尝试另一种方法,即检查网络权重的大小,并惩罚产生较大权重值的损失函数。该过程被称为权重正则化,通常使用的是 L1 惩罚项(权重绝对值)或 L2 惩罚项(权重平方)。

详解梯度爆炸和梯度消失相关推荐

  1. 梯度消失和梯度爆炸_梯度消失和梯度爆炸详解

    在中文搜索引擎搜索梯度爆炸或者梯度消失,出现的往往是一篇文章复制黏贴多次,而且这篇文章讲的并不清晰,比方说下面这种在文章中出现的图一,反正我是根本看不懂这张图描述的实什么,因此那篇被复制黏贴无数次的文 ...

  2. 梯度消失和梯度爆炸_梯度消失、爆炸的原因及解决办法

    一.引入:梯度更新规则 目前优化神经网络的方法都是基于反向传播的思想,即根据损失函数计算的误差通过梯度反向传播的方式,更新优化深度网络的权值.这样做是有一定原因的,首先,深层网络由许多非线性层堆叠而来 ...

  3. 梯度消失和梯度爆炸_梯度消失梯度爆炸-Gradient Clip

    梯度爆炸与梯度消失 实际现象: 当我们使用sigmoid function作为激活函数时,随着神经网络的隐藏层数增加,训练误差反而增大,造成了深度网络的不稳定. 梯度弥散: 靠近输出层的hidden ...

  4. 梯度爆炸与梯度消失是什么?有什么影响?如何解决?

    文章目录 一.梯度爆炸 1.什么是梯度爆炸? 2.有何影响? 二.梯度消失 1.定义 2.有何影响? 三.共同点 1.产生原因 2.解决办法 a. 方案1-预训练加微调 b. 方案2-梯度剪切.正则化 ...

  5. 什么是梯度爆炸与梯度消失

    梯度爆炸(Gradient Explosion)和梯度消失(Gradient Vanishing)是深度学习训练过程中的两种常见问题. 梯度爆炸是指当训练深度神经网络时,梯度的值会快速增大,造成参数的 ...

  6. 【转载】梯度爆炸和梯度消失

    写得很全的一篇知乎上的介绍 一.梯度消失 梯度消失出现的原因: 在深层网络中,如果激活函数的导数小于1,根据链式求导法则,靠近输入层的参数的梯度因为乘了很多的小于1的数而越来越小,最终就会趋近于0,例 ...

  7. 为什么会出现梯度爆炸和梯度消失现象?怎么缓解这种现象的发生?

    前言:梯度消失现象在深度神经网络训练过程中表现得尤为突出,随着网络层数的加深,损失在反向传播时梯度在不断减小,导致浅层网络的学习进行不下去,参数得不到有效更新.为什么会出现这种现象呢?下面小编将从神经 ...

  8. 神经网络梯度爆炸、梯度消失原因及解决方案

    本文参考:深度网络梯度爆炸的原因.产生的影响和解决方法(常用激活函数)_凝眸伏笔的博客-CSDN博客 产生原因: 网络层数太深,链式求导时的连乘效应会导致梯度爆炸或梯度消失. 如果梯度值均小于1,则会 ...

  9. 如何理解梯度爆炸和梯度消失

    如何理解梯度爆炸和梯度消失 何为梯度消失,产生的原因是什么? 梯度消失的最核心原因是,选择的优化方法不能很好的应对多层结构.在利用链式法则,求导的过程中导致梯度逐层衰减,最后消失.反之如果每次求导之后 ...

最新文章

  1. 22页PPT告诉你5G产业最新投资机会!
  2. Centos安装图形化界面
  3. linux命令history
  4. 使用python的Flask实现一个RESTful API服务器端
  5. ng-content的一个实际例子
  6. html之字符数字引用
  7. c++随机打乱数组_编程之路之php数组操作详解【文末有惊喜】
  8. C语言中宏定义和函数的取舍
  9. 超好用的录屏软件 captura
  10. 射频识别技术漫谈(26)——Felica的文件系统
  11. 中兴面试题 01背包问题
  12. 6.4.3.4 -排除默认网关故障
  13. 千锋2015.04月最新C语言基础视频教程
  14. 微信小程序(五)新版的用户授权和判断是否是否已经授权和自动提示更新版本
  15. LAN9252采用外部阻容复位的时候,RESET引脚一直为低的原因以及对应解决办法。
  16. Ubuntu20.04 conda安出错,成功解决:solving environment:failed with initial frozen solve.Retrying with flexibl
  17. Delphi导出word
  18. UI设计前景如何?市场需要怎样的UI设计师?
  19. 【django】搭建博客教程(2)——Template的使用
  20. eXtremeDB内存数据库7.0新版本的强大功能加强了它在物联网的关键作用

热门文章

  1. Linux上搭建h2引擎加载h2文件
  2. L1-007 念数字 (10分) (13行代码AC!!)
  3. 邮宝打印面单尺寸调整_摆脱束缚,自由轻松!无线打印奥利给(上)
  4. 瞬间带你了解如何优化 Mysql 数据库,老板再也不担心客户投诉了
  5. C与java通讯小结
  6. 如何把a1的图纸变成a0_如何安装家用空开配电
  7. java 及时释放内存_Java 内存释放
  8. dgi数据治理_荐书 | 5G时代组织急需数据体检
  9. python数组plot_Python Matplotlib:动态更新plot-数组长度未知
  10. 看图识物_看图识物:下面图里是什么植物呢?请朋友们评论区留言