本文参考:深度学习之3——梯度爆炸与梯度消失

梯度消失和梯度爆炸的根源:深度神经网络结构反向传播算法

目前优化神经网络的方法都是基于反向传播的思想,即根据损失函数计算的误差通过反向传播的方式,指导深度网络权值的更新。

为什么神经网络优化用到梯度下降的优化方法?

深度网络是由许多非线性层(带有激活函数)堆叠而成,每一层非线性层可以视为一个非线性函数 f(x) ,因此整个深度网络可以视为一个复合的非线性多元函数:

我们的目的是希望这个多元函数可以很好的完成输入到输出的映射,假设不同的输入,输出最优解是 g(x) ,那么优化深度网络就是为了寻找到合适的权值,满足损失取得最小值点,比如简单的损失函数平方差(MSE):

在数学中寻找最小值问题,采用梯度下降的方法再合适不过了。

1.深层网络的结构

在反向传播对激活函数进行求导的时候,如果此部分大于1,那么随着层数的增加,求出的梯度的更新将以指数形式增加,发生梯度爆炸。如果此部分小于1,那么随着层数的增加求出的梯度更新的信息会以指数形式衰减,如果某一次等于0,那么相乘就全为0这就是梯度消失,发生梯度消失。梯度消失/梯度爆炸:二者问题问题都是因为网络太深,网络权值更新不稳定造成的。本质上是因为梯度反向传播中的连乘效应(小于1连续相乘多次)。
反向传播更新参数w的更新过程,对于参数。梯度消失时,越靠近输入层的参数w越是几乎纹丝不动;梯度爆炸时,越是靠近输入层的参数w越是上蹿下跳。稳定和突变都不是我们想要的,我们想要的是参数w朝着误差减小的方向稳步变化。

从深层网络角度来说,不同的层学习的速度差异很大,表现为网络中靠近输出的层学习的情况很好,靠近输入层的学习很慢,甚至即使训练了很久,前基层的权值和刚开始初始化的值差不多,因此梯度消失和梯度爆炸的根本原因在于反向传播算法的不足。

2.激活函数的角度:

如果激活函数的选择不合适,比如使用Sigmoid,梯度消失会很明显。

下图为sigmoid函数(又叫Logistic)和Tanh函数的导数,Logistic导数最大的时候也只有0.25,其余时候远小于0.25,因此如果每层的激活函数都为sigmoid函数的话,很容易导致梯度消失问题,Tanh函数的导数峰值是1那也仅仅在取值为0的时候,其余时候都是小于1,因此通过链式求导之后,Tanh函数也很容易导致梯度消失。

3.梯度消失、爆炸的解决方案

1.预训练和微调

预训练:无监督逐层训练,每次训练一层隐藏点,训练时将上一层隐节点的输出作为输入,而本层隐节点的输出作为下一层隐节点的输入。称为逐层预训练。在预训练完成后还要对整个网络进行微调。

2.梯度剪切、正则

梯度剪切又叫梯度截断,是防止梯度爆炸的一种方法,其思想是设置一个梯度剪切阈值,更新梯度的时候,如果梯度超过这个阈值,那就将其强制限制在这个范围之内。

3.relu、leakyrelu、elu等激活函数

从relu的函数特性我们知道,在小于0的时候梯度为0,大于0的时候梯度恒为1,那么此时就不会再存在梯度消失和梯度爆炸的问题了,因为每层的网络得到的梯度更新速度都一样。

relu的主要贡献:

  • 解决了梯度消失和梯度爆炸的问题
  • 计算方便计算速度快(梯度恒定为0或1)
  • 加速了网络的训练

缺陷:

  • 由于负数部分恒为0,导致一些神经元无法激活(可通过设置小学习率部分解决)
  • 输出并不是零中心化的

尽管relu也有缺点,但是仍然是目前使用最多的激活函数

leakyrelu就是为了解决relu的0区间带来的影响,在小于0的区间,梯度为很小的数(非零),leakyrelu解决了0区间带来的影响,而且包含了relu所有优点。

elu激活函数也是为了解决relu的0区间带来的影响,但是elu相对于leakyrelu来说,计算要耗时一些(有e的幂计算)。

4.Batch Normalization(批规范化)

详细阅读文章:

关于BN,这里举个简单的例子来说明:

正向传播中:,反向过程中:

反向传播过程中 w 的大小影响了梯度消失和爆炸,BN就是通过对每一层的输出规范为均值和方差一致的方法,消除了 w 带来的放大缩小的影响,进而解决梯度消失和爆炸的问题,或者可以理解为BN将输出从饱和区拉到了非饱和区(比如Sigmoid函数)。

5.残差结构

详细阅读文章:

