【机器学习300问】77、什么是梯度消失和梯度爆炸?

一、梯度消失(Vanishing gradients)

(1)定义

        在训练深度神经网络时,随着误差梯度从输出层向输入层逐层回传,梯度可能因为连乘效应逐渐减小。当使用激活函数的导数的最大值小于1时,深度网络中越前面的层(靠近输入层的层)在梯度回传过程中梯度变小得越快。如果梯度过小,它会使得网络的权重几乎不更新,从而导致学习过程中先导层训练缓慢,这就是所谓的梯度消失问题。

        梯度下降算法的权重更新公式:

W_{new} = W_{old} - \eta \frac{\partial J}{\partial W}

        其中W是权重,\eta是学习率,\frac{\partial J}{\partial W}是权重的梯度。梯度消失问题表现为\frac{\partial J}{\partial W}接近于0,导致权重的更新量变得非常小。

(2)举例理解

① 比喻举例 

        假设有一场“传话游戏”,有5个人在操场上站成一排,从队列中的最后一个孩子开始,让他们一个接一个地传递给最前面的孩子。在这个过程中,每个孩子只能复述他们听到的内容,且由于各种原因(比如声音太轻、风声干扰、听不清等),每传一次,信息就可能会变得模糊一些。当信息传到队伍前端时,原本清晰的信息可能已经变得难以辨认,甚至完全消失。这就是“信息消失”的现象。

② 具体案例 

        使用Sigmoid激活函数的深层神经网络容易出现梯度消失问题。Sigmoid函数在两端的导数值非常接近零,这意味着当网络层次加深时,反向传播的梯度经过多层Sigmoid函数后,会迅速衰减到几乎为零,使得前几层的权重几乎得不到有效更新。

        假设上面这个图中的神经网络激活函数是线性激活函数g(z)=z,这样一来输出就可以写成:

\hat y=W^{[l]}W^{[l-1]}W^{[l-2]}...W^{[3]}W^{[2]}W^{[1]}x

        如果使用激活函数(如Sigmoid)的导数的最大值小于1时(比如0.5),那么得到的输出是\hat y=\frac{1}{2^L}层数越深,激活函数输出以指数级递减。这样的情况也适用于与层数L相关的导数或梯度函数,也是呈指数级递减。

 

二、梯度爆炸(Exploding gradients)

(1)定义

        在训练深度神经网络时,权重的更新梯度成指数级增长。如此大的梯度值会导致权重的大幅波动,使得网络模型无法稳定下来,或者导致数值计算上溢,变得无法继续学习。梯度爆炸通常在RNNs中较为常见,尤其当时间序列数据非常长的时候。

        梯度下降算法的权重更新公式:

W_{new} = W_{old} - \eta \frac{\partial J}{\partial W}

        其中W是权重,\eta是学习率,\frac{\partial J}{\partial W}是权重的梯度。梯度爆炸则表现为\frac{\partial J}{\partial W}极大,使得更新步长非常大,可能在数值上溢(梯度值超过了计算机浮点数的表示范围)或者导致权重变得非常大以至于模型不稳定。

(2)举例理解

③ 比喻举例 

        假设有5个话筒和5个扬声器喇叭,他们是一对一对的组成5对,现在把他们收尾相连即“(话筒1,喇叭1) > (话筒2,喇叭2)>...>(话筒5,喇叭5)”,当你在第一个话筒处发出声音,声音会被一层层放大,直至超过喇叭的最大输出响度,产生啸叫。

④ 具体案例

        假设上面这个图中的神经网络激活函数是线性激活函数g(z)=z,这样一来输出就可以写成:

\hat y=W^{[l]}W^{[l-1]}W^{[l-2]}...W^{[3]}W^{[2]}W^{[1]}x

        如果使用激活函数(如Sigmoid)的导数的最大值大于1时(比如1.5),那么得到的输出是\hat y=1.5^L层数越深,激活函数输出以指数级递增。这样的情况也适用于与层数L相关的导数或梯度函数,也是呈指数级递增。

