Sigmoid引发的梯度消失爆炸及ReLU引起的神经元参数失效问题思考

请添加图片描述

Sigmoid和ReLU激活函数思考)

  • 引文
  • Sigmoid函数
      • 梯度消失问题
      • 梯度爆炸问题
      • 解决方案
  • ReLU函数
      • 简化模型示例
      • 场景设定
      • 前向传播
      • 对反向传播的影响
      • 总结
  • 内容精简版

引文

梯度消失和梯度爆炸是神经网络训练中常见的两个问题,特别是在使用Sigmoid激活函数时。这些问题主要是由Sigmoid函数的数学性质引起的。同样在使用ReLU激活函数的时候也会遇到类似由激活函数引起的问题,如果想看ReLU部分引起的神经元失效问题请直接跳转,如果觉得讲的啰嗦也可以直接看最后的精简版本哦。

Sigmoid函数

Sigmoid激活函数定义为:

σ ( z ) = 1 1 + e − z \sigma(z) = \frac{1}{1+e^{-z}} σ(z)=1+ez1

它的导数(即梯度)为:

σ ′ ( z ) = σ ( z ) ⋅ ( 1 − σ ( z ) ) \sigma'(z) = \sigma(z) \cdot (1-\sigma(z)) σ(z)=σ(z)(1σ(z))

Sigmoid函数的输出范围是(0, 1),这意味着它的导数 σ ′ ( z ) \sigma'(z) σ(z)的最大值是0.25。在 z z z很大或很小的时候,Sigmoid函数会趋近于0或1,导致其导数趋近于0。

梯度消失问题

当使用Sigmoid激活函数的网络很深时,实际上就是不断的加权求和激活,不断的加权求和激活不断的加权求和激活不断的加权求和激活不断的加权求和激活,就会导致其在更新最初层导数的时候要不断的利用链式法则解开这嵌套了多层的函数梯度经过多层反向传播会连续乘以这些小于1的数(最大为0.25),导致梯度值迅速减小,最终趋近于0。这就是梯度消失问题,导致深层网络的权重几乎不更新,从而影响网络学习。

梯度爆炸问题

虽然在使用Sigmoid激活函数时梯度消失更为常见,但是梯度爆炸也可能发生,尤其是在网络权重初始化较大,或者==输入数据未经标准化处理时。当梯度的绝对值变得非常大,以至于权重更新过程中出现极端值,==导致数值计算溢出或者网络无法收敛。虽然梯度爆炸与Sigmoid激活函数的直接关系不如梯度消失那么明显,但它们在训练非常深的网络时都可能出现,并且都需要特别注意。

解决方案

为了缓解发生在深度神经网络中的梯度消失问题,学术界和工业界有几种常用的策略:

  • 使用ReLU激活函数:ReLU(Rectified Linear Unit)因为其单侧饱和(对正输入,导数恒为1)的性质而受到青睐。这减少了梯度消失的问题,但也要注意ReLU可能导致的激活死亡问题。
  • 权重初始化:合适的权重初始化方式(如He初始化或Xavier初始化)可以在训练开始时防止梯度过大或过小。
  • 使用残差网络(ResNet)等架构:通过引入跳过连接,即使部分路径上的梯度消失,残差连接也可以帮助保持信息流。
  • 批量归一化(Batch Normalization):通过对每层输入进行归一化,可以减少训练过程中参数范围的差异,从而帮助缓解梯度消失或爆炸问题。

ReLU函数

接下里啊重点来了这个 ReLU缺陷问题

在我们之前的讨论中,特别指出了在使用 Sigmoid 激活函数时碰到的梯度消失问题,这一问题主要源于在进行激活函数的求导过程的特性。由于在多层网络中,激活函数的导数需要被连续计算多次,这个过程涉及到大量对 Sigmoid 函数的求导。其导数的值总是小于 1,这种多次求导并相乘的操作,导致了最终的梯度值迅速减小至接近 0 的现象 —— 即梯度消失问题的发生。

