发生梯度消失, 梯度爆炸问题的原因,怎么解决?

目录

 一、梯度消失的原因

二、梯度爆炸的原因

三、共同的结构性原因

四、解决办法

五、补充知识


一、梯度消失的原因

梯度消失指的是在反向传播过程中,梯度随着层数的增加指数级减小(趋近于0),导致浅层网络的权重几乎无法更新。

1. 激活函数造成的梯度收缩

比如 sigmoid、tanh 函数在输入过大或过小时,梯度趋近于 0,导致反向传播过程中梯度逐层缩小。例如:Sigmoid的导数 σ′(x)=σ(x)(1−σ(x)),当 σ(x)接近0或1时,导数趋近于0。

2. 权重初始化不当

如果权重初始化得过小,前向传播时值越来越小,反向传播梯度也越来越小。

3. 网络过深与链式法则的连乘效应

深层网络中梯度在多层链式求导中不断乘以小于1的数,最终导致梯度接近 0。
反向传播时,梯度是各层导数的连乘积

若每层导数均小于1,多层叠加后梯度会指数级缩小。

二、梯度爆炸的原因

梯度爆炸是指梯度在反向传播过程中指数级增大(趋向无穷大),导致参数更新步长过大,模型无法收敛。

1. 激活函数或权重造成的梯度放大

比如 relu 在某些输入下导数为1,但如果权重过大,前向传播输出和反向传播梯度都可能爆炸。

2. 网络结构太深

多层反向传播中梯度不断相乘,可能快速增长到很大。

3. 学习率过大

会导致更新步长过大,参数急剧变化,引发梯度爆炸。

三、共同的结构性原因

  • 深层网络或长依赖路径
    无论是梯度消失还是爆炸,本质都是因为深层网络的梯度需要通过多层反向传播,链式法则的连乘效应被放大。

  • 权重矩阵的共享(如RNN)
    RNN中同一权重矩阵在时间步间共享,梯度爆炸/消失问题更显著。

四、解决办法

针对梯度消失:

  1. 使用非饱和激活函数(如ReLU、Leaky ReLU)。

  2. 残差连接(ResNet中的Skip Connection)打破链式法则的连乘。

  3. 批归一化(BatchNorm)稳定梯度分布。

  4. 合理的权重初始化(如He初始化)。

针对梯度爆炸:

  1. 梯度裁剪(Gradient Clipping)。

  2. 权重正则化(L2正则化)。

  3. 使用LSTM/GRU(通过门控机制缓解RNN中的梯度问题)。

通用策略:

  • 调整网络深度或使用分阶段训练。

  • 监控梯度范数(如 torch.nn.utils.clip_grad_norm_)。

五、补充知识

非饱和激活函数和饱和激活函数有什么区别?


✅ 1、定义对比

类型

定义

特点

代表函数

饱和激活函数

当输入很大或很小时,函数的导数(梯度)接近于 0

输出趋于一个上限/下限,梯度变小

Sigmoid、Tanh

非饱和激活函数

输入变大时,导数不会趋近于 0(或只有一边趋近于0)

不容易造成梯度消失

ReLU、Leaky ReLU、ELU、Swish


🧪 2、具体例子对比

🔻 饱和激活函数

(1) Sigmoid:

\sigma(x) = \frac{1}{1 + e^{-x}}

• 导数为:\sigma{\prime}(x) = \sigma(x)(1 - \sigma(x))

• 当 x \to \pm\infty时,\sigma{\prime}(x) \to 0

• 结果:反向传播中梯度会越来越小 → 梯度消失

(2) Tanh:

\tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}

• 输出范围在 [-1, 1]

• 同样导数趋近于 0,容易梯度消失


🔺 非饱和激活函数

(1) ReLU(Rectified Linear Unit):

f(x) = \max(0, x)

• x > 0 时导数为 1,不会梯度消失

• 缺点:x < 0 导数为 0,可能导致“神经元死亡”

(2) Leaky ReLU:

f(x) = \begin{cases} x & x > 0 \\ \alpha x & x \leq 0 \end{cases}

