什么是梯度消失?
神经元的权重w和偏置b是和激活函数的梯度成正比的,激活函数导数越大,则w,b调整越快,如果激活函数梯度很小,在反向传播时,多个小于0的导数相乘,随着神经网络层数的加深,梯度方向传播到浅层网络时,基本无法引起全职的波动,也就是没有将loss的信息传递到浅层网络,这样网络就无法训练学习了。这就是所谓的梯度消失。

以sigmoid激活函数为例:
sigmoid(x)=1/1+e^−x
该函数可以将实数压缩到开区间(0,1),其导数为:
σ′(x)=e^−x/(1+e^−x)^2=σ(x)/(1−σ(x))
函数图像如下:
 
数两侧十分平滑,两端无限接近0和1,只有中间一段导数较大。当x=0时,其导数取最大值0.25。选择sigmoid函数作为激活函数的优势:1)可以引入非线性;2)容易求导;3)可以将实数压缩至(0,1)

神经网络主要的训练方法是BP算法,BP算法的基础是导数的链式法则,也就是多个导数的乘积。而sigmoid的导数最大为0.25,且大部分数值都被推向两侧饱和区域,这就导致大部分数值经过sigmoid激活函数之后,其导数都非常小,多个小于等于0.25的数值相乘,其运算结果很小。
梯度消失的解决方式主要有:

1)其它激活函数

激活函数对神经网络有显著的影响,现行常见的激活函数有ReLU、Leaky ReLU。
  • ReLU
    f(x)=max(0,x)f(x)=max(
    负数一侧永远为0,正数一侧导数永远为1。ReLU的优势在于:1)不饱和;2)计算效率高;3)收敛速度快。
  • Leaky ReLU
    Leaky ReLU与ReLU十分类似,只不过在负数一侧并不完全抑制,而是给予一个小的导数。

    2)层归一化

    也即batch normalization。主要希望解决的所谓”内部协变量漂移“(internal covariate shift)问题。对于实例集合,
    Batch normalization的基本思想:深层神经网络在做非线性变换前的输入值在训练过程中,其分布逐渐发生偏移,之所以训练收敛慢,一般是整体分布逐渐往非线性激活函数的两端靠近,这导致了反向传播时浅层神经网络的梯度消失。而batch normalization就是通过一定的规范化手段,将每个隐层输入的分布强行拉回到均值为0方差为1的标准正态分布上去,这使得输入值落回到非线性激活函数”敏感“区域。这使得梯度变大,学习速度加快,大大提高收敛速度。
    以sigmoid激活函数为例,说明batch normalization的作用。下图为均值为0,方差为1的标准正态分布:
    这意味着,在1个标准差范围内,x有64%的概率落在[−1,1]范围内,x有95%的概率落在[−2,2]的范围内。
    上图为sigmoid函数的导数,在[−2,2]的范围内,sigmoid函数的导数很大,而在两端饱和区,导数接近0。这也就意味着,经过batch normalization规范化后,输入值x有较大概率获得大的导数值,远离导数饱和区,从而使得梯度变大,学习速度加快,避免了梯度消失。
    batch normalization的优势在于:1)大大提高训练速度,加快收敛过程;2)batch normalization是类似于dropout的正则化方法

3)调整初始权重或者调整网络结构

1.jpg (11.17 KB, 下载次数: 4)

