深度学习查漏补缺:1.梯度消失、梯度爆炸和残差块

一、梯度消失

梯度消失的根本原因在于 激活函数的性质和链式法则的计算

  1. 激活函数的导数很小

    • 常见的激活函数(例如 Sigmoid 和 Tanh)在输入较大或较小时,输出趋于饱和(Sigmoid 的输出趋于 0 或 1),其导数接近于 0。
    • 在反向传播中,每一层的梯度都会乘以激活函数的导数。如果导数很小,乘积就会导致梯度逐渐变小。
  2. 链式法则的多次相乘

    假设网络有 nn 层,梯度从输出层传到第 ii 层时,会经历多次链式相乘:
    • \frac{\partial L}{\partial w_i} = \frac{\partial L}{\partial x_n} \cdot \frac{\partial x_n}{\partial x_{n-1}} \cdot \frac{\partial x_{n-1}}{\partial x_{n-2}} \cdots \frac{\partial x_{i+1}}{\partial x_i}

      如果每一项的导数都小于 1(例如 0.5),那么多次相乘后梯度将变得非常小,接近于 0。
  3. 深层网络的结构

    层数越多,梯度消失的积累效应越明显,导致靠近输入层的权重几乎无法更新。

1.4 梯度消失带来的问题
  • 网络无法有效学习:靠近输入层的权重无法更新,网络的学习能力只集中在靠近输出层的部分,导致模型性能受限。
  • 训练时间增加:梯度很小,优化器调整参数的速度变慢,训练需要更多的时间。

二、梯度爆炸

1 梯度爆炸的现象

        与梯度消失相反,当网络层数较深时,梯度在反向传播过程中可能会逐渐变大,甚至变得非常大。这种现象被称为梯度爆炸

        由于梯度过大,模型的参数更新幅度也会非常大,可能导致:

  • 参数出现巨大波动,训练过程不稳定;
  • 损失值(Loss)变得非常大,甚至出现 NaN
  • 模型无法收敛,最终无法学习任何规律。

2 为什么会发生梯度爆炸?

梯度爆炸的原因与梯度消失类似,主要是由于链式法则的多次相乘,但此时乘积中的值大于 1:

  1. 权重初始化不当

    • 如果网络的初始权重过大,在反向传播时,梯度的值也会变得很大。
    • 例如,如果每层的权重初始化为 5,经过 10 层的链式积累,梯度可能会变成 5^{10} = 9,765,625
  2. 激活函数的导数较大

    • 如果激活函数的导数值很大,梯度在多次相乘后会迅速变大。
  3. 深层网络的结构

    • 网络层数越多,链式法则的积累效应越明显,导致梯度爆炸的概率增大。

3 梯度爆炸带来的问题
  • 训练不稳定:梯度过大,导致参数更新过快,训练过程可能无法收敛。
  • 损失发散:梯度爆炸会导致损失值发散,模型无法学习有效特征。

三、残差块

        残差块(Residual Block)是深度学习中 ResNet(Residual Network) 网络的核心组件,它最早由微软研究院的何凯明(Kaiming He)等人在 2015 年提出。残差块通过引入跳跃连接(skip connection),解决了深层神经网络训练中的梯度消失、梯度爆炸和退化问题,使得网络能够训练得更深、性能更好。

为什么需要残差块?

在深层神经网络中,随着网络深度的增加(层数增多),存在以下问题:

  1. 梯度消失(Vanishing Gradient):反向传播时,梯度在逐层传递过程中可能逐渐变小,从而无法有效更新靠近输入层的权重。
  2. 梯度爆炸(Exploding Gradient):反之,梯度可能会在逐层传递过程中变得过大,导致模型训练不稳定。
  3. 退化问题(Degradation Problem):当网络层数增加时,模型的训练误差反而会变大,甚至性能比浅层网络更差。

这些问题的根本原因在于,随着层数增加,网络在拟合复杂非线性变换时可能会难以优化。残差块通过引入跳跃连接,允许网络直接学习相对较小的残差(Residual),从而降低优化难度。


残差块的结构

一个标准的残差块具有以下结构:

  1. 主路径(Main Path):通过若干个卷积、批归一化(Batch Normalization)、激活函数(如 ReLU)组成,是网络的主要信息传递路径。
  2. 跳跃连接(Skip Connection):从输入直接添加到输出,为网络提供了一条“捷径”。

输出形式为:

y=F(x)+x

其中:

  • x:残差块的输入。
  • F(x):主路径中卷积、激活等操作的输出。
  • y:残差块的最终输出。

通过直接将输入 x 加到输出 F(x) 上,残差块能够显式学习 F(x)=H(x)−x,即学习输入与目标值之间的残差。如果 H(x) 是目标映射函数,那么 F(x)F(x) 是残差函数。

