30.梯度消失和爆炸
约 535 字大约 2 分钟
2025-09-20
比如说一个模型: 
找到关于w1的导数:
∂w1∂E=∂y∂E⋅∂x4∂y⋅∂y3∂x4⋅∂x3∂y3⋅∂y2∂x3⋅∂y1∂y2⋅∂x1∂y1⋅∂w1∂x1=∂y∂E⋅f′(x4)⋅w4⋅f′(x3)⋅w3⋅f′(x2)⋅w2⋅f′(x1)⋅x
整理一下:
∂y∂E⋅f′(x4)⋅f′(x3)⋅f′(x2)⋅f′(x1)⋅w4⋅w3⋅w2⋅x
假设f=sigmoid,那么: 
在导数稍微大一些会发现越来越小,几个f的导数相乘会小得不得了,这就是梯度消失。
同样的,当几个权重相乘时,梯度会特别特别大,导致梯度爆炸。
这两种梯度失真很有必要避免,触发原因就是连乘效应。 当权重不合理激活函数不合理,更会导致问题的加重。
- 梯度消失,导致更新及其缓慢,相当于无法更新,直接导致网络退化
- 梯度爆炸,导致网络不稳定。
解决方案-激活函数:Relu
Relu(x)∂x∂Relu(x)=max(0,x)={01x<0x≥0
虽然在x=0不可导,但是总体还是不错的
解决方案-梯度剪切:
解决梯度消失和爆炸问题的一种方法是梯度剪切。梯度剪切是指在反向传播过程中,将梯度值限制在一个范围之内,以防止梯度值过大或过小,从而防止梯度爆炸或消失。 减轻变化幅度。
解决方案-改进网络结构:
如:使用残差神经网络(即大名鼎鼎的ResNet) 
可以跳线连接两个隐藏层,减少连乘影响,提高模型的表达能力。