神经网络中的梯度消失相关推荐

  1. 深度神经网络中的梯度消失与爆炸

    在反向传播过程中需要对激活函数进行求导,如果导数大于1,那么随着网络层数的增加梯度更新将会朝着指数爆炸的方式增加这就是梯度爆炸.同样如果导数小于1,那么随着网络层数的增加梯度更新信息会朝着指数衰减的方 ...

  2. 神经网络中的梯度是什么,神经网络梯度公式推导

    1.BP神经网络的MATLAB训练Gradient是什么意思?Performance是什么意思?,大神能解释一下吗?谢谢了 Gradient是梯度的意思,BP神经网络训练的时候涉及到梯度下降法,表示为 ...

  3. 深度学习中的梯度消失、梯度爆炸问题

    写在前面: 有些博主对这个问题的解释很好,这里参考了: 详解机器学习中的梯度消失.爆炸原因及其解决方法 我在这方面的工作经验和知识面还不够,还需要积累后再做出更为专业的解答. 参考我之前转发过的一篇文 ...

  4. 神经网络中的梯度爆炸

    神经网络中的梯度爆炸 参考文章:https://blog.csdn.net/Uwr44UOuQcNsUQb60zk2/article/details/78877974 一.什么事梯度爆炸? " ...

  5. 神经网络训练中的梯度消失和梯度爆炸问题

    梯度消失和梯度爆炸 梯度消失的具体表现是,接近于输出层的权值更新相对正常,但是接近于输入层的权值基本不更新,或更新的非常慢.这样,深度网络的学习就等价于只有后几层的浅层网络的学习了. 梯度爆炸的具体的 ...

  6. 【深度学习篇】--神经网络中解决梯度弥散问题

     一.前述 在梯度下降中,随着算法反向反馈到前面几层,梯度会越来越小,最终,没有变化,这时或许还没有收敛到比较好的解,这就是梯度消失问题,深度学习遭受不稳定的梯度,不同层学习在不同的速度上 二.解决梯 ...

  7. 收藏 | 用 Keras 实现神经网络来解决梯度消失的问题

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:作者 | Jonathan Quijas 编译 | rong ...

  8. 机器学习中的梯度消失问题vanishing gradient

    翻译自Nikhil Garg的Quora回答. 梯度消失是使用梯度下降方法的神经网络中出现的问题,其表现是,在反向回馈(backpropagation)中使整个网络难以调节前面几层的参数(Parame ...

  9. 深度学习中的梯度消失与梯度爆炸及解决方案

    1.梯度消失与梯度爆炸 反向传播算法在神经网络中非常常见,可以说是整个深度学习的基石.在反向传播中,经常会出现梯度消失与梯度爆炸的问题.梯度消失产生的原因一般有两种情况:一是结构较深的网络,二是采用了 ...

最新文章

  1. avalov+require实现tab栏
  2. 获取mongodb数据变更_支持mysql、MongoDB数据变更订阅/监听分发
  3. Spring AOP详解(http://sishuok.com/forum/posts/list/281.html)
  4. Redis集群(一):集群搭建
  5. 服务器连接不稳定fifa,fifa服务器链接异常
  6. 【Elasticsearch】如何正确的关闭 重启 Elasticsearch集群
  7. Flink的累加器(Accumulator)应用
  8. JZOJ 1385. 直角三角形
  9. 电脑右击文件夹无反应
  10. SVN服务器搭建--Subversio与TortoiseSVN的配置安装(Windows)
  11. Asp.Net服务器控件添加OnClientClick属性绑定
  12. Qt网络编程之获取网络信息
  13. 微信小程序记录v1.0
  14. bt 与 ed2k 区别
  15. Unity3D鼠标控制摄像机“左右移动控制视角+WASD键盘控制前后左右+空格键抬升高度”脚本
  16. python识别字母代码_【Python-Opencv】KNN英文字母识别
  17. 【废了-准备删除01】渗透测试靶机搭建——基于WAMP的drupal7.x管理系统
  18. Pyside2 Qlabel如何快速添加click鼠标单击事件(新手上路,勿喷!)
  19. phpMyAdmin 4.8.1 远程文件包含 CVE-2018-12613 漏洞复现
  20. windows开源工具大全

热门文章

  1. Java程序员必读之书单
  2. 一键安装 linux 下 redis
  3. 2022年视觉框架,增加了机器人 流程框架 多任务流程 C#源码框架,机器视觉源码框架,编程语言C#,算法使用的是halcon
  4. 02_第一个 Python 程序及常见错误合集
  5. 在ZYNQ上裸机跑ARM程序的演示
  6. 木业智能装备应用技术类毕业论文文献有哪些?
  7. PHP打印九九乘法表(让输出内容能够完全对齐)
  8. 测试阿萨大大十大风格和
  9. 全力保障,共享荣光:麒麟信安热烈祝贺神舟十五号发射任务圆满成功!
  10. PhotoShop CC 2017软件工具面板使用---画笔工具