概念

梯度不稳定

在层数比较多的神经网络模型的训练过程中会出现梯度不稳定的问题。

损失函数计算的误差通过梯度反向传播的方式,指导深度网络权值的更新优化。因为神经网络的反向传播算法是从输出层到输入层的逐层向前进行链式求导,前面层上的梯度是来自于后面层上梯度的乘积,当存在神经网络层数过多时,就有可能出现了梯度不稳定场景。

梯度消失

在神经网络反向传播中,当梯度从后往前传时,梯度不断减小,最后变为零,此时,浅层的神经网络权重得不到更新,那么前面隐藏层的学习速率低于后面隐藏层的学习速率,即随着隐藏层数目的增加,分类准确率反而下降了。这种现象叫做梯度消失。

靠近输入层的权值更新会变得很慢,导致靠近输入层的隐藏层权值几乎不变,接近于初始化的权值。这样在网络很深的时候,学习的速度很慢或者无法学习。

梯度爆炸

当权值过大,神经网络前面层比后面层梯度变化更快,会引起梯度爆炸问题。梯度爆炸就是由于初始化权值过大,w大到乘以激活函数的导数都大于1,因为前面层比后面层变化的更快,就会导致神经网络前面层的权值越来越大,梯度爆炸的现象就发生了。

梯度爆炸是一种与梯度消失相反的情况,当进行反向传播时,梯度从后往前传时,梯度不断增大,导致权重更新太大,以致于不断波动,使神经网络在最优点之间波动。

举个例子

梯度下降作为一种最常见的迭代式优化策略,应用在神经网络的BP算法中,由于深度神经网络层级太深,在求导的过程中,由于链式法则,可能会出现梯度消失和梯度爆炸现象,为了搞清楚为什么会出现这些情况,我们可以先从最简单的单层神经网络的求导过程着手,查看求导的结果。




这是由于反向传播结果的数值大小不止取决于求导的式子,很大程度上也取决于输入的模值。当计算图每次输入的模值都大于1,那么经过很多层回传,梯度将不可避免地呈几何倍数增长(每次都变成3~4倍,重复上万次,想象一下310000有多大……),直到Nan。这就是梯度爆炸现象。

当然反过来,如果我们每个阶段输入的模恒小于1,那么梯度也将不可避免地呈几何倍数下降(比如每次都变成原来的三分之一,重复一万次就是3-10000),直到0。这就是梯度消失现象。

值得一提的是,由于人为的参数设置,梯度更倾向于消失而不是爆炸。

解决方法

  • 使用 ReLU 激活函数可以减少梯度爆炸

    • 计算速度快,但是由于负数部分恒为0,会导致一些神经元无法激活
  • leakReLU,解决relu的0区间带来的影响
    • 其中k是leak系数,一般选择0.01或者0.02,或者通过学习而来。
  • ELU
  • 梯度剪切
    其思想是设置一个梯度剪切阈值,然后更新梯度的时候,如果梯度超过这个阈值,那么就将其强制限制在这个范围之内。这可以防止梯度爆炸。
  • 批量归一化
    通过规范化操作将输出信号x规范化到均值为0,方差为1保证网络的稳定性,加速网络收敛速度。

参考资料:https://www.zhihu.com/question/290392414

猜你喜欢:

