小知识点快速总结:梯度爆炸和梯度消失的原理和解决方法

本系列文章只做简要总结,不详细说明原理和公式。

目录

  • 1. 参考文章
  • 2. 反向梯度求导推导
  • 3. 具体分析
    • 3.1 梯度消失的原理
    • 3.2 梯度爆炸的原理
  • 4. 解决方法

1. 参考文章

[1] shine-lee, "网络权重初始化方法总结(上):梯度消失、梯度爆炸与不良的初始化 "

2. 反向梯度求导推导

梯度下降算法的参数更新公式为,
W ( t + 1 ) = W ( t ) − α ∗ ∂ L ∂ W ( t ) W_{(t+1)}=W_{(t)}-\alpha*\frac{\partial L} {\partial W_{(t)}} W(t+1)=W(t)αW(t)L

梯度下降算法中,我们主要就是对 ∂ L ∂ W ( t ) \frac{\partial L} {\partial W_{(t)}} W(t)L进行求解。主要方法为链式求导法则。

下面这幅图是我推的一层链式求导过程和两层链式求导过程。可以发现对某个参数的偏导为一串因子的乘积,该因子依次为损失函数对网络输出的偏导、激活函数的偏导、线性组合的偏导、激活函数的偏导、线性组合的偏导等等,如下面所示:
在这里插入图片描述
从公式推导的结果来看,梯度下降算法主要受有4个因子影响,分别是:

  • 当前层的输入(上一层的输出),例如图中的 ∂ u ( 0 ) ∂ W ( 0 ) \frac{\partial u_{(0)}} {\partial W_{(0)}} W(0)u(0)
  • 激活函数的偏导,例如图中的 ∂ a ( 0 ) ∂ u ( 0 ) \frac{\partial a_{(0)}} {\partial u_{(0)}} u(0)a(0), ∂ a ( 1 ) ∂ u ( 1 ) \frac{\partial a_{(1)}} {\partial u_{(1)}} u(1)a(1)
  • 后层的权重,例如图中的 ∂ u ( 1 ) ∂ a ( 0 ) = W [ 0 ] \frac{\partial u_{(1)}} {\partial a_{(0)}} = W_{[0]} a(0)u(1)=W[0]
  • 损失函数的偏导,例如图中的 ∂ L ∂ a ( 1 ) \frac{\partial L} {\partial a_{(1)}} a(1)L

3. 具体分析

3.1 梯度消失的原理

根据链式求导法则,梯度的计算是由不同因子的连乘结果,只要其中某个因子的数值小于1那么随着网络的加深,后续的梯度一定是逐渐降低的(假设其他因子设置合理)。如果因子的数值够低,后续梯度甚至会出现消失现象,导致网络难以训练和收敛,这就是梯度消失的现象。

一般因子较低的是激活函数的偏导,大部分激活函数的梯度都小于1,例如sigmod函数的最大梯度是0.25。就算一直是最大梯度,经过10层后也是非常低的( 0.2 5 10 = 0.00000095367431640625 0.25^{10}=0.00000095367431640625 0.2510=0.00000095367431640625)。

梯度肯定会逐渐降低的,因为网络要收敛。我们此时讨论的是一开始网络就陷入梯度消失,导致难以训练的情况。

3.2 梯度爆炸的原理

同梯度消失的原理一样,梯度爆炸也是因为因子的数值大于1,在经过网络的不断加深,后续梯度出现爆炸的现象。

因为输入数据一般都经过归一化,数值不会很大。激活函数也很少出现梯度大于1的情况。因此,一般因子大于1的情况大部分源自于网络初始权重设置不规范