• 小于0时也有梯度(通常\alpha=0.01

(3) Swish、ELU 等:

• 既平滑又非饱和,近年很多模型喜欢用 Swish 或 GELU(尤其是 Transformer)。


🎯 三、实战中如何选?

场景

推荐激活函数

传统全连接网络(不太深)

Tanh / Sigmoid 勉强可用

卷积神经网络 CNN

ReLU / Leaky ReLU / ELU

Transformer 等深层模型

GELU / Swish

生成式模型(例如 VAE、Flow)

ELU / LeakyReLU / Tanh(输出层)


🧠 一句话总结:

饱和函数容易梯度消失,不适合深层网络; 非饱和函数传播更稳定,是现代深度网络的标配。

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

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

相关文章

【USRP】srsRAN 开源 4G 软件无线电套件

srsRAN 是SRS开发的开源 4G 软件无线电套件。 srsRAN套件包括&#xff1a; srsUE - 具有原型 5G 功能的全栈 SDR 4G UE 应用程序srsENB - 全栈 SDR 4G eNodeB 应用程序srsEPC——具有 MME、HSS 和 S/P-GW 的轻量级 4G 核心网络实现 安装系统 Ubuntu 20.04 USRP B210 sudo …

ChatGPT 4:解锁AI文案、绘画与视频创作新纪元

文章目录 一、ChatGPT 4的技术革新二、AI文案创作&#xff1a;精准生成与个性化定制三、AI绘画艺术&#xff1a;从文字到图像的神奇转化四、AI视频制作&#xff1a;自动化剪辑与创意实现五、知识库与ChatGPT 4的深度融合六、全新的变革和机遇《ChatGPT 4 应用详解&#xff1a;A…

在js中数组相关用法讲解

数组 uniqueArray 简单数组去重 /*** 简单数组去重* param arr* returns*/ export const uniqueArray <T>(arr: T[]) > [...new Set(arr)];const arr1 [1,1,1,1 2, 3];uniqueArray(arr); // [1,2,3]uniqueArrayByKey 根据 key 数组去重 /*** 根据key数组去重* …

RT-Thread ulog 日志组件深度分析

一、ulog 组件核心功能解析 轻量化与实时性 • 资源占用&#xff1a;ulog 核心代码仅需 ROM<1KB&#xff0c;RAM<0.2KB&#xff0c;支持在资源受限的MCU&#xff08;如STM32F103&#xff09;中运行。 • 异步/同步模式&#xff1a;默认采用异步环形缓冲区&#xff08;rt_…

T113s3远程部署Qt应用(dropbear)

T113-S3 是一款先进的应用处理器&#xff0c;专为汽车和工业控制市场而设计。 它集成了双核CortexTM-A7 CPU和单核HiFi4 DSP&#xff0c;提供高效的计算能力。 T113-S3 支持 H.265、H.264、MPEG-1/2/4、JPEG、VC1 等全格式解码。 独立的硬件编码器可以编码为 JPEG 或 MJPEG。 集…

12.青龙面板自动化我的生活

安装 docker方式 docker run -dit \ -v /root/ql:/ql/data \ -p 5700:5700 \ -e ENABLE_HANGUPtrue \ -e ENABLE_WEB_PANELtrue \ --name qinglong \ --hostname qinglong \ --restart always \ whyour/qinglongk8s方式 https://truecharts.org/charts/stable/qinglong/ he…

Maven 远程仓库推送方法

步骤 1&#xff1a;配置 pom.xml 中的远程仓库地址 在项目的 pom.xml 文件中添加 distributionManagement 配置&#xff0c;指定远程仓库的 URL。 xml 复制 <project>...<distributionManagement><!-- 快照版本仓库 --><snapshotRepository><id…

Spring Boot 日志 配置 SLF4J 和 Logback

文章目录 一、前言二、案例一&#xff1a;初识日志三、案例二&#xff1a;使用Lombok输出日志四、案例三&#xff1a;配置Logback 一、前言 在开发 Java 应用时&#xff0c;日志记录是不可或缺的一部分。日志可以记录应用的运行状态、错误信息和调试信息&#xff0c;帮助开发者…

JS API 事件监听

焦点事件案例&#xff1a;搜索框激活下拉菜单 事件对象 事件对象存储事件触发时的相关信息 可以判断用户按键&#xff0c;点击元素等内容 如何获取 事件绑定的回调函数中的第一个形参就是事件对象 一般命名为e,event 事件对象常用属性 type类型 click mouseenter client…

DDD与MVC扩展能力对比

一、架构设计理念的差异二、扩展性差异的具体表现三、DDD扩展性优势的深层原因四、MVC扩展性不足的典型场景五、总结&#xff1a;架构的本质与选择六、例子1&#xff09;场景描述2&#xff09;MVC实现示例&#xff08;三层架构&#xff09;3&#xff09;DDD实现示例&#xff08…

针对 SQL 查询中 IN 子句性能优化 以及 等值 JOIN 和不等值 JOIN 对比 的详细解决方案、代码示例及表格总结

以下是针对 SQL 查询中 IN 子句性能优化 以及 等值 JOIN 和不等值 JOIN 对比 的详细解决方案、代码示例及表格总结&#xff1a; 问题 1&#xff1a;IN 的候选值过多&#xff08;如超过 1000 个&#xff09; 问题描述 当 IN 列表中的值过多时&#xff0c;SQL 会逐个比较每个值…

手部穴位检测技术:基于OpenCV和MediaPipe的实现

手部穴位检测是医学和健康管理领域的重要技术之一。通过准确识别手部的关键穴位,可以为中医诊断、康复治疗以及健康监测提供支持。本文将介绍一种基于OpenCV和MediaPipe的手部穴位检测方法,展示如何利用计算机视觉技术实现手部关键点的检测,并进一步标注手部的穴位位置。 技…

Day20 -自动化信息收集工具--ARL灯塔的部署

准备&#xff1a; 纯净的Docker环境 ARL的包 一、Docker的部署 00x1 更新系统包 sudo apt update 00x2 安装必要的依赖包 sudo apt install -y apt-transport-https ca-certificates curl software-properties-common 00x3 下载docker和docker-compose apt-get install do…

sqlalchemy查询json

第一种&#xff1a;字段op是json格式&#xff1a; {"uid": "cxb123456789","role": 2,"op_start_time": 1743513707504,"op_end_time": 1743513707504,"op_start_id": "op_001","op_end_id"…

搭建K8S-1.23

0、简介 这里只用3台服务器来做一个简单的集群 地址主机名192.168.160.40kuber-master-1192.168.160.41kuber-master-2192.168.160.42kuber-node-1 1、关闭三个服务 &#xff08;1&#xff09;防火墙 systemctl stop firewalld &#xff08;2&#xff09;Selinux setenf…

初阶数据结构--树

1. 树的概念与结构 树是⼀种⾮线性的数据结构&#xff0c;它是由 n&#xff08;n>0&#xff09; 个有限结点组成⼀个具有层次关系的集合。把它叫做 树是因为它看起来像⼀棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;⽽叶朝下的。 有⼀个特殊的结点&#xff0c;称…

硬件工程师面试问题(五):蓝牙面试问题与详解

蓝牙技术作为物联网与智能设备的核心无线协议&#xff0c;其硬件设计能力直接影响产品连接稳定性、功耗及兼容性。面试是评估候选人射频电路设计、天线优化、协议栈调试等综合技能的关键环节&#xff0c;尤其在BLE低功耗设计、共存抗干扰等场景中&#xff0c;硬件工程师的实践经…

Redis-基本数据类型

Redis支持的基本数据类型&#xff1a;String、hash、list、Set、Zset 一、String 特点 可以存储三种类型 int、float、string 运用场景 缓存&#xff1a;存储HTML片段、用户会话&#xff08;Session&#xff09;计数器&#xff1a;网站访问量、点赞数&#xff08;incr方法&am…

Tomcat的部署

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器&#xff0c;属于轻量级应用服务器&#xff0c;在中小型系统和 并发访问用户不是很多的场合下被普遍使用&#xff0c;Tomcat 具有处理HTML页面的功能&#xff0c;它还是一个Servlet和 JSP容器 官网:Apache Tomcat - Welco…

Linux的TCP连接数到达2万,其中tcp_tw、tcp_alloc、tcp_inuse都很高,可能出现什么问题

当 Linux 系统的 TCP 连接数达到 2 万,且 /proc/net/sockstat 中的 tcp_tw(TIME_WAIT 连接)、tcp_alloc(已分配但未完全建立的连接)和 tcp_inuse(正在使用的连接)均处于高位时,可能会引发以下问题: 一、关键指标分析 通过 /proc/net/sockstat 可以查看 TCP 连接状态:…