【算法】梯度消失与梯度爆炸相关推荐

  1. 【深度学习】梯度消失和梯度爆炸问题的最完整解析

    作者丨奥雷利安 · 杰龙 来源丨机械工业出版社<机器学习实战:基于Scikit-Learn.Keras和TensorFlow> 编辑丨极市平台 1 梯度消失与梯度爆炸 正如我们在第10章中 ...

  2. sigmoid函数解决溢出_梯度消失和梯度爆炸及解决方法

    一.为什么会产生梯度消失和梯度爆炸? 目前优化神经网络的方法都是基于BP,即根据损失函数计算的误差通过梯度反向传播的方式,指导深度网络权值的更新优化.其中将误差从末层往前传递的过程需要链式法则(Cha ...

  3. 梯度消失和梯度爆炸_知识干货-动手学深度学习-05 梯度消失和梯度爆炸以及Kaggle房价预测...

    梯度消失和梯度爆炸 考虑到环境因素的其他问题 Kaggle房价预测 梯度消失和梯度爆炸 深度模型有关数值稳定性的典型问题是消失(vanishing)和爆炸(explosion). 当神经网络的层数较多 ...

  4. 批量标准化BN方法简介【避免了梯度消失和梯度爆炸、加速网络的收敛、优化网络结构】

    一. 本文的内容包括: 1. Batch Normalization,其论文:https://arxiv.org/pdf/1502.03167.pdf 2. Layer Normalizaiton,其 ...

  5. 动手学深度学习(PyTorch实现)(四)--梯度消失与梯度爆炸

    梯度消失与梯度爆炸 1. 梯度消失与梯度爆炸 2. 模型参数的初始化 2.1 PyTorch的默认随机初始化 2.2 Xavier随机初始化 3. 环境因素 3.1 协变量偏移 3.2 标签偏移 3. ...

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

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

  7. 梯度消失、梯度爆炸及其解决方法

    前言 本文主要深入介绍深度学习中的梯度消失和梯度爆炸的问题以及解决方案.本文分为三部分,第一部分主要直观的介绍深度学习中为什么使用梯度更新,第二部分主要介绍深度学习中梯度消失及爆炸的原因,第三部分对提 ...

  8. L8梯度消失、梯度爆炸

    houseprices数据下载: 链接:https://pan.baidu.com/s/1-szkkAALzzJJmCLlJ1aXGQ 提取码:9n9k 梯度消失.梯度爆炸以及Kaggle房价预测 代 ...

  9. 梯度消失和梯度爆炸问题解析

    前言 本文转载于梯度消失和梯度爆炸问题的最完整解析 作者丨奥雷利安 · 杰龙 来源丨机械工业出版社<机器学习实战:基于Scikit-Learn.Keras和TensorFlow> 目录 前 ...

最新文章

  1. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 获取注入的 libbridge.so 动态库中的 load 函数地址 并 通过 远程调用 执行该函数 )
  2. dz mysql日志清理_Discuz教程:如何准确的清理数据库
  3. 悬浮框_纯HTML实现某宝优惠券、商品列表和活动悬浮等布局(文末有源码)
  4. esp32 micropython web服务器_ESP32 Arduino教程:Websocket server(服务器)
  5. Spring5的核心容器
  6. Mysql报错:2006 - MySQL server has gone away
  7. net core 3.1 跨域 Cors 找不到 “Access-Control-Allow-Origin”
  8. 3 django系列之Form表单在前端web界面渲染与入库保存
  9. Oracle、Db2、SqlServer、MySQL 数据库插入当前系统时间
  10. Atom飞行手册翻译: 4.2 深入键表(keymap)
  11. 基于JAVA+SpringMVC+Mybatis+MYSQL的体育竞赛比赛赛事管理系统
  12. ANDROID事件触发机制
  13. 微信为什么没有公众号导航
  14. mysql重置root密码centos_Centos7重置Mysql 8.0.1 root 密码
  15. 基于python的在线考试系统-基于Django的在线考试系统
  16. 马蜂窝与滴滴联合发起:“旅游+交通”优化旅客出行方案
  17. 矩阵分析与应用-13-矩阵的迹
  18. 如何使用电力电子仿真软件Plecs写程序脚本?(欢迎交流学习)
  19. 信号与系统 基础知识点整理 01(文末可下载PDF格式)
  20. C语言 | 什么是ANSI C标准?

热门文章

  1. android wifi RSSI达到阈值自动断开
  2. Python第十课 网络管理
  3. response生成图片验证码
  4. 由浅到深讲解C#-LINQ
  5. HDU 2955 Robberies
  6. Centos6.5_x86_64 编译安装Subversion-1.8.5
  7. 图文说明如何使用T4在VS2008里生成代码
  8. [导入]ASP.NET AJAX 说明文档-客户端引用-全局命名空间-JavaScript 基础类型扩展-Array 类型扩展-contains 函数...
  9. hdu 1558(线段相交+并查集)
  10. hdu 2563(递推)