【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)

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

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

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

相关文章

【CSS in Depth 2 精译_045】7.1 CSS 响应式设计中的移动端优先设计原则(上)

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一章 层叠、优先级与继承(已完结) 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位(已完结) 2.1 相对…

分布式锁--redission 最佳实践!

我们知道如果我们的项目服务不只是一个实例的时候,单体锁就不再适用,而我们自己去用redis实现分布式锁的话,会有比如锁误删、超时释放、锁的重入、失败重试、Redis主从一致性等等一系列的问题需要自己解决。 当然,上述问题并非无…

刷题 二叉树

二叉树的核心思想 - 递归 - 将问题分解为子问题 题型 递归遍历迭代遍历层序遍历 bfs:队列各种递归题目:将问题分解为子问题二叉搜索树 - 中序遍历是递增序列 TreeNode* &prev 指针树形dp 面试经典 150 题 - 二叉树 104. 二叉树的最大深度 广度优…

DDD简介

概述 传统的数据驱动开发模式,View、Service、Dao这种三层分层模式,会很自然的写出过程式代码,这种开发方式中的对象只是数据载体,而没有行为,是一种贫血对象模型。以数据为中心,以数据库ER图为设计驱动&a…

JavaSE - 基础语法

01 背景知识补充 ① Java统治了后台服务器的开发,比如京东,淘宝网站的后台服务器就是使用的Java进行开发的 ② Java之父:詹姆斯高斯林 ③ Java由sun公司研发,现在属于Oracle公司 02 注释 ① Java的注释有三种:单行…

快速启动工具 | Biniware Run v7.1.0.0 绿色中文版

Biniware Run是一款便携式的Windows生产力工具,旨在为用户提供快速访问其喜爱的网站地址、文件和文件夹的便捷方式。这款软件的特点在于其易用性和高度可定制性。用户可以通过简单的拖放操作,将网址、文件或文件夹添加到软件中,从而快速访问。…

网络层协议 --- IP

序言 在这篇文章中我们将介绍 IP协议,经过这篇文章的学习,我们就会了解运营商到底是如何为我们提供服务的以及平时我们所说的内网,公网到底又是什么,区别是什么? IP 地址的基本概念 1. IP 地址的定义 每一个设备接入…

【进阶OpenCV】 (4)--图像拼接

文章目录 图像拼接1. 读取图片2. 计算图片特征点及描述符3. 建立暴力匹配器4. 特征匹配5. 透视变换6. 图像拼接 总结 图像拼接 图像拼接是一项将多张有重叠部分的图像(这些图像可能是不同时间、不同视角或者不同传感器获得的)拼成一幅无缝的全景图或高分…

AI学习记录 - L2正则化详细解释(权重衰减)

大白话: 在反向传播时,加入额外的损失值,让总损失值变得比原来更大,并且加入的损失值要关联到神经网络全部权重的大小,当出现权重的平方变大的时候,也就是网络权重往更加负或者更加正的方向走的时候&#…

【答疑解惑】图文深入详解undo和redo的区别及其底层逻辑

题记:最近有些人问我,undo和redo到底是什么关系,他们中不乏已经入行3-4年的同学,今天咱们就来深入探讨下到底什么是undo和redo,他们分别做什么,底层逻辑原理是什么等等。 1. undo 1.1 undo的存储结构 Un…

叶国富“推翻”马云新零售,零售新王此刻登基?

63亿入主永辉超市,拿到29.4%股份,坐上永辉超市第一大股东的宝座,名创优品创始人叶国富,成为了新科“零售之王”。 很是霸气外漏。 有投资者表示费解,不明白为何此时入局超市行业,叶国富当即召开电话会议&…

Selenium自动化测试的显示等待

在进行UI自动化测试的时候,我们为了保持用例的稳定性,往往要设置显示等待,显示等待就是说明确的要等到某个元素的出现或者元素的某些条件出现,比如可点击、可见等条件,如果在规定的时间之内都没有找到,那么…

我们如何构建 ClickHouse 内部的数据仓库:一年回顾的思考 【Part2】

本文字数:4105;估计阅读时间:11 分钟 作者:Mihir Gokhale 本文在公众号【ClickHouseInc】首发 一年前,我的同事 Dmitry Pavlov 介绍了我们如何在 ClickHouse Cloud 上构建了公司内部的数据仓库,简称 “DWH”…

外贸财务管理必备,6款热门软件优势对比

外贸企业的财务管理面临着多币种结算、汇率波动、跨境支付等复杂问题。本文将盘点Zoho Books、KashFlow、Sage Intacct等六款热门的外贸财务软件,并探讨它们各自的优势与特点,以帮助外贸企业做出明智的选择。 一、Zoho Books Zoho Books是一款面向中小企…

RNN(循环神经网络)简介及应用

一、引言 在深度学习领域,神经网络被广泛应用于各种任务,从图像识别到语音合成。但对于序列数据处理的任务,如自然语言处理(NLP)、语音识别或时间序列预测等,传统的前馈神经网络(Feedforward N…

docker compose入门5—创建一个3副本的应用

1. 定义服务 version: 3.8 services:web:image: gindemo:v2deploy:replicas: 3ports:- "9090" 2. 启动服务 docker compose -f docker-compose.yml up -d 3. 查看服务 docker compose ps 4. 访问服务

如何使用jmeter进行压测

简介: 1.概述 一款工具,功能往往是很多的,细枝末节的地方也很多,实际的测试工作中,绝大多数场景会用到的也就是一些核心功能,根本不需要我们事无巨细的去掌握工具的所有功能。所以本文将用带价最小的方式讲…

相亲交友系统源码开发:构建高效互动平台的技术探索

在数字化时代,相亲交友系统已成为人们寻找伴侣、拓展社交圈的重要方式之一。这类平台不仅促进了人与人之间的连接,还通过算法匹配、兴趣筛选等功能,提高了用户找到合适伴侣的效率。本文将从技术角度出发,探讨相亲交友系统源码开发…

[paddle]paddleseg快速开始

快速开始 为了让大家快速了解PaddleSeg,本文档使用一个简单示例进行演示。在实际业务中,建议大家根据实际情况进行调整适配。 在开始下面示例之前,请大家确保已经安装好PaddleSeg开发环境(安装说明)。 1 准备数据 …

Java->优先级队列(堆)

一、优先级队列 1.概念 数据结构应该提供两个最基本的操作,一个是返回最高优先级对象,一个是添加新的对象。这种数 据结构就是优先级队列(Priority Queue)。 2.堆的概念 把它的所有元素按完全二叉树的顺序存储方式存储 在一个一维数组中 3.堆的性质 …