因此,这个梯度消失问题主要是由激活函数的数学特性所决定的。简单来说,深度神经网络的本质在于不断进行加权求和与激活的循环操作。当在这样的循环中连续多次应用 Sigmoid 函数时,就会遇到一个情况:多层嵌套的 Sigmoid 函数求导后相乘的结果,导致了一个小于 1 的累乘效应。从而,这个问题归根结底是由 Sigmoid 激活函数的特性所引起的。
这种对 Sigmoid 函数的依赖,尤其是它在网络中多层传播时的影响,成为了导致深度学习模型训练困难的关键。它揭示了选择激活函数时需要考虑的一个重要方面,即该激活函数在进行反向传播时是否会导致梯度消失或爆炸,从而影响模型的学习效率和效果。

说人话 就是在使用sigmoid函数的过程中出现的梯度消失问题就是在求激活函数部分的导数时,由于其结果多层嵌套的原因,要多次对sigmoid的函数求导期,其导数结果小1会出现梯度小时和爆照的问题。因此这个梯度消失主要是由于其激活函数决定的。就是神经网络多层就是不断的加权求和加权求和的遍历,这就会导致计算导数是多个嵌套sigmoid的乘积,结果展示出来的就是小于1的乘积。因此这个问题是sigmoid的锅。

而最近在学习这个moilenet发现有些参数变成0了,这个也是ReLU激活函数的锅。这个问题具体是怎么导致的呢???

下面是一个简单的损失函数。
首先模型定义下:

y = R e L U ( w x + b ) y = ReLU(wx +b) y=ReLU(wx+b)
这个过程可以简单地概括为以下几个步骤:从权重 w w w到加权输入 z z z(由 w x + b wx + b wx+b给出),再到激活后的输出 y y y(由 R e L U ( z ) ReLU(z) ReLU(z)给出),最后到损失 L L L(由 1 2 ( y − t ) 2 \frac{1}{2}(y - t)^2 21(yt)2给出)。具体地:

  1. 权重到加权输入:给定权重 w w w和偏置项 b b b,以及输入 x x x,我们首先计算加权输入 z z z,它是通过权重和输入的乘积再加上偏置项得到的:

    z = w x + b z = wx + b z=wx+b

  2. 加权输入到激活输出:然后,加权输入 z z z被送入激活函数(这里以ReLU为例)以计算激活后的输出 y y y

    y = R e L U ( z ) = m a x ( 0 , z ) y = ReLU(z) = max(0, z) y=ReLU(z)=max(0,z)

  3. 激活输出到损失:最后,激活输出 y y y被用于损失函数(这里以二次损失函数为例)以计算与目标值 t t t之间的损失 L L L

    L = 1 2 ( y − t ) 2 L = \frac{1}{2}(y - t)^2 L=21(yt)2

通过这种从输入至输出的正向计算,可以得到损失值,而反向传播算法的目标是通过损失值来优化 w w w b b b,以减少模型的输出与目标之间的差异。

在反向传播过程中,我们利用链式法则依次计算损失函数 L L L关于 y y y y y y关于 z z z、以及 z z z关于 w w w的偏导数,这为我们提供了关于如何调整 w w w(以及 b b b)以减小损失 L L L的方向和幅度的指导。

通过链式法则,我们可以表示为:

∂ L ∂ w = ∂ L ∂ y ⋅ ∂ y ∂ z ⋅ ∂ z ∂ w \frac{\partial L}{\partial w} = \frac{\partial L}{\partial y} \cdot \frac{\partial y}{\partial z} \cdot \frac{\partial z}{\partial w} wL=yLzywz

这种方法让我们可以精确地理解每个模型参数是如何影响最终损失的,从而使得我们能够通过梯度下降等优化算法有效地训练神经网络。

先看第一部分损失函数 L L L对输出 y y y的导数为:

∂ L ∂ y = ( y − t ) = ( 0 − 1 ) = − 1 \frac{\partial L}{\partial y} = (y - t) = (0 - 1) = -1 yL=(yt)=(01)=1

这一部分之前没啥问题,这是损失函数决定的基本不出问题。然而,在连接损失函数 y y y z z z的导数时,应该更仔细地考虑整个计算链。