1. 一般形式的残差块

以两个卷积层为例,残差块的结构如下:

  • 输入:x
    1. 第一层卷积(Conv1d/Conv2d),带激活函数(如 ReLU)。
    2. 第二层卷积(Conv1d/Conv2d)。
    3. 跳跃连接:直接将 xx 与经过两层卷积后的结果相加。
    4. 激活函数(如 ReLU)。

数学表达式为:

y=ReLU(F(x)+x)

2. 带维度变换的残差块

如果输入和输出的特征维度不同(例如通道数或空间维度变化),需要使用额外的线性变换对输入 x 进行升维或降维(Projection Shortcut),使得尺寸匹配。

y=F(x)+Ws x

其中 Ws是一个线性变换(通常是 1×1 卷积)。


直观解释残差块的作用

1. 更容易优化深层网络

        通过学习残差 F(x)=H(x)−x,残差块将复杂的非线性映射 H(x)转换为一个简单的优化问题。即使网络层数增加,残差块可以将输入直接传递到更深层,减轻梯度消失的影响。

2. 提供信息的捷径

        跳跃连接允许信息直接从输入传递到输出,让网络更容易捕捉重要的特征,同时保留原始特征。

3. 防止退化问题

        在普通深层网络中,增加更多的层可能会导致模型性能退化,反而不如浅层网络。残差块通过添加跳跃连接,可以显式地学习哪些层需要参与计算,哪些层可以跳过,从而有效防止退化。

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

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

相关文章

【数据采集】案例02:基于Selenium采集豆瓣电影Top250的详细数据

基于Selenium采集豆瓣电影Top250的详细数据 Selenium官网:https://www.selenium.dev/blog/ 豆瓣电影Top250官网:https://movie.douban.com/top250 写在前面 实验目标:基于Selenium框架采集豆瓣电影Top250的详细数据。 电脑系统:Windows 使用软件:PyCharm、Navicat 技术需求…

如何在Windows、Linux和macOS上安装Rust并完成Hello World

如何在Windows、Linux和macOS上安装Rust并完成Hello World 如果你刚刚开始学习Rust,第一步就是安装Rust并运行你的第一个程序!本文将详细介绍如何在Windows、Linux和macOS上安装Rust,并编写一个简单的“Hello, World!”程序。 1. 安装Rust …

c++可变参数详解

目录 引言 库的基本功能 va_start 宏: va_arg 宏 va_end 宏 va_copy 宏 使用 处理可变参数代码 C11可变参数模板 基本概念 sizeof... 运算符 包扩展 引言 在C编程中,处理不确定数量的参数是一个常见的需求。为了支持这种需求,C标准库提供了 &…

【自学嵌入式(8)天气时钟:天气模块开发、主函数编写】

天气时钟:天气模块开发、主函数编写 I2C协议和SPI协议I2C(Inter-Integrated Circuit)SPI(Serial Peripheral Interface) 天气模块心知天气预报使用HTTPClient类介绍主要功能常用函数注意事项 JSON介绍deserializeJson函…

SpringBoot的配置(配置文件、加载顺序、配置原理)

文章目录 SpringBoot的配置(配置文件、加载顺序、配置原理)一、引言二、配置文件1、配置文件的类型1.1、配置文件的使用 2、多环境配置 三、加载顺序四、配置原理五、使用示例1、配置文件2、配置类3、控制器 六、总结 SpringBoot的配置(配置文件、加载顺序、配置原理) 一、引言…

深度学习的应用场景及常用技术

深度学习作为机器学习的一个重要分支,在众多领域都有广泛的应用,以下是一些主要的应用场景及常用技术。 1.应用场景 1. 计算机视觉 图像分类 描述:对图像中的内容进行分类,识别出图像中物体所属的类别。例如,在安防领…

政务行业审计文件大数据高速报送解决方案

随着信息技术的快速发展,电子政务迎来了新的升级浪潮。国家相继出台了一系列信息化发展战略规划,如《国家信息化发展战略纲要》、《“十三五”国家信息化规划》等,这些政策为政务信息化工作指明了方向。 然而,在实际操作中&#x…

GMSL 明星产品之 MAX96724

上一篇文章中,我们介绍了摄像头侧 GMSL 加串器 MAX96717. 今天我们来介绍下 GMSL 解串器明星产品 MAX96724: 可将四路 GMSL™2/1 输入转换为 1 路、2 路或 4 路 MIPI D-PHY 或 C-PHY 输出。该器件支持通过符合 GMSL 通道规范的 50Ω 同轴电缆或 100Ω 屏…

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_strerror_init()函数

