当前位置: 首页 > news >正文

【AI知识点】梯度消失(Vanishing Gradient)和梯度爆炸(Exploding Gradient)

梯度消失(Vanishing Gradient)梯度爆炸(Exploding Gradient) 是神经网络训练中的常见问题,特别是在深层神经网络(DNN)或递归神经网络(RNN)中。这两者主要与反向传播算法中的梯度计算有关,它们会导致模型在训练过程中收敛困难,甚至无法正确学习。

1. 梯度消失(Vanishing Gradient)

a. 定义

梯度消失问题是指在训练深层神经网络时,随着网络层数的增加,反向传播过程中早期层(靠近输入层)的梯度逐渐接近于零,导致这些层的参数几乎无法更新。这样,网络中的某些参数将无法被有效学习,模型训练停滞不前。

b. 数学解释

在神经网络中,反向传播算法用于通过链式法则(Chain Rule)计算损失函数相对于网络中每一层权重的偏导数。在深层网络中,链式法则会不断地乘以每一层的激活函数的导数。如果激活函数的导数非常小(小于 1),随着层数增加,梯度会逐层缩小。

对于每一层 l l l,反向传播的梯度计算公式为:
∂ L ∂ W [ l ] = ∂ L ∂ z [ l ] ⋅ ∂ z [ l ] ∂ W [ l ] \frac{\partial \mathcal{L}}{\partial W^{[l]}} = \frac{\partial \mathcal{L}}{\partial z^{[l]}} \cdot \frac{\partial z^{[l]}}{\partial W^{[l]}} W[l]L=z[l]LW[l]z[l]

如果层数很多,那么 ∂ L ∂ z [ l ] \frac{\partial \mathcal{L}}{\partial z^{[l]}} z[l]L 中的每一项都会涉及前一层的梯度,最终导致梯度的乘积在反向传播过程中逐渐变小。这样在靠近输入层时,梯度几乎为 0,参数更新幅度极小,导致网络的训练效率大大降低,甚至无法训练。

c. 常见原因

  1. 激活函数问题:某些常用的激活函数(如 Sigmoid 和 Tanh)在输入值较大或较小时,它们的导数趋近于零,导致梯度在反向传播过程中缩小。例如:

    • 对于 Sigmoid 函数:
      Sigmoid ( z ) = 1 1 + e − z \text{Sigmoid}(z) = \frac{1}{1 + e^{-z}} Sigmoid(z)=1+ez1
      其导数:
      d d z Sigmoid ( z ) = Sigmoid ( z ) ⋅ ( 1 − Sigmoid ( z ) ) \frac{d}{dz} \text{Sigmoid}(z) = \text{Sigmoid}(z) \cdot (1 - \text{Sigmoid}(z)) dzdSigmoid(z)=Sigmoid(z)(1Sigmoid(z))
      z z z 非常大或非常小时,导数接近 0。
  2. 深度网络结构:网络层数越深,梯度乘积的次数越多,梯度消失的风险越大。

d. 梯度消失的影响

  • 网络中的靠近输入层的权重更新非常缓慢甚至几乎不更新,导致这些层在训练中无法学习有效的表示。
  • 网络的训练效率降低,模型很难收敛,特别是在处理复杂的任务时效果不佳。