损失函数 L L L关于权重 w w w的导数需要考虑到 y y y如何依赖于 w w w,即通过链式法则考虑 y = R e L U ( z ) y = ReLU(z) y=ReLU(z)。重点在于激活函数ReLU对其输入的导数。

对于ReLU函数,其导数为,这主要是分段函数啊,实际上ReLU在对啊大于0的数值的时候 y = x y=x y=x的小于0则是 y = 0 y=0 y=0因此看下面公式的导数计算结果:

∂ R e L U ( z ) ∂ z = { 0 if  z < 0 1 if  z > 0 \frac{\partial ReLU(z)}{\partial z} = \begin{cases} 0 & \text{if } z < 0 \\ 1 & \text{if } z > 0 \end{cases} zReLU(z)={01if z<0if z>0

在这例子中,激活前的值 z = − 1 z = -1 z=1,因此 ∂ y ∂ z = 0 \frac{\partial y}{\partial z}=0 zy=0。这意味着,后面没啥计算的必要了都是0.如果是 R e L U ( w x + b ) ReLU(wx +b) ReLU(wx+b) w x + b wx +b wx+b小于0则梯度信息 w w w的梯度就是不会更新。

但是为什么这个问题在mobilenet中出现的比较严重呢,主要是一个权重控制仅仅一个通道的特征生成,这就导致其计算结果都由一个 w w w决定这就是如果 w x + b wx +b wx+b结果小于0被激活就是0的结果是不会更新的。

先把这部分算完看一下

接下来考虑如何从 x x x w w w的导数。在这个例子中,输入 x = − 1 x=-1 x=1,因此:

∂ z ∂ w = x = − 1 \frac{\partial z }{\partial w} = x = -1 wz=x=1

结合上述内容:

∂ L ∂ w = ∂ L ∂ y ⋅ ∂ y ∂ z ⋅ ∂ z ∂ w \frac{\partial L}{\partial w} = \frac{\partial L}{\partial y} \cdot \frac{\partial y}{\partial z} \cdot \frac{\partial z}{\partial w} wL=yLzywz

给出:

∂ L ∂ w = ( − 1 ) ⋅ 0 ⋅ ( − 1 ) = 0 \frac{\partial L}{\partial w} = (-1) \cdot 0 \cdot (-1) = 0 wL=(1)0(1)=0

最终就是计算不出来梯度信息了。

如何改善这个问题呢????

如果激活前的数值由两部分权重组成就能救一下这个权重,举个例子:

简化模型示例

假设有一个简单的神经网络层,该层有两个输入 x 1 x_1 x1 x 2 x_2 x2,和对应的权重 w 1 w_1 w1 w 2 w_2 w2,无偏置项(为了简化)。该层的输出通过ReLU激活函数。因此,输出 y y y可以表示为:

y = R e L U ( z ) = R e L U ( w 1 x 1 + w 2 x 2 ) y = ReLU(z) = ReLU(w_1x_1 + w_2x_2) y=ReLU(z)=ReLU(w1x1+w2x2)

场景设定

假设输入和权重值如下:

  • 输入: x 1 = − 2 , x 2 = 3 x_1 = -2, x_2 = 3 x1=2,x2=3
  • 权重: w 1 = 2 , w 2 = 2 w_1 = 2, w_2 = 2 w1=2,w2=2

前向传播

进行前向传播计算:

z = w 1 x 1 + w 2 x 2 = 2 ( − 2 ) + 2 ( 3 ) = − 4 + 6 = 2 z = w_1x_1 + w_2x_2 = 2(-2) + 2(3) = -4 + 6 = 2 z=w1x1+w2x2=2(2)+2(3)=4+6=2

因此,经过ReLU激活后的输出 y y y为:

y = R e L U ( 2 ) = 2 y = ReLU(2) = 2 y=ReLU(2)=2

即使 w 1 x 1 w_1x_1 w1x1的贡献是负的(具体来说是-4),这样是直接使用激活函数就是0,以后就没法更新了,但是将这部分输出和 w 2 x 2 w_2x_2 w2x2的正贡献(+6)进行融合足以抵消这个负面影响,使得 z z z为正值2。因此,在这个简化模型中,即使某些组成部分是负的,整体输出仍然是正的。

那么为正有什么意义呢,如果采用单组权重很有可能这个 w 1 w_1 w1不在更新了,但是可以看到在两个权重的情况下, w 1 w_1 w1还是可以依赖于 w 2 w_2 w2 R e L U ( z ) ReLU(z) ReLU(z)做的贡献实现参数的更新,不停止更新这个权重才有效啊因此:

对反向传播的影响

在反向传播中,ReLU激活函数的导数为:

∂ R e L U ( z ) ∂ z = { 1 if  z > 0 , 0 otherwise. \frac{\partial ReLU(z)}{\partial z} = \begin{cases} 1 & \text{if } z > 0, \\ 0 & \text{otherwise.} \end{cases} zReLU(z)={10if z>0,otherwise.

对于我们的例子来说 z = 2 z=2 z=2,因此 ∂ R e L U ( z ) ∂ z = 1 \frac{\partial ReLU(z)}{\partial z} = 1 zReLU(z)=1。也就是说允许某些神经元计算出负数输出的情况下还能利用梯度信息更新。(另一个参数在这个过程中起到了巨大的贡献)

总结

因此,在包含ReLU激活函数的神经网络中,即使某些权重(如 w 1 w_1 w1)和输入的组合(如 w 1 x 1 w_1x_1 w1x1)贡献了负值,但只要整体加权和( z z z)为正,ReLU激活后的神经元就可以对损失函数的梯度做出响应,并且所有相关的权重( w 1 w_1 w1 w 2 w_2 w2)在反向传播过程中都有可能被更新。这种机制展示了深度学习模型在训练过程中通过结合多个特征和权重以实现复杂函数近似的强大能力。而mobilenet最初设计的深度卷积层通道间不相互作用本身就是孤立了权重,使其计算负值后无法进行参数的更新。而传统卷积则不会考虑这部分问题。因为其最终激活前的结果是多个卷积核参数共同作用的产物。

内容精简版

在我们之前的讨论中,我们特别指出了在使用Sigmoid激活函数时碰到的梯度消失问题,这一问题主要源于激活函数的求导过程的特性。特别是在深层神经网络结构中,一个激活函数的导数可能会被连续计算多次,这种过程涉及到大量对Sigmoid函数的求导。由于其导数值总是小于1,经过多次求导并相乘后,最终的梯度值迅速减小至接近0,引发了所谓的“梯度消失”问题。

基本上,深度神经网络的核心操作包括连续的加权求和和激活。在这种结构下,连续多次应用Sigmoid函数会遇到一个挑战:由多层嵌套的Sigmoid函数导出的导数乘积,导致最终梯度值不足,产生小于1的累乘效应。这个问题的根本原因在于Sigmoid激活函数的数学特性。

Sigmoid函数的这种特性,尤其是在网络多层传播时的影响,成为了深度学习模型训练面临的一个关键挑战。它揭示出,选择激活函数时,需要考虑该函数在反向传播时是否会引起梯度消失或爆炸现象,这直接影响模型的学习效率和最终性能。

而近期在学习MobileNet时发现的某些参数变为0的问题,同样源自ReLU激活函数的特性。这个问题究竟是如何产生的呢?简而言之,当我们对通向ReLU函数的输入进行求导时,如果输入的加权和(例如 w x + b wx + b wx+b)小于0,则导数为0,导致权重 w w w的更新停滞,因为反向传播中将没有梯度信息传递。

为了阐述这个问题,我们设立了一个模型,其中包含两个输入 x 1 x_1 x1 x 2 x_2 x2和相应的权重 w 1 w_1 w1 w 2 w_2 w2。模型的输出通过ReLU函数激活,并且没有偏置项 b b b来简化计算。

在有两个权重的情况下,即使 w 1 x 1 w_1x_1 w1x1的贡献是负的,与 w 2 x 2 w_2x_2 w2x2的正向贡献结合仍然足以抵消负面影响,保证整体输出 y y y在ReLU激活后为正。因此,即使某些组成部分是负值,整体模型输出仍然保持活跃,且能够正常传递梯度信息,确保所有相关权重在反向传播过程获得有效更新。

此示例清晰展示了通过多权重协同作用,可以有效克服由单个权重或输入导致的激活函数负输出,确保深层神经网络能够持续学习和适应。这表明了激活函数选择对于防止梯度消失和保障网络学习能力的重要性。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

图形化编程012(变量-倒计时)

案例展示 点击绿旗&#xff0c;使用空格键控制鳐鱼&#xff0c;按下空格向上游&#xff0c;松开下落。 在舞台右侧会出现障碍物从右向左移动&#xff0c;移动到左侧边缘发出声音并隐藏。 鳐鱼碰到障碍停止全部脚本&#xff0c;坚持60秒程序结束。 一、逻辑思维 通过读题将大…

鸿蒙媒体开发系列09——OpenSL ES音频录制

如果你也对鸿蒙开发感兴趣&#xff0c;加入“Harmony自习室”吧&#xff01;扫描下方名片&#xff0c;关注公众号&#xff0c;公众号更新更快&#xff0c;同时也有更多学习资料和技术讨论群。 1、概述 OpenSL ES全称为Open Sound Library for Embedded Systems&#xff0c;是一…

【我的 PWN 学习手札】tcache extend

目录 前言 一、利用手法 二、流程演示 &#xff08;1&#xff09;三块物理相邻的堆块 &#xff08;2&#xff09;溢出修改 size &#xff08;3&#xff09;释放该 chunk &#xff08;4&#xff09;重新申请该 chunk &#xff08;5&#xff09;释放第三块 chunk&#x…

vcs/verdi常用命令(持续更新)

1. 操作rtl 1.1 加载rtl命令 verdi -dbdir simv.daidir的目录 1.2 显示某时刻rtl的值 首先鼠标左键在波形上选中某个特定时刻&#xff0c;然后鼠标选中rtl代码文件&#xff0c;按x就会显示&#xff0c;再按x就会退出显示。 1.3 查找字符串 按/ 1.4 vcs将rtl的信号加载到…

DNS是什么?怎么设置

NS是什么意思?有什么用呢?专业的说DNS就是域名系统 (Domain Name System)的简称&#xff0c;也就是IT人士常说的域名解析系统。主要是让用户在互联网上通过域名找到域名对应的IP地址&#xff0c;因为IP地址都是一串数字(例如&#xff1a;192.168.0.1)不方便记忆&#xff0c;便…

与 CESS Network 共探去中心化创新:重塑数据基础设施,驱动未来变革

随着互联网的快速发展和数据量的爆炸式增长&#xff0c;如何有效管理、存储和保护数据成为了一个日益重要的课题。传统的中心化平台&#xff0c;如 YouTube&#xff0c;虽然为用户提供了便捷的服务&#xff0c;但数据的所有权和控制权往往掌握在平台手中&#xff0c;用户的内容…

口腔检测系统源码分享

口腔检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …

Memory Controller Unit (MCU)内存控制器介绍

文章目录 Memory Controller Unit (MCU)内存控制器介绍1. MCU基本概念和功能地址映射读写操作缓存控制内存刷新1.1 地址映射1.2 读写操作1.3 缓存控制1.4 内存刷新 2. MCU的工作原理接收CPU的请求地址转换执行操作管理缓存 3. MCU的类型SDRAM控制器DDR控制器Flash控制器 4. MCU…

嵌入式 开发技巧和经验分享

文章目录 前言嵌入式 开发技巧和经验分享目录1.1嵌入式 系统的 定义1.2 嵌入式 操作系统的介绍1.3 嵌入式 开发环境1.4 编译工具链和优化1.5 嵌入式系统软件开发1.6 嵌入式SDK开发2.1选择移植的系统-FreeRtos2.2FreeRtos 移植步骤2.3 系统移植之中断处理2.4系统移植之内存管理2…

与姜妍同款冰箱,容声516WILL养鲜冰箱领“鲜”上市

9月20日&#xff0c;容声冰箱在“养鲜新净界”——2024年容声新品上市发布会上推出了WILL系列的最新力作——516WILL养鲜冰箱。 据「TMT星球」了解&#xff0c;此次新品搭载了升级版的WILL自然养鲜技术&#xff0c;并以60CM整机平嵌一体&#xff0c;完美融入现代家居美学&…

Mapper代理开发

目的 解决原生方式中的硬编码简化后期执行SQL 步骤 1&#xff0c; 整体目录结构 2&#xff0c; UserMapper.xml 设置SQL映射文件的namespace属性为Mapper接口全限定名 <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC &quo…

P9235 [蓝桥杯 2023 省 A] 网络稳定性

*原题链接* 最小瓶颈生成树题&#xff0c;和货车运输完全一样。 先简化题意&#xff0c; 次询问&#xff0c;每次给出 &#xff0c;问 到 的所有路径集合中&#xff0c;最小边权的最大值。 对于这种题可以用kruskal生成树来做&#xff0c;也可以用倍增来写&#xff0c;但不…

程序员工作中经常使用的C/C++开源库

Bundle 项目地址&#xff1a;GitHub - r-lyeh-archived/bundle: :package: Bundle, an embeddable compression library: DEFLATE, LZMA, LZIP, BZIP2, ZPAQ, LZ4, ZSTD, BROTLI, BSC, CSC, BCM, MCM, ZMOLLY, ZLING, TANGELO, SHRINKER, CRUSH, LZJB and SHOCO streams in a …

Datawhale X 南瓜书 task02学习笔记

算法原理引入 样本点通常应该在模型的2侧&#xff0c;原因&#xff1a;在实际中&#xff0c;因为某种不可控的因素&#xff0c;测出来的样本点肯定是有误差的。如果样本数据点都在模型上&#xff0c;则说明在建立模型时&#xff0c;把误差也考虑进去了&#xff0c;这就是我们说…

9月21日 电子产品世界上海站沙龙

9月21日 电子产品世界上海站沙龙 有幸参加了 9月21日 14: 00 在上海 九江路 700号 上海南新雅皇冠假日酒店 4楼 举行的 TI MSPM0 MCU开发经验交流 会 本次邀请资深开发者&#xff0c;现场跟大家进行TI MSPM0 MCU开发经验交流&#xff0c;并详细展示基于TI MSPM0 MCU开发的实用…

动态规划day39|198. 打家劫舍、213. 打家劫舍 II(环形怎么处理?)、337. 打家劫舍 III(二叉树与动态规划的完美结合!)

动态规划day39|198. 打家劫舍、213. 打家劫舍 II&#xff08;环形怎么处理&#xff1f;&#xff09;、337. 打家劫舍 III&#xff08;二叉树与动态规划的完美结合&#xff01;&#xff09; 198. 打家劫舍213. 打家劫舍 II337. 打家劫舍 III 198. 打家劫舍 你是一个专业的小偷&…

盘点3款.NetCore(C#)开源免费商城系统

CoreShop商城 介绍 核心商城系统&#xff08;CoreShop&#xff09; 是基于 Asp.Net 8.0、Uni-App开发、支持可视化布局的小程序商城系统&#xff1b;前后端分离&#xff0c;支持跨平台运行&#xff1b;拥有分销、代理、团购秒杀、接龙、拼团、直播、优惠券、自定义表单等众多营…

为什么用迭代器调用不了对象中的函数

没加const可以 加了const就不行 我懂了 加了const v的值就不能修改&#xff0c;我的那些函数都可以修改值 应该是 好像不对 有大佬会吗

直通滤波-PassThrough Filter-原理-代码实现

前言 对坐标轴上的上下限进行约束&#xff0c;选取其中符合范围的点云区域使用场景&#xff1a;去除噪声点&#xff0c;关注特定区域&#xff0c;减小计算量 工作流程 假设我们要在 d d d 轴&#xff08; d ∈ { x , y , z } d \in \{x, y, z\} d∈{x,y,z} &#xff09;上…