梯度消失与梯度爆炸

在深度神经网络训练过程的反向传播,梯度逐渐变得非常小或非常大。

导致这个现象的主要原因是激活函数和权重初始化不对

(1)梯度消失:在sigmoid函数与Tanh函数中,靠近输出层的的梯度比较大,在反向传播中,随着层数增加,梯度不断乘以小于1的数,越靠近输出层梯度越小

解决:1使用ReLU及其变种,即更换激活函数,activation='relu'

2使用合适的权重初始化,kernel_initializer='he_normal'

3使用Batch Normalization(即标准化规范化处理,让数据分布更加合理), tf.keras.layers.BatchNormalization()

4使用残差连接的神经网络,x = Add()([x, conv(x)])

场景 :一个10层的全连接网络,每层使用 sigmoid 激活函数,权重初始化为标准正态分布(均值为0,方差为1)。
现象:sigmoid函数的导数最大值为0.25。反向传播时,靠近输出层的梯度(如第10层)数值较大,但每向前传播一层,梯度就要乘一次该层的导数(≤0.25)以及权重矩阵。经过多层后,靠近输入层(如第1层)的梯度变得极小(如 0.2510≈9.5×10−70.2510≈9.5×10−7 再乘以权重),几乎为零。导致前几层参数几乎无法更新,网络训练停滞。

(2)梯度爆炸:在反向传播中,梯度不断增大,甚至非常大。通常出现在权重初始化时就比较大,导致训练过程中梯度膨胀

解决:1使用适当优化算法更新梯度,

2将梯度限制到一个合理范围

3权重的初始化采用 Xavier初始化,此外还可以对权重进行L2正则化

场景 :一个5层的循环神经网络(RNN),使用 tanh 激活函数,权重初始化为较大的值(如均值为0,方差为10的高斯分布)。
现象:tanh导数最大为1,但权重矩阵元素值较大(如10)。反向传播时,每传播一层梯度乘以权重矩阵(范数>1),梯度会指数级增长。例如第5层梯度为1,第4层梯度约为 10×1=1010×1=10,第3层梯度约为 10×10=10010×10=100,......,第1层梯度高达 104104。导致参数更新步长过大,损失值变成NaN,模型发散。

相关推荐
SomeB1oody1 天前
【Python深度学习】3.4. 循环神经网络(RNN)实战:预测股价
开发语言·人工智能·python·rnn·深度学习·机器学习
ACCELERATOR_LLC1 天前
【DataWhale组队学习】DIY-LLM Task2 PyTorch 与资源核算
人工智能·pytorch·深度学习·大模型
Elastic 中国社区官方博客1 天前
Elastic Security、Observability 和 Search 现在在你的 AI 工具中提供交互式 UI
大数据·运维·人工智能·elasticsearch·搜索引擎·安全威胁分析·可用性测试
一碗白开水一1 天前
【目标跟踪综述】目标跟踪近3年技术研究,全面了解目标跟踪发展
人工智能·计算机视觉·目标跟踪
Promise微笑1 天前
AI搜索时代的流量重构:GEO优化深度执行细节与把控体系
人工智能·重构
言萧凡_CookieBoty1 天前
比 Vibe Coding 更可怕的,是 Vibe Design 吧
人工智能·ai编程
Rick19931 天前
Spring AI 如何进行权限控制
人工智能·python·spring
Theodore_10221 天前
深度学习(15):倾斜数据集 & 精确率-召回率权衡
人工智能·笔记·深度学习·机器学习·知识图谱
IT_陈寒1 天前
SpringBoot自动配置这破玩意儿又坑我一次
前端·人工智能·后端
TechubNews1 天前
Base 发布首个独立 OP Stack 框架的网络升级 Azul,将是 L2 自主迭代的开端?
大数据·网络·人工智能·区块链·能源