深度学习查漏补缺:1.梯度消失、梯度爆炸和残差块
创作时间:
作者:
@小白创作中心
深度学习查漏补缺:1.梯度消失、梯度爆炸和残差块
引用
CSDN
1.
https://m.blog.csdn.net/qq_53529450/article/details/145418828
在深度学习中,梯度消失和梯度爆炸是训练深层神经网络时常见的问题,它们会导致模型训练困难、性能受限。为了解决这些问题,残差块(Residual Block)应运而生,通过引入跳跃连接,使得深层网络的训练变得更加稳定和有效。本文将深入探讨梯度消失、梯度爆炸的原因及其解决方案——残差块的工作原理。
一、梯度消失
梯度消失的根本原因在于激活函数的性质和链式法则的计算:
- 激活函数的导数很小:
- 常见的激活函数(例如 Sigmoid 和 Tanh)在输入较大或较小时,输出趋于饱和(Sigmoid 的输出趋于 0 或 1),其导数接近于 0。
- 在反向传播中,每一层的梯度都会乘以激活函数的导数。如果导数很小,乘积就会导致梯度逐渐变小。
- 链式法则的多次相乘:
假设网络有 nn 层,梯度从输出层传到第 ii 层时,会经历多次链式相乘:
- 如果每一项的导数都小于 1(例如 0.5),那么多次相乘后梯度将变得非常小,接近于 0。
- 深层网络的结构:
层数越多,梯度消失的积累效应越明显,导致靠近输入层的权重几乎无法更新。
1.4 梯度消失带来的问题
- 网络无法有效学习:靠近输入层的权重无法更新,网络的学习能力只集中在靠近输出层的部分,导致模型性能受限。
- 训练时间增加:梯度很小,优化器调整参数的速度变慢,训练需要更多的时间。
二、梯度爆炸
1 梯度爆炸的现象
与梯度消失相反,当网络层数较深时,梯度在反向传播过程中可能会逐渐变大,甚至变得非常大。这种现象被称为梯度爆炸。
由于梯度过大,模型的参数更新幅度也会非常大,可能导致:
- 参数出现巨大波动,训练过程不稳定;
- 损失值(Loss)变得非常大,甚至出现
NaN
; - 模型无法收敛,最终无法学习任何规律。
2 为什么会发生梯度爆炸?
梯度爆炸的原因与梯度消失类似,主要是由于链式法则的多次相乘,但此时乘积中的值大于 1:
- 权重初始化不当:
- 如果网络的初始权重过大,在反向传播时,梯度的值也会变得很大。
- 例如,如果每层的权重初始化为 5,经过 10 层的链式积累,梯度可能会变成
- 激活函数的导数较大:
- 如果激活函数的导数值很大,梯度在多次相乘后会迅速变大。
- 深层网络的结构:
- 网络层数越多,链式法则的积累效应越明显,导致梯度爆炸的概率增大。
3 梯度爆炸带来的问题
- 训练不稳定:梯度过大,导致参数更新过快,训练过程可能无法收敛。
- 损失发散:梯度爆炸会导致损失值发散,模型无法学习有效特征。
三、残差块
残差块(Residual Block)是深度学习中ResNet(Residual Network)网络的核心组件,它最早由微软研究院的何凯明(Kaiming He)等人在 2015 年提出。残差块通过引入跳跃连接(skip connection),解决了深层神经网络训练中的梯度消失、梯度爆炸和退化问题,使得网络能够训练得更深、性能更好。
为什么需要残差块?
在深层神经网络中,随着网络深度的增加(层数增多),存在以下问题:
- 梯度消失(Vanishing Gradient):反向传播时,梯度在逐层传递过程中可能逐渐变小,从而无法有效更新靠近输入层的权重。
- 梯度爆炸(Exploding Gradient):反之,梯度可能会在逐层传递过程中变得过大,导致模型训练不稳定。
- 退化问题(Degradation Problem):当网络层数增加时,模型的训练误差反而会变大,甚至性能比浅层网络更差。
这些问题的根本原因在于,随着层数增加,网络在拟合复杂非线性变换时可能会难以优化。残差块通过引入跳跃连接,允许网络直接学习相对较小的残差(Residual),从而降低优化难度。
残差块的结构
一个标准的残差块具有以下结构:
- 主路径(Main Path):通过若干个卷积、批归一化(Batch Normalization)、激活函数(如 ReLU)组成,是网络的主要信息传递路径。
- 跳跃连接(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
- 第一层卷积(Conv1d/Conv2d),带激活函数(如 ReLU)。
- 第二层卷积(Conv1d/Conv2d)。
- 跳跃连接:直接将 xx 与经过两层卷积后的结果相加。
- 激活函数(如 ReLU)。
数学表达式为:
y=ReLU(F(x)+x)
2. 带维度变换的残差块
如果输入和输出的特征维度不同(例如通道数或空间维度变化),需要使用额外的线性变换对输入 x 进行升维或降维(Projection Shortcut),使得尺寸匹配。
y=F(x)+Ws x
其中 Ws是一个线性变换(通常是 1×1 卷积)。
直观解释残差块的作用
- 更容易优化深层网络
通过学习残差 F(x)=H(x)−x,残差块将复杂的非线性映射 H(x)转换为一个简单的优化问题。即使网络层数增加,残差块可以将输入直接传递到更深层,减轻梯度消失的影响。 - 提供信息的捷径
跳跃连接允许信息直接从输入传递到输出,让网络更容易捕捉重要的特征,同时保留原始特征。 - 防止退化问题
在普通深层网络中,增加更多的层可能会导致模型性能退化,反而不如浅层网络。残差块通过添加跳跃连接,可以显式地学习哪些层需要参与计算,哪些层可以跳过,从而有效防止退化。
本文原文来自CSDN
热门推荐
防腐蚀涂层缺陷之气泡
16种糖类来源大盘点,看看它们的作用与区别
如何给新人说团队的底线
旋转楼梯设计指南:打造完美的关键要点
健康科普丨牙疼引起头疼?警惕牙髓炎
梦到大蟒蛇预示着什么
育碧服务器问题引发玩家热议,土豆服务器表情包背后的故事是什么?
域名小百科:什么是数字域名?
车载测试培训真的能找到工作吗?这份就业前景分析请收好
肠间隙积液是什么原因造成的?怎么治疗?
乳山:小生蚝“吃”出大产业
明朝旌表制度如何?如何对待武将、文臣?
数据库中数据表的描述与设计指南
《700种多肉植物原色图鉴》
赵隆:美俄关系重启?中国会面临怎样的局势?
龟王神酒养龟课堂:常见热带乌龟日常饲养攻略大全
生抽和老抽哪个能直接吃?揭开这2个酱油的健康秘密!
补充责任与连带责任的主要区别
创意启程 | 八种赋予产品开箱仪式感的互动包装设计策略
肝功能五项检查报告单解读指南
可以治疗咽喉炎的中药
甘蔗加它一起煮,简单有效,一润肺、二止咳、三补气血,别不懂吃
小白学大模型 RAG:9种不同的Chunk划分方法
行业景气度模型优化及实证回测研究
一文读懂电磁元件的磁能魔力
慈禧对清朝的影响有多大?这个毁誉参半的女人,毁在哪?誉在哪?
arccos怎么使用手机计算器计算?
掌握迂攻之道,驾驭竞争风云
划算!长沙出发机票价格大跳水,坐飞机比高铁还便宜
要想健康长寿,早上起床后得养成这4个好习惯!