三、避免梯度消失和梯度爆炸的方法

(1)避免梯度消失

  • 选择合适的激活函数:使用ReLU激活函数及其变种(如Leaky ReLU, ELU等),它们的导数不会随着输入值的增大而减小,有助于缓解梯度消失问题。
  • 合适的初始化权重:采用He初始化或Xavier/Glorot初始化等策略,可以根据网络中每层的输入和输出尺寸来适当设定权重的初始化值,从而帮助梯度更平稳地流动。

(2)避免梯度爆炸

  • 选择合适的优化算法:如使用具有动量项的SGD或Adam等,以确保梯度在反向传播过程中保持在一个可控范围内,从而使模型能够稳健地学习和优化。
  • 使用梯度裁剪:在反向传播时,如果计算出的梯度超出了某个阈值,就将它限制在这个阈值范围内。这个技术对于防止梯度爆炸尤其有用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/690.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qt-C++笔记之QProcess声明在堆上和声明在栈上对进程执行是否异步的影响

qt-C笔记之QProcess声明在堆上和声明在栈上对进程执行是否异步的影响 —— 2024-04-13 code review! 文章目录 qt-C笔记之QProcess声明在堆上和声明在栈上对进程执行是否异步的影响1.结论2.关于异步执行在堆上声明 QProcess在栈上声明 QProcess 3.waitForFinished详解函数原…

动静态库详解

文章目录 动静态库动态库静态库动静态链接 动静态库 库LinuxWindows动态库.so.dll静态库.a.lib 动静态库的本质就是文件。lld ldd命令可以查看一个可执行程序所依赖的库文件 ldd code:查看code依赖的库文件 平台要支持开发,必须要提前在系统中安装&am…

flutter书架形式格口的动态创建(行、列数,是否全选的配置)

根据传入的行列数创建不同格口数量的书架 左图:5行3列、右图:3行3列 代码 import package:jade/bean/experienceStation/ExpCellSpecsBean.dart; import package:jade/configs/PathConfig.dart; import package:jade/utils/DialogUtils.dart; import p…

基于SpringBoot+Vue的外卖点餐网站 免费获取源码

项目源码获取方式放在文章末尾处 项目技术 数据库:Mysql5.7/8.0 数据表:12张 开发语言:Java(jdk1.8) 开发工具:idea 前端技术:vue html 后端技术:SpringBoot 功能简介 (有文档) 项目获取关键字&…

K8s: 在Pod中将configmap数据注入容器

configMap 概述 文档: https://kubernetes.io/zh-cn/docs/concepts/configuration/configmap/ Kubernetes 为我们提供了 ConfigMap,可以方便的配置一些变量 是一个存储键值对 key-value 对象的 创建一个可以包含多个键值对的 ConfigMap, 以下是:mul-c…

Java 笔试强训篇- Day1

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 点击消除 1.1 解题思路一 1.2 解题思路二 2.0 在两个数组中找出相同的数 2.1 解题思路 笔试强训说明:有一些题目提供不了原题。 1.0 点击消除 该题链…

Group Query Attention (GQA) 机制详解以及手动实现计算

Group Query Attention (GQA) 机制详解 1. GQA的定义 Grouped-Query Attention (GQA) 是对 Multi-Head Attention (MHA) 和 Multi-Query Attention (MQA) 的扩展。通过提供计算效率和模型表达能力之间的灵活权衡,实现了查询头的分组。GQA将查询头分成了G个组&#…

事务的传播行为介绍和事务失效

常用的就下图介绍的这两种,REQUIRED 支持当前事务,如果不存在,就新建一个,EQUIRES_NEW 如果有事务存在,挂起当前事务,创建一个新的事务 同一个service中必须用代理对象调用,否则失效