自从残差网络提出后,几乎所有的深度网络都离不开残差的身影,相比较之前的几层,几十层的深度网络,残差网络可以很轻松的构建几百层而不用担心梯度消失过快的问题,原因在于残差的捷径,我们可以抽象的理解为残差网络就是把里面的连乘变成了连加,这样就解决了某一个权值求导为0的情况的影响,即:局部不会影响全局。

6.LSTM(长短期记忆网络)

在RNN(循环神经网络)网络结构中,由于使用sigmoid或者Tanh函数,所以很容易导致梯度消失的问题,即在相隔很远的时刻时,前者对后者的影响几乎不存在了,LSTM的机制正是为了解决这种长期依赖问题。具体的关于RNN和LSTM的解释,后续我学到了再写一篇文章。

深度学习——梯度消失、梯度爆炸相关推荐

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

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

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

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

  3. 深度学习--TensorFlow(4)BP神经网络(损失函数、梯度下降、常用激活函数、梯度消失梯度爆炸)

    目录 一.概念与定义 二.损失函数/代价函数(loss) 三.梯度下降法 二维w与loss: 三维w与loss: 四.常用激活函数 1.softmax激活函数 2.sigmoid激活函数 3.tanh ...

  4. 深度学习基础知识---梯度弥散 梯度爆炸

    目录 1 梯度弥散.梯度爆炸的成因 2  解决方式 2.1.pretrain+finetune 2.2 梯度裁剪 2.3 权重正则化 2.5 Batch Normalization正则化 2.6 残差 ...

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

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

  6. LSTM如何解决梯度消失或爆炸的?

    from:https://zhuanlan.zhihu.com/p/44163528 哪些问题? 梯度消失会导致我们的神经网络中前面层的网络权重无法得到更新,也就停止了学习. 梯度爆炸会使得学习不稳定 ...

  7. ztree在刷新时第一个父节点消失_从反向传播推导到梯度消失and爆炸的原因及解决方案(从DNN到RNN,内附详细反向传播公式推导)...

    引言:参加了一家公司的面试和另一家公司的笔试,都问到了这个题!看来很有必要好好准备一下,自己动手推了公式,果然理解更深入了!持续准备面试中... 一. 概述: 想要真正了解梯度爆炸和消失问题,必须手推 ...

  8. 反向传播算法推导、激活函数、梯度消失与爆炸

    目录 反向传播算法 定义 推导过程 激活函数 定义 性质 常用的激活函数 Sigmoid Tanh ReLU softmax 梯度消失与梯度爆炸 起因 出现的原因 表现 解决方案 参考文档 反向传播算 ...

  9. 网络退化梯度消失梯度爆炸

    ** 网络退化.梯度消失.梯度爆炸 ** 网络退化:在增加网络层数的过程中,training accuracy 逐渐趋于饱和,继续增加层数,training accuracy 就会出现下降的现象,而这 ...

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

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

最新文章

  1. hung-yi lee_p11_逻辑回归
  2. Python中的map()函数
  3. 高品质摄影作图台式计算机推荐,浅谈高质量摄影照片后期输出的打印机选择
  4. 究竟什么是POJO?(转载)
  5. Python之路(第二十一篇) re模块
  6. 批量显示JOB Log
  7. pyqt5 listview 不默认选中_pyqt5 商店小票打印的实现模板
  8. linux2.6内核compat_ioctl函数
  9. 矩阵维度必须一致_如何从看得懂到会使用矩阵思维
  10. 人工智能大咖齐聚北京,创新大讲堂9月盛势来袭
  11. LeetCode篇之栈:155(常数时间复杂度内找最小栈)
  12. Debian、Ubuntu源码编译制作安装包(一)
  13. Python定时任务轻量解决方案---Schedule
  14. ApacheCN PythonWeb 译文集 20211028 更新
  15. git命令提交本地代码到远程仓库
  16. 字符串算法 —— 两字符串相同的单词
  17. python机器学习库sklearn——逻辑回归
  18. js 如何拿到后天的时间_js获取日期及日期相关js方法 积累总结
  19. 【图像加密】基于matlab GUI Arnold置乱图像加密解密【含Matlab源码 1239期】
  20. sitemesh学习

热门文章

  1. 路由器与静态路由配置命令(基础)
  2. 自己出来创业也两年多了
  3. EHCI主机控制器--队列元素传输描述符(qTD)
  4. MySQL之——MySQL5.7以上my.cnf配置文件配置
  5. PSR 规范是干什么的?分别有哪些?底层原理是什么?
  6. 听说过孤儿进程和僵尸进程嘛?
  7. 任意二叉树节点数、度数与叶子数的关系
  8. 线框图:启动开发项目的绝佳方式
  9. oracle验证pfile起库,Oracle数据库数据恢复验证笔记
  10. 挖挖双色球——数据挖掘技术 分享