4. 解决方法

  1. BN层可以将输入数据的分布标准化为均值为0,方差为1的正太分布。此时数据的值分布在0值左右,正好是激活函数的梯度响应最大区域,从而有效地缓解梯度过低或者过高的情况 ,从而减轻梯度消失和爆炸的问题(一般是消失)。具体参考博客小知识点快速总结:Batch Normalization Layer(BN层)的作用
  2. 修改激活函数。在网络很深的情况下,不要使用梯度过低的激活函数,例如sigmod。
  3. 使用残差结构 f ( x ) = F ( x ) + x f(x) = F(x)+x f(x)=F(x)+x。由于梯度计算中有一个因子是 ∂ L ∂ a ( 1 ) \frac{\partial L} {\partial a_{(1)}} a(1)L,基于上面那个结构,哪怕网络梯度出现消失的情况,也至少能保证梯度为1,保证梯度的无损传递。
  4. 合理的设置网络权重。主要是防止梯度爆炸的情况。甚至可以对权重设置正则化,防止过大的情况。
  5. 对网络进行剪枝操作,提前终止梯度的消失或者爆炸。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Elixir学习笔记——速构(函数式编程基础)

在 Elixir 中,循环遍历 Enumerable 是很常见的,通常会过滤掉一些结果并将值映射到另一个列表中。 速构是此类构造的语法糖:它们将这些常见任务分组为 for 特殊形式。 例如,我们可以将一串整数映射到它们的平方值: 速构…

VSCode的maven插件配置问题

最近尝试使用VSCode开发java后台项目,发现安装了java开发套件的插件 配置了开发环境之后,maven下载的依赖包始终位于~/.m2/repository目录之后,放在了默认的C盘,这就是我最不喜欢的位置。 为了保证C的小,所以需要修改…

四川赤橙宏海商务信息咨询有限公司抖音电商服务领军企业

在当今数字化浪潮中,电商行业正以前所未有的速度蓬勃发展,而抖音电商作为其中的佼佼者,更是吸引了无数商家的目光。在这个充满机遇与挑战的市场中,四川赤橙宏海商务信息咨询有限公司凭借其专业的服务和深厚的行业底蕴,…

ezButton-按钮库

ezButton-按钮库 使用按钮时,初学者通常会遇到以下麻烦: Floating input issue 浮动输入问题Chattering issue 抖动问题Detecting the pressed and released events 检测按下和释放的事件Managing timestamp when debouncing for multiple buttons 在多…

Ubuntu 20.04 LTS WslRegisterDistribution failed with error: 0x800701bc

1.以管理员身份运行powershell,输入:wsl --update, 2.重新打开ubuntu即可。

2024年春季学期《算法分析与设计》练习15

问题 A: 简单递归求和 题目描述 使用递归编写一个程序求如下表达式前n项的计算结果&#xff1a; (n<100) 1 - 3 5 - 7 9 - 11 ...... 输入n&#xff0c;输出表达式的计算结果。 输入 多组输入&#xff0c;每组输入一个n&#xff0c;n<100。 输出 输出表达式的计…

Linux时间子系统6:NTP原理和Linux NTP校时机制

一、前言 上篇介绍了时间同步的基本概念和常见的时间同步协议NTP、PTP&#xff0c;本篇将详细介绍NTP的原理以及NTP在Linux上如何实现校时。 二、NTP原理介绍 1. 什么是NTP 网络时间协议&#xff08;英语&#xff1a;Network Time Protocol&#xff0c;缩写&#xff1a;NTP&a…

解决 uniapp h5 页面在私有企微iOS平台 间歇性调用uni api不成功问题(uni.previewImage为例)。

demo <template><view class"content"><image class"logo" src"/static/logo.png"></image><button click"previewImage">预览图片</button></view> </template><script> //打…

WebGIS如何加载微件

本篇文章以加载切换底图微件做示范 首先&#xff0c;添加require "esri/widgets/ScaleBar",//比例尺"esri/widgets/Legend",//图例"esri/widgets/basemapGallery" 然后添加加载切换底图的组件代码 const basemapGallery new BasemapGallery(…

如何下载mmwave_automotive_toolbox?

摘要&#xff1a;mmwave_automotive_toolbox已经没有下载连接了&#xff0c;因为它已经和radar_toolbox集成到一起了&#xff0c;本文介绍下载方法。 链接如下 Corner Radar Overview (ti.com) 本文发布的时间时2024年6月17日&#xff0c;如果上面这个链接已经无法访问&#…

