梯度消失与梯度爆炸

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

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

(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,模型发散。

相关推荐
猫头_5 分钟前
MCP 开发实战:把你自己的后端 API 接入 Agent
人工智能·typescript·mcp
OpenAnolis小助手8 分钟前
龙蜥社区亮相 GOSIM AI Vision Forum 共话“Agentic Native”开源新
人工智能·ai·开源·操作系统·龙蜥社区·agent
Bode_200232 分钟前
机器人装配线的监测和预测
人工智能·机器人装配
Zhao-Jichao34 分钟前
AI Prompting for Everyone 课程笔记 - 03 联网搜索 Web Search
人工智能
xsd202411181 小时前
手机扫一眼盘子算食物体积方案
人工智能
阿里云基础软件1 小时前
Agent 任务提速 10.71%,内存占用降低 21.60%|Alibaba Cloud Linux 4 重大发布
java·linux·人工智能·操作系统·agent
服务器硬件项目经理1 小时前
《超节点修仙录》· 第一卷·炼气期【第04话】 超节点 vs 普通服务器——不就是多插了几张卡吗?
运维·服务器·人工智能·嵌入式硬件·深度学习·机器学习
前端 贾公子1 小时前
将CHATGPT/Codex 26.727.51351固定在MacOS Monterey 12上
人工智能
9i编程1 小时前
用 Codex 改代码,依据是什么?
人工智能·openai·ai编程