e. 解决方法

  1. 使用合适的激活函数

    • ReLU(Rectified Linear Unit):ReLU 是一种在正值区域保持线性,而在负值区域输出为零的激活函数。它的导数在正区间为 1,因此能有效缓解梯度消失问题:
      ReLU ( x ) = max ⁡ ( 0 , x ) \text{ReLU}(x) = \max(0, x) ReLU(x)=max(0,x)
      它的导数为:
      d d x ReLU ( x ) = { 1 if  x > 0 0 if  x ≤ 0 \frac{d}{dx} \text{ReLU}(x) = \begin{cases} 1 & \text{if } x > 0 \\ 0 & \text{if } x \leq 0 \end{cases} dxdReLU(x)={10if x>0if x0
    • 其他变种激活函数(如 Leaky ReLUELU)也能有效缓解梯度消失问题。
  2. 使用残差网络(ResNet)

    • 残差网络(ResNet) 通过引入跳跃连接(Skip Connections),允许梯度在反向传播过程中绕过一些层,缓解了梯度消失问题。
  3. 批归一化(Batch Normalization)

    • Batch Normalization 通过在每一层归一化激活值,使得输出的分布更加稳定,从而减少了梯度消失的发生。

2. 梯度爆炸(Exploding Gradient)

a. 定义

梯度爆炸是指在训练深层神经网络时,反向传播过程中梯度变得非常大,导致参数更新的幅度过大,最终导致模型的权重值溢出,损失函数出现异常情况(如 NaN),模型无法收敛。

b. 数学解释

梯度爆炸的问题与梯度消失相反。如果反向传播过程中每一层的梯度都大于 1,那么在链式法则的作用下,梯度会不断累积放大,最终导致前几层的梯度值过大,导致参数更新幅度过大,甚至可能使权重变得非常大。

在深层网络中,每层梯度的乘积计算公式为:
∂ L ∂ W [ l ] = ∂ L ∂ z [ l ] ⋅ ∂ z [ l ] ∂ W [ l ] \frac{\partial \mathcal{L}}{\partial W^{[l]}} = \frac{\partial \mathcal{L}}{\partial z^{[l]}} \cdot \frac{\partial z^{[l]}}{\partial W^{[l]}} W[l]L=z[l]LW[l]z[l]

如果梯度 ∂ L ∂ z [ l ] \frac{\partial \mathcal{L}}{\partial z^{[l]}} z[l]L 的值非常大,那么靠近输入层的梯度将迅速增长,导致梯度爆炸。

c. 常见原因

  1. 权重初始化不当:如果网络的权重初始化得过大,那么在反向传播中,梯度的值可能会不断放大,导致梯度爆炸。

  2. 学习率过大:如果学习率设置过高,那么每次梯度更新的步长就会过大,导致权重迅速变大,引发梯度爆炸。

  3. 深度网络结构:在非常深的网络中,累积的梯度可能会迅速增大,导致前几层梯度的指数式增长。

d. 梯度爆炸的影响

  • 梯度过大导致网络的权重更新幅度过大,网络的训练变得不稳定,甚至导致权重值溢出
  • 损失函数可能出现 NaN(非数值),训练中止或模型无法收敛。

e. 解决方法

  1. 梯度裁剪(Gradient Clipping)

    • 梯度裁剪 是一种常用的方法,在每次反向传播时,如果梯度的值超过了某个阈值,就将其裁剪到该阈值范围内,防止梯度过大。这样可以有效避免梯度爆炸。
  2. 权重初始化

    • 使用适当的权重初始化方法可以避免梯度爆炸。常见的初始化方法包括:
      • Xavier 初始化:适用于 Sigmoid 和 Tanh 激活函数,保持权重的方差在每一层中保持平衡。
      • He 初始化:适用于 ReLU 激活函数,它通过缩小初始权重范围减少梯度爆炸的可能性。
  3. 降低学习率

    • 如果学习率过高,可以适当调低学习率,使梯度更新时的步长减小,减少爆炸的可能性。
  4. 使用批归一化(Batch Normalization)

    • 批归一化 也可以缓解梯度爆炸。它在每一层对激活值进行标准化,防止输出值过大,从而限制了梯度的增大。

相关文章:

【AI知识点】梯度消失(Vanishing Gradient)和梯度爆炸(Exploding Gradient)

梯度消失(Vanishing Gradient) 和梯度爆炸(Exploding Gradient) 是神经网络训练中的常见问题,特别是在深层神经网络(DNN)或递归神经网络(RNN)中。这两者主要与反向传播算…...

在 ArkTS 网络请求中,重新封装一下 http 模块

在ArkTS中,重新封装http模块可以提供一个更简洁、更易于使用的API,同时隐藏底层细节,使开发者能够更专注于业务逻辑。以下是一个简单的示例,展示了如何重新封装鸿蒙系统的kit.NetworkKit中的http模块: // 创建一个新的…...

Microsoft 更新 Copilot AI,未來將能使用語音並看到你瀏覽的網頁

不過受到 Recall 事件的影響,更新的推出將更緩慢謹慎。 Microsoft 也同步對其網頁版及行動版的 Copilot AI 進行大改版。這主要是為網頁版換上了一個較為簡單乾淨的介面,並增加了一些新的功能,像是 Copilot Voice 能讓你與 AI 助手進行對話式…...

系统架构设计师-论文题(2021年下半年)

1.试题一 论面向方面的编程技术及其应用针对应用开发所面临的规模不断扩大、复杂度不断提升的问题,面向方面的编程Aspect Oriented Programming,AOP技术提供了一种有效的程序开发方法。为了理解和完成一个复杂的程序,通常要把程序进行功能划分和封装。一…...

selenium的webdriver常用方法和属性介绍(2)

selenium的webdriver介绍 从selenium导入webdriver模块,在pycharm中跳转webdriver模块的__init__.py文件,内容如图所示:从selenium包的子目录中导入了很多模块并做了重命名,用于支持如下 Chrome/Edge/Ie/Firefox/Safari浏览器。 使…...

73.【C语言】C/C++的内存区域划分

目录 1.内存里的几个区域 2.示意图 3.解释 1.内存里的几个区域 除了耳熟能详的栈区,堆区,静态区,还有内核空间,内存映射段,数据段,代码段 2.示意图 3.解释 栈区(stack area):局部变量,函数参数,返回数据,返回地址 内存映射段:将文件映射到内存 映射的含义: 如果看过李忠…...

k8s 中存储之 hostPath 卷

目录 1 hostPath 卷介绍 2 hostPath 卷实际应用操作 2.1 创建 pod 资源类型 2.2 修改清单文件增加 hostPath 对应的参数配置 2.3 查看是否创建 卷 和 pod 2.4 创建发布文件测试是否正常访问 1 hostPath 卷介绍 EmptyDir中数据不会被持久化,它会随着Pod的结束而销…...

Cherno游戏引擎笔记(73~90)

------- scene viewport ---------- 》》》》做了两件事:设置视口和设置相机比例 》》》》为什么要设置 m_ViewportSize 为 glm::vec2 而不是 ImVec2 ? 因为后面需要进行 ! 运算,而 ImVec2 没有这个运算符的定义,只有 glm::vec2 有这个运算…...

helm 测试卸载或删除(redis)

作者:程序那点事儿 日期:2024/02/07 18:30 查看redis 集群实例 kubectl get all -n redis 卸载集群实例 helm uninstall redis -n redis 删除pvc kubectl get pvc -n redis kubectl delete pvc redis-data-redis-master-0 redis-data-redis-replicas…...

关于Qt音乐播放器进度条拖拽无用的问题解决方案

在使用Qt编写音乐播放器的时候,进度条关联播放音乐基本是必须的。那么在设计的过程中你可能会碰到一个奇怪的问题就是拖拽进度条的时候,可能会报错如下: 然后音乐就卡着不动了。。。 connect(ui->volume_toolButton,&VolumeToolBtn::…...

Redis:初识Redis

Redis:初识Redis Redis 介绍分布式架构Redis特性安装Redis Redis 介绍 在官网中,是如下介绍Redis的: in-memory data store used by millions of developers as a cache, vector database, document database, streaming engine, and messag…...

【React】增量传输与渲染

增量传输 增量传输是一种高效的文件传输方式,其核心原理在于只传输文件中发生变化的部分,而不是整个文件。以下是增量传输的详细解析: 定义与原理: 增量传输通过比对原始文件和目标文件,找出两者之间的差异部分&#…...

【回眸】Tessy 单元测试软件使用指南(四)常见报错及解决方案与批量初始化的经验

前言 分析时Tessy的报错 1.fatal error: Tricore/Compilers/Compilers.h: No such file or directory 2.error: #error "Compiler unsupported" 3.warning: invalid suffix on literal;C11 requires a space between literal and string macro 4.error: unknown…...

2024 - 10 :生物药学: 如何获取对应核心靶点基因的激酶

如何获取对应核心靶点基因的激酶 步骤 1:收集蛋白质信息 获取 UniProt ID: 对于每个基因,使用 UniProt 数据库获取其对应的蛋白质信息,包括 UniProt ID、序列和功能注释。UniProt 网站:https://www.uniprot.org/ 示…...

STM32 HAL库UART查询方式实例

本文中介绍USART编程涵盖了三种主要方法,详细介绍STM32F407微控制器结合HAL库,通过UART的查询方式来实现一个实用的密码验证程序。提示用户键入一个字符作为密码。只有当用户精准地输入字符6时,系统才会反馈“密码正确”的确认信息。反之&…...

数据结构--线性表双向链表的实现

目录 思路设计 总体思维导图 插入部分 头插法尾插法 任意位置插入 删除部分 头结点 尾节点 中间节点 只有头结点且删除的就是头结点 ​编辑 清空链表部分 遍历清空链表的所有节点 不遍历清空 各部分代码 Main部分 MyListedList部分 IndexOutOfException部分 …...

第一个Flutter应用(一)

1、创建项目 1.1 新建 1.2 选择Flutter SDK的位置 1.3 项目名称 英文单词加下划线起名规范,其他默认即可。 1.4 点击运行 发生报错显示我们的JAVA版本不符合 1.5 更改版本设置 1.6 再次启动项目 2、分析页面代码 以下是lib/main.dart的源代码(为了阅…...

批量查询快递单号物流信息:高效掌握最后更新动态

在电商和物流行业蓬勃发展的今天,快递单号的物流信息追踪显得尤为重要。对于商家和客户来说,了解包裹的最后更新物流状态是确保货物安全、及时送达的关键。本文将介绍如何批量查询快递单号的物流信息,帮助您高效掌握每个包裹的最新动态。 1运…...

随着硬件水平的提升,LabVIEW有哪些过去的编程方法被淘汰掉了

随着硬件水平的不断提升,尤其是处理器性能、存储能力、通信速度等方面的飞跃,LabVIEW的一些早期编程方法逐渐被更高效、现代的编程技术所取代。以下是一些随着硬件升级而逐步淘汰的LabVIEW编程方法和技术: 1. 低效的数据流传输方式 过去由于…...

Leetcode 206.反转链表

题目链接:206. 反转链表 - 力扣(LeetCode) 题目描述: 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1] 解题思路…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)

目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 &#xff08;1&#xff09;输入单引号 &#xff08;2&#xff09;万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...

Python训练营-Day26-函数专题1:函数定义与参数

题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一个名为 calculate_circle_area 的函数&#xff0c;该函数接收圆的半径 radius 作为参数&#xff0c;并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求&#xff1a;函数接收一个位置参数 radi…...