目录
[1 梯度饱和](#1 梯度饱和)
[2 梯度消失](#2 梯度消失)
[1. 梯度是什么?](#1. 梯度是什么?)
[2. 什么是梯度消失?](#2. 什么是梯度消失?)
[3. 为什么会发生?](#3. 为什么会发生?)
[3 梯度饱和和梯度消失的区别](#3 梯度饱和和梯度消失的区别)
[3.1. 梯度饱和:单层/局部问题](#3.1. 梯度饱和:单层/局部问题)
[3.2. 梯度消失:全局/传播问题](#3.2. 梯度消失:全局/传播问题)
[4 梯度爆炸](#4 梯度爆炸)
abstract:
梯度饱和:激活函数进入饱和区,梯度接近于零。
梯度消失:多个小梯度相乘 ,前面几层梯度接近于零
梯度爆炸:多个大梯度相乘,前面梯度爆炸。
1 梯度饱和
在神经网络中,梯度是通过反向传播算法(Backpropagation)计算得到的,用于更新网络权重。梯度饱和指的是:在网络的某一层或多个层中,激活函数进入饱和区, 激活函数的导数(梯度)趋近于零,导致反向传播时梯度几乎为零,从而使权重无法有效更新。
为什么会发生梯度饱和?
这通常与激活函数的特性有关。以经典的 Sigmoid 函数为例:
- Sigmoid 函数:σ(x)=11+e−xσ(x)=1+e−x1
- 其导数为:σ′(x)=σ(x)(1−σ(x))σ′(x)=σ(x)(1−σ(x))
Sigmoid 函数的输出范围是 (0, 1),当输入 xx 的绝对值很大时(例如 x>5x>5 或 x<−5x<−5),函数输出趋近于 1 或 0,此时导数非常小(接近 0)。
当反向传播发生时,梯度是通过链式法则逐层相乘传递的。如果某一层的激活函数输出处于"饱和区"(即导数极小),那么这一层的梯度就会变得非常小。这个小梯度在向后传递时,会与其他层的小梯度相乘,导致"梯度消失"(Vanishing Gradient)问题,前面层的权重几乎得不到更新。
2 梯度消失
1. 梯度是什么?
在神经网络训练中,我们使用反向传播算法(Backpropagation) 来更新网络参数。这个过程依赖于计算损失函数对每个参数的梯度(即偏导数),然后用梯度下降法进行优化。
2. 什么是梯度消失?
梯度消失 是指:在非常深的神经网络中,靠近输入层的那些层的梯度变得非常小,接近于0,导致这些层的权重几乎无法更新。
3. 为什么会发生?
这主要和链式法则有关。
反向传播时,每一层的梯度是通过后面所有层的梯度连乘得到的:
∂L∂w1=∂L∂an⋅∂an∂an−1⋅...⋅∂a2∂a1⋅∂a1∂w1∂w1∂L=∂an∂L⋅∂an−1∂an⋅...⋅∂a1∂a2⋅∂w1∂a1
如果每一项都小于1(比如激活函数如 Sigmoid 的导数最大为0.25),那么很多个小于1的数相乘,结果会指数级变小 → 最终传到前面的梯度趋近于0。
👉 结果就是:前面的层几乎不更新,网络训练停滞。
💡 类比:就像你往深井里喊话,声音传到井口时已经听不见了。
3 梯度饱和和梯度消失的区别

3.1. 梯度饱和:单层/局部问题
- 指的是某个激活函数在其输入过大或过小时,其导数(即局部梯度)变得非常小。
- 例如:Sigmoid 函数在输入 x>5x>5 或 x<−5x<−5 时,输出接近 1 或 0,导数 σ′(x)≈0σ′(x)≈0。
- 这是一个局部现象,发生在某一层、某个神经元上。
- 🔍 重点:它描述的是激活函数本身的数学性质。
✅ 所以你说"某一层的导数很小"------非常到位。
3.2. 梯度消失:全局/传播问题
- 指的是在反向传播中,从输出层往输入层传递的总梯度,由于链式法则中多个小数连续相乘,导致梯度指数级衰减。
- 公式上看:
假设每层的局部梯度平均为 0.10.1,那么经过 5 层后,梯度就变成:
0.15=0.000010.15=0.00001 → 几乎为 0。 - 这是一个全局现象,影响深层网络的训练。
- 🔍 重点:它是多个局部梯度连乘的结果。
4 梯度爆炸
梯度爆炸跟梯度相乘的原理是类似的,就是每层的梯度如果都很大,那么逐渐乘积,最终前面几层的梯度就会越来越大。
多个大梯度相乘,前面梯度爆炸。