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

devtools/2024/10/20 10:04:32/

一、梯度消失(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.ppmy.cn/devtools/10262.html

相关文章

设计模式之访问者模式(上)

访问者模式 1)概述 1.概念 访问者模式包含访问者和被访问元素两个主要组成部分。 处方单中的各种药品信息就是被访问的元素,而划价人员和药房工作人员就是访问者,被访问的元素通常具有不同的类型,且不同的访问者可以对它们进行…

vi, vim,data,wc,系统常用命令-读书笔记(十)

vi 文本编辑器 基本上 vi 共分为三种模式,分别是“一般指令模式”、“编辑模式”与“命令行命令模式”。这三种模式的作用分别是: 一般指令模式(command mode)以 vi 打开一个文件就直接进入一般指令模式了(这是默认的…

Java后端中如何随意接收参数

目录 一、参数名相同 二、参数名不同,使用RequestParam注解 大概访问流程是:先访问test控制器,test控制器跳转到index页面(此时index页面收到了test控制器传来的数据),然后在index页面跳转到t5控制器&…

ChatGPT引领:打造独具魅力的论文

ChatGPT无限次数:点击直达 ChatGPT引领:打造独具魅力的论文 在数字化时代,人工智能技术的快速发展不仅改变了我们生活的方方面面,还在学术研究领域展现出更广阔的可能性。其中,自然语言生成模型ChatGPT凭借其强大的生成能力和智能…

微信小程序 如何在组件中实现 上拉加载下一页和下拉触底

通过在父页面中使用selectComponent来调用子组件的方法来实现 1、在component中配置好方法 子页面homePage/index/index.js // homePage/index/index.js var total 0 var pageNo 1 const pageSize 20 Component({/*** 组件的属性列表*/properties: {},lifetimes: {create…

⽂件权限管理(下)

五、权限掩码 umask ⽤户掩码 控制⽤户创建⽂件和⽬录的默认权限 root⽤户默认权限 ⽬录777 ⽂件666 查看umask [rootqfedu.com ~]#umask 0022 root账户默认 0002 普通⽤户默认 修改umask [rootqfedu.com ~]#umask 0111计算⽅法:先把掩码做取反操作,然后…

【前后端】django前后端交互

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、django是什么二、django前后端交互指引三、总结 前言 随着开发语言及人工智能工具的普及,使得越来越多的人会主动学习使用一些开发语言&#x…

Linux及tmux、vim常用命令

Linux 关于Linux的简介、诞生、迭代,大家可以去网上查一查,这里不多做赘述了 Linux文件类型 非常重要的文件类型有: 普通文件,目录文件,链接文件,设备文件,管道文件,Socket 套接字文件 等。 …