一、梯度消失、梯度爆炸产生的原因
  对于1.1 1.2,其实就是矩阵的高次幂导致的。在多层神经网络中,影响因素主要是权值和激活函数的偏导数。
1.1 前馈网络

若要对于w1求梯度,根据链式求导法则,得到的解为:


  通常,若使用的激活函数为sigmoid函数,其导数最大为1/4:


这样可以看到,如果我们使用标准化初始w,那么各个层次的相乘都是0-1之间的小数,而激活函数f的导数也是0-1之间的数,其连乘后,结果会变的很小,导致梯度消失。若我们初始化的w是很大的数,w大到乘以激活函数的导数都大于1,那么连乘后,可能会导致求导的结果很大,形成梯度爆炸。
 通常我们会将一个完整的句子序列视作一个训练样本,因此总误差即为各时间步(单词)的误差之和。
而RNN还存在一个权值共享的问题,即这几个w都是一个,假设,存在一个反复与w相乘的路径,t步后,得到向量:

  若特征值大于1,则会出现梯度爆炸,若特征值小于1,则会出现梯度消失。因此在一定程度上,RNN对比BP更容易出现梯度问题。主要是因为RNN处理时间步长一旦长了,W求导的路径也变的很长,即使RNN深度不大,也会比较深的BP神经网络的链式求导的过程长很大;另外,对于共享权值w,不同的wi相乘也在一定程度上可以避免梯度问题。
二、如何解决梯度消失、梯度爆炸
  1、对于RNN,可以通过梯度截断,避免梯度爆炸
  首先设置梯度阈值:clip_gradient
  在后向传播中求出各参数的梯度,不直接用梯度进行参数更新,求梯度的L2范数
  然后比较范数||g||与clip_gradient的大小
  如果范数大,求缩放因子clip_gradient/||g||,由缩放因子可以看出梯度越大,缩放因子越小,就可以很好的控制梯度的范围。
  最后将梯度乘以缩放因子得到最后需要的梯度。
  L1范数是指向量中各个元素绝对值之和
L2范数是指向量各元素的平方和然后求平方根
  2、可以通过添加正则项,避免梯度爆炸
  正则化是通过对网络权重做正则限制过拟合,仔细看正则项在损失函数的形式:
regularization 公式:
Loss=(y−WTx)2+α∣∣W∣∣2,其中,α 是指正则项系数,因此,如果发生梯度爆炸,权值的范数就会变的非常大,通过正则化项,可以部分限制梯度爆炸的发生。
  3、使用LSTM等自循环和门控制机制,避免梯度消失
  4、优化激活函数,譬如将sigmold改为relu,避免梯度消失
  如果激活函数的导数是1,那么就没有梯度爆炸问题了。可以发现,relu函数的导数在正数部分,是等于1的,因此就可以避免梯度消失的问题。【不好】:但是负数部分的导数等于0,这样意味着,只要在链式法则中某一个
小于0,那么这个神经元的梯度就是0,不会更新。
5、BN层
BN层提出来的本质就是为了解决反向传播中的梯度问题。
假设第一层的输入数据经过第一层的处理之后,得到第二层的输入数据。这时候,第二层的输入数据相对第一层的数据分布,就会发生改变,所以这一个batch,第二层的参数更新是为了拟合第二层的输入数据的那个分布。然而到了下一个batch,因为第一层的参数也改变了,所以第二层的输入数据的分布相比上一个batch,又不太一样了。然后第二层的参数更新方向也会发生改变。层数越多,这样的问题就越明显。
但是为了保证每一层的分布不变的话,那么如果把每一层输出的数据都归一化0均值,1方差不就好了?但是这样就会完全学习不到输入数据的特征了。不管什么数据都是服从标准正太分布,想想也会觉得有点奇怪。所以BN就是增加了两个自适应参数,可以通过训练学习的那种参数。这样把每一层的数据都归一化到β均值,γ标准差的正态分布上。
【将输入分布变成正态分布,是一种去除数据绝对差异,扩大相对差异的一种行为,所以BN层用在分类上效果的好的。
6、残差网络
残差单元可以以跳层连接的形式实现,即将单元的输入直接与单元输出加在一起,然后再激活。因此残差网络可以轻松地用主流的自动微分深度学习框架实现,直接使用BP算法更新参数。错误信号可以不经过任何中间权重矩阵变换直接传播到低层,一定程度上可以缓解梯度弥散问题(即便中间层矩阵权重很小,梯度也基本不会消失)。
三、梯度消失和梯度爆炸哪种经常出现
  事实上,梯度消失更容易出现,因为对于激活函数的求导:
  可以看到,当w越大,其wx+b很可能变的很大,而根据上面sigmoid函数导数的图像可以看到,wx+b越大,导数的值也会变的很小。因此,若要出现梯度爆炸,其w既要大还要保证激活函数的导数不要太小。

通常,若使用的激活函数为sigmoid函数,其导数:

梯度消失、梯度爆炸产生的原因相关推荐

  1. RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题

    RNN梯度消失和爆炸的原因 经典的RNN结构如下图所示: 假设我们的时间序列只有三段,  为给定值,神经元没有激活函数,则RNN最简单的前向传播过程如下: 假设在t=3时刻,损失函数为  . 则对于一 ...

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

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

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

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

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

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

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

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

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

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

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

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

  8. RNN梯度消失和爆炸

    原文:链接 也可以参考:解释的也很清晰 建议先看第一个 一,经典的RNN结构如下图所示: 假设我们的时间序列只有三段,  为给定值,神经元没有激活函数,则RNN最简单的前向传播过程如下: 假设在t=3 ...

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

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

  10. PyTorch系列入门到精通——梯度消失与爆炸,损失函数

    PyTorch系列入门到精通--梯度消失与爆炸

最新文章

  1. 转Meta的http-equiv属性详解
  2. python【数据结构与算法】二分模板
  3. linux基础 linhaifeng,Linux 基础命令(一)
  4. node path html模块,深入理解node.js之path模块
  5. ORACLE 归档日志打开与关闭
  6. Selenium2+python自动化6-八种元素元素定位(Firebug和firepath)
  7. java json jar包下载_jsonobject必备jar包
  8. java 二进制转换成图片_java二进制转换为图片
  9. 74HC595移位寄存器的使用
  10. java 黑盒测试_关于黑盒测试的总结
  11. layui upload上传文件时动态设置headers参数值
  12. GameFramework篇:AssetsBundle Tools配置
  13. Linux下暴力破解弱密码的工具
  14. Vue中使用dayjs
  15. 你真的足够了解Wi-Fi吗?
  16. [附源码]计算机毕业设计JAVAjsp海纳装修报价管理系统
  17. 是时候祭出我的高效办公神器了,小白和大牛的必备工具,文档管理so easy
  18. 一次搞定N个渠道的引流方式--“引流短链”
  19. 485串口通讯保存流量计的数据到Excel
  20. 简单(基本)的风光摄影照片后期处理-新手教程-ps照片后期基本处理

热门文章

  1. 【Unity3d学习】魔鬼与牧师(动作分离版本)
  2. 前沿计算技术于推动设计技术发展
  3. 关于华为任正非裁员事件
  4. Android 复杂的多类型列表视图新写法:MultiType 3.0
  5. 关键词排名的查询方法
  6. python从excel中读取数据然后随机选一个_从Python读取Excel复选框
  7. 伯努利试验及概率方程 二项式分布 期望值与方差
  8. DNS 报文结构和个人 DNS 解析代码实现——解决 getaddrinfo() 阻塞问题
  9. PS调色技巧及HSB调色原理
  10. PHP Screw php代码解密,运用php screw进行源代码加密