对于梯度消失和梯度爆炸的理解

对于梯度消失和梯度爆炸的理解

一、梯度消失、梯度爆炸产生的原因

   说白了,对于1.1 1.2,其实就是矩阵的高次幂导致的。在多层神经网络中,影响因素主要是权值和激活函数的偏导数。

1.1 前馈网络

  假设存在一个网络结构如图:

<span>对于梯度消失和梯度爆炸的理解</span>

  其表达式为:

<span>对于梯度消失和梯度爆炸的理解</span>

 

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

 <span>对于梯度消失和梯度爆炸的理解</span>

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

<span>对于梯度消失和梯度爆炸的理解</span>

  这样可以看到,如果我们使用标准化初始w,那么各个层次的相乘都是0-1之间的小数,而激活函数f的导数也是0-1之间的数,其连乘后,结果会变的很小,导致梯度消失。若我们初始化的w是很大的数,w大到乘以激活函数的导数都大于1,那么连乘后,可能会导致求导的结果很大,形成梯度爆炸

   当然,若对于b求偏导的话,其实也是一个道理:

<span>对于梯度消失和梯度爆炸的理解</span>

  推出:

<span>对于梯度消失和梯度爆炸的理解</span>

1.2 RNN

  对于RNN的梯度下降方法,是一种基于时间的反向求导算法(BPTT),RNN的表达式:

<span>对于梯度消失和梯度爆炸的理解</span>

  通常我们会将一个完整的句子序列视作一个训练样本,因此总误差即为各时间步(单词)的误差之和。

<span>对于梯度消失和梯度爆炸的理解</span>

  而RNN还存在一个权值共享的问题,即这几个w都是一个,假设,存在一个反复与w相乘的路径,t步后,得到向量:

<span>对于梯度消失和梯度爆炸的理解</span>

  若特征值大于1,则会出现梯度爆炸,若特征值小于1,则会出现梯度消失。因此在一定程度上,RNN对比BP更容易出现梯度问题。主要是因为RNN处理时间步长一旦长了,W求导的路径也变的很长,即使RNN深度不大,也会比较深的BP神经网络的链式求导的过程长很大;另外,对于共享权值w,不同的wi相乘也在一定程度上可以避免梯度问题。

 1.3 悬崖和梯度爆炸

  对于目标函数,通常存在梯度变化很大的一个“悬崖”,在此处求梯度,很容易导致求解不稳定的梯度爆炸现象。

<span>对于梯度消失和梯度爆炸的理解</span>

 

 三、梯度消失和梯度爆炸哪种经常出现

  事实上,梯度消失更容易出现,因为对于激活函数的求导:

<span>对于梯度消失和梯度爆炸的理解</span>

  可以看到,当w越大,其wx+b很可能变的很大,而根据上面sigmoid函数导数的图像可以看到,wx+b越大,导数的值也会变的很小。因此,若要出现梯度爆炸,其w既要大还要保证激活函数的导数不要太小。

 

 二、如何解决梯度消失、梯度爆炸

  1、对于RNN,可以通过梯度截断,避免梯度爆炸

  2、可以通过添加正则项,避免梯度爆炸

  3、使用LSTM等自循环和门控制机制,避免梯度消失,参考:https://www.cnblogs.com/pinking/p/9362966.html

  4、优化激活函数,譬如将sigmold改为relu,避免梯度消失

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119443.html原文链接:https://javaforall.net

(0)
上一篇 2021年11月20日 上午6:00
下一篇 2021年11月20日 上午7:00


相关推荐

  • 【Java】线程基本使用——实现 Runnable接口

    【Java】线程基本使用——实现 Runnable接口实现 Runnable 接口说明 java 是单继承的 在某些情况下一个类可能已经继承了某个父类 这时在用继承 Thread 类方法来创建线程显然不可能了 java 设计者们提供了另外一个方式创建线程 就是通过实现 Runnable 接口来创建线程应用案例请编写程序 该程序可以每隔 1 秒 在控制台输出 hi 当输出 10 次后 自动退出 请使用实现 Runnable 接口的方式实现 这里底层使用了设计模式 代理模式 gt 代码模拟实现 Runnable 接口开发线程的机制

    2026年3月19日
    2
  • AttributeSet类

    AttributeSet类AttributeSet 公共接口类从指定新添加的 XML 文件中采集特征 属性等说明 通常你不想直接使用这个接口 而是用它传递资源 通过 Theme obtainstyled 这个方法来解析属性 nbsp Resources API 将依照你 XML 文件里期望的那样来改变源文件风格 类似 String my label 这样的书写格式 如果你直接使用 AttributeSet 直接那

    2025年11月19日
    4
  • 新手上路之oracle 视图 索引(了解)笔记

    新手上路之oracle 视图 索引(了解)笔记一.视图视图:建立在表|结果集|视图上的虚拟表,有以下作用1、简化:select查询语句2、重用:封装select语句命名3、隐藏:内部细节4、区分:相同数据不同查询不是所有的用户都有创建视图的权限1、前提:createview–>组connectresourcedba2、授权:–>sqlplus/nologa)、sys登录connsys

    2022年7月22日
    10
  • 基于JavaMail的Java邮件发送:复杂邮件发送

    基于JavaMail的Java邮件发送:复杂邮件发送本文链接:http://blog.csdn.net/xietansheng/article/details/51722660上一篇文章基于JavaMail的Java邮件发送:简单邮件发送讲解了邮件的基本协议,JavaMail组件,创建并发送一封简单邮件的详细步骤。本文将介绍如何创建并发送一封包含图片和附件的复杂邮件。一封复杂的邮件内容可以看做是由很多节点(或者可以说是“片段”…

    2022年5月14日
    42
  • 基于相关滤波的目标跟踪算法_粒子滤波目标跟踪算法优缺点

    基于相关滤波的目标跟踪算法_粒子滤波目标跟踪算法优缺点相关跟踪的核心就是滤波器filters的求解,从MOSSE到KCF再到SRDCF,滤波器的模型越来越复杂,计算速度越来越慢,使得相关滤波在计算速度上的优势越来越不明显。比如较新的算法CFLB和BACF等采用了空间约束来解决边界效应,SRDCF和STRCF等使用空间正则来解决边界效应,这些解决边界效应的措施都让相关跟踪面临实时性的挑战。ADMM把一个大优化问题分成可分布式同时求解的多个子问题,通过对…

    2025年6月25日
    4
  • supervisor简介

    supervisor简介1 supervisor 工具基于 python 的进程管理工具 server 端是 supervisord client 端是 supervisorct 命令当应用服务器要部署多个服务程序 机器关闭 重启的批量维护 此时 supervisor 是一个不错的选择 supervisor 可以同时启动所以应用程序而不用逐个启动 Supervisor 的功能如下 1 启动 重启 关闭

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号