目录 ngx_strerror_init()函数声明 ngx_int_t 类型声明定义 intptr_t 类型 ngx_strerror_init()函数实现 NGX_HAVE_STRERRORDESC_NP ngx_strerror_init()函数声明 在 nginx.c 的开头引入了: #include <ngx_core.h> 在 ngx_core.h 中引入了 #include <ngx_er…

机器学习--概览

一、机器学习基础概念 1. 定义 机器学习&#xff08;Machine Learning, ML&#xff09;&#xff1a;通过算法让计算机从数据中自动学习规律&#xff0c;并利用学习到的模型进行预测或决策&#xff0c;而无需显式编程。 2. 与编程的区别 传统编程机器学习输入&#xff1a;规…

MySQL5.5升级到MySQL5.7

【卸载原来的MySQL】 cmd打开命令提示符窗口&#xff08;管理员身份&#xff09;net stop mysql&#xff08;先停止MySQL服务&#xff09; 3.卸载 切换到原来5.5版本的bin目录&#xff0c;输入mysqld remove卸载服务 测试mysql -V查看Mysql版本还是5.5 查看了环境变量里的…

java SSM框架 商城系统源码(含数据库脚本)

商城购物功能&#xff0c;项目代码&#xff0c;mysql脚本&#xff0c;html等静态资源在压缩包里面 注册界面 登陆界面 商城首页 文件列表 shop/.classpath , 1768 shop/.project , 1440 shop/.settings/.jsdtscope , 639 shop/.settings/org.eclipse.core.resources.prefs , …

【PyTorch】3.张量类型转换

个人主页&#xff1a;Icomi 在深度学习蓬勃发展的当下&#xff0c;PyTorch 是不可或缺的工具。它作为强大的深度学习框架&#xff0c;为构建和训练神经网络提供了高效且灵活的平台。神经网络作为人工智能的核心技术&#xff0c;能够处理复杂的数据模式。通过 PyTorch&#xff0…

Shell特殊状态变量以及常用内置变量总结

目录 1. 特殊的状态变量 1.1 $?&#xff08;上一个命令的退出状态&#xff09; 1.2 $$&#xff08;当前进程的 PID&#xff09; 1.3 $!&#xff08;后台进程的 PID&#xff09; 1.4 $_&#xff08;上一条命令的最后一个参数&#xff09; 2.常用shell内置变量 2.1 echo&…

用 HTML、CSS 和 JavaScript 实现抽奖转盘效果

顺序抽奖 前言 这段代码实现了一个简单的抽奖转盘效果。页面上有一个九宫格布局的抽奖区域&#xff0c;周围八个格子分别放置了不同的奖品名称&#xff0c;中间是一个 “开始抽奖” 的按钮。点击按钮后&#xff0c;抽奖区域的格子会快速滚动&#xff0c;颜色不断变化&#xf…

小白零基础--CPP多线程

进程 进程就是运行中的程序线程进程中的进程 1、C11 Thread线程库基础 #include <iostream> #include <thread> #include<string>void printthread(std::string msg){std::cout<<msg<<std::endl;for (int i 0; i < 1000; i){std::cout<…

deepseek的两种本地使用方式

总结来说 ollama是命令行 GPT4ALL桌面程序。 然后ollamaAnythingLLM可以达到桌面或web的两种接入方式。 一. ollama和deepseek-r1-1.5b和AnythingLLM 本文介绍一个桌面版的deepseek的本地部署过程&#xff0c;其中ollama可以部署在远程。 1. https://www.cnblogs.com/janeysj/p…

DDD 和 TDD

领域驱动设计&#xff08;DDD&#xff09; DDD 是一种软件开发方法&#xff0c;强调通过与领域专家的密切合作来构建一个反映业务逻辑的模型。其核心思想是将业务逻辑和技术实现紧密结合&#xff0c;以便更好地解决复杂的业务问题。 DDD 的关键概念&#xff1a; 1. 领域模型 …

修复fstab文件引起的系统故障

进入系统救援模式&#xff0c;修复故障 通过光盘启动系统&#xff0c;进入救援模式 点击虚拟机....>电源....>打开电源时进入固件进入BIOS程序 按号把光盘调到最前面&#xff08;优先使用光盘启动&#xff09; 按F10保存退出 重启选择最后一个进行排错 选择第二项 救援c…

深入核心:一步步手撕Tomcat搭建自己的Web服务器

介绍&#xff1a; servlet&#xff1a;处理 http 请求 tomcat&#xff1a;服务器 Servlet servlet 接口&#xff1a; 定义 Servlet 声明周期初始化&#xff1a;init服务&#xff1a;service销毁&#xff1a;destory 继承链&#xff1a; Tomcat Tomcat 和 servlet 原理&#x…