使用go和消息队列优化投票功能

文章目录 1、优化方案与主要实现代码1.1、原系统的技术架构1.2、新系统的技术架构1.3、查看和投票接口实现1.4、数据入库MySQL协程实现1.5、路由配置1.6、启动程序入口实现 2、压测结果2.1、设置Jmeter线程组2.2、Jmeter聚合报告结果,支持11240/秒吞吐量2.3、Jmeter…

java中MD5加密

MD5加密 MD5加密是不可逆的加密方式,A可以根据MD5加密转换成B,但是B不能再转换成A String passwordDigestUtils.md5DigestAsHex(password.getBytes());完成密码的加密

【情侣博客网站】

效果图 PC端 建塔教程 第一步:下载网站源码(在文章下方有下载链接) 第二步:上传到服务器或虚拟主机,解压。 第三步:这一步很关键,数据库进行连接,看图 admin/connect.php就是这…

[Android]Jetpack Compose设置颜色

在 Kotlin 和 Jetpack Compose 中设置颜色是一个非常直接的过程,涉及到使用 Color 类来定义和使用颜色。 Jetpack Compose 提供了多种方式来定义和应用颜色,包括预定义颜色、RGB 值、十六进制值等。下面是一些常用的设置颜色的方法: 1. 使用…

python-基础(4)-list

python专栏地址 上一篇:python-基础(3)-字符串操作 List结构 本节将学习以下内容 list初识list的操作 一、List初识 创建 通过[]/list([])创建 ,两者的区别可以参考python中用list和中括号创建列表有什么区别?(在创建时相同,但一个的实质时…

Spring Data Jpa的save方法更新未传值的字段被更新为空的处理方法

Spring Data Jpa的save()方法通过主键是否为空来判断insert或是update操作,但更新方法和以往使用的mybatis-plus存在一定的差异,特别记录处理方法。 Resourceprivate Dao dao;/*** 更新操作* param data 前端传入存在更新的字段值的对象*/public void up…

pat乙-1020月饼

贪心:既然有存货量一定,利润要最高; 这个贪心就在于我看“单价”最高,这个单价也是要把存货量算进去的,所以按“单价”排序,再遍历,优选选择“单价”最高的,不够的再补,…

el-menu 该有的页面显示不出来第一个应该想到的问题首先就算检查是否多写了一个 , 导致显示不出来原有的页面

问题描述 el-menu 该有的页面显示不出来第一个应该想到的问题首先就算检查是否多写了一个 , 导致显示不出来原有的页面 如图所示多写了一个,就会导致该有的页面显示不出来。

Python 天气预测

Python天气预测通常涉及到数据采集、数据预处理、选择和训练模型、以及预测和可视化等步骤。以下是使用Python进行天气预测的一般流程: 数据采集 使用爬虫技术从天气网站(如Weather Underground、中国天气网等)爬取历史天气数据&#xff0c…

my.cnf配置文件调优

mysql数据库的性能调优首先要考虑的就是表结构设计,一个糟糕的设计模式即使在性能强劲的服务器上运行时,也会表现得很差。与设计模式相似,查询语句也会影响mysql的性能,应该避免写出低效的sql查询语句。最后要考虑的就是参数优化,mysql数据库默认设置的性能非常差,只能起…

LeetCode 628. 三个数的最大乘积 java版

1. 官网: . - 力扣(LeetCode) 2. 题目: 给你一个整型数组 nums ,在数组中找出由三个数组成的最大乘积,并输出这个乘积。 示例 1: 输入:nums [1,2,3] 输出:6示例 2&…

Java中的递归方法:初学者的简明指南

Java中的递归方法:初学者的简明指南 递归是编程中的一个重要概念,它指的是一个方法直接或间接地调用自身。递归方法在处理某些问题时,特别是那些可以分解为更小、更简单的子问题时,非常有用。虽然递归的概念初看起来可能有些复杂…