3D Gaussian Splatting Windows安装

1.下载源码 git clone https://github.com/graphdeco-inria/gaussian-splatting --recursive 2.安装cuda NVIDIA GPU Computing Toolkit CUDA Toolkit Archive | NVIDIA Developer 3.安装COLMAP https://github.com/colmap/colmap/releases/tag/3.9.1 下载完成需要添加环…

AI产品经理,应掌握哪些技术?

美国的麻省理工学院&#xff08;Massachusetts Institute of Technology&#xff09;专门负责科技成果转化商用的部门研究表明&#xff1a; 每一块钱的科研投入&#xff0c;需要100块钱与之配套的投资&#xff08;人、财、物&#xff09;&#xff0c;才能把思想转化为产品&…

Stable Diffusion文生图模型训练入门实战(完整代码)

Stable Diffusion 1.5&#xff08;SD1.5&#xff09;是由Stability AI在2022年8月22日开源的文生图模型&#xff0c;是SD最经典也是社区最活跃的模型之一。 以SD1.5作为预训练模型&#xff0c;在火影忍者数据集上微调一个火影风格的文生图模型&#xff08;非Lora方式&#xff…

记录一次基于Vite搭建Vue3项目的过程

Vue2已经于2023年12月31日停止维护了&#xff0c;2024年算是vue3的崭新的一年&#xff0c;我们的项目也基本从vue2逐渐向着Vue3过渡&#xff0c;Vue3相较于vue2有更好的开发体验&#xff0c;和ts的自然融合使得项目的结构、功能拆分变得更加的清晰&#xff1b;组合式声明有种MV…

vulnhub靶机hacksudoLPE中Challenge-2

二、Challenge-2 1. ar Abusing 这个是要利用suid注意sudo也可以用&#xff0c;但是还是按照要求来 注意使用的suid自然是home文件夹 2. ash abusing 33. atobm Abusing 环境有问题&#xff0c;做不了 34. base32 Abusing 35. bash Abusing 36. cat Abusing 37. chmod Abusin…

视角概述( Perspective 业务分析篇)

背景 在业务分析工作中使用透视图来提供对特定于计划上下文的任务和技术的关注。大多数提案可能涉及一个或多个视角。视角主要包括&#xff1a; •敏捷•商业智能•信息技术•商业架构&#xff0c;以及业务流程管理。这些视角并不代表业务分析实践的所有可能视角。 任何给定…

HTTP/2 协议学习

HTTP/2 协议介绍 ​ HTTP/2 &#xff08;原名HTTP/2.0&#xff09;即超文本传输协议 2.0&#xff0c;是下一代HTTP协议。是由互联网工程任务组&#xff08;IETF&#xff09;的Hypertext Transfer Protocol Bis (httpbis)工作小组进行开发。是自1999年http1.1发布后的首个更新。…

kotlin类型检测与类型转换

一、is与!is操作符 1、使用 is 操作符或其否定形式 !is 在运行时检测对象是否符合给定类型。 fun main() {var a "1"if(a is String) {println("a是字符串类型:${a.length}")}// 或val b a is Stringprintln(b) } 二、"不安全的"转换操作符…

直播无线麦克风哪个好?一文揭秘无线领夹麦克风哪个牌子好!

​在人人可做自媒体的时代&#xff0c;众多普通人加入自媒体。对拍视频的自媒体人&#xff0c;好内容是基础&#xff0c;好设备是保障。想提升视频音质需专业无线麦克风。现无线麦克风品牌多&#xff0c;如何少花钱买高性价比产品是问题。作为资深自媒体人&#xff0c;我用过的…

基于振弦采集仪的地下综合管廊工程安全监测技术研究

基于振弦采集仪的地下综合管廊工程安全监测技术研究 地下综合管廊工程是一项重要的城市基础设施工程&#xff0c;承载着城市供水、供电、供热、排水等重要功能。为了确保地下综合管廊工程的安全运行&#xff0c;需要进行有效的安全监测。本文将重点研究基于振弦采集仪的地下综…