以下内容由AI辅助生成
一、训练神经网络到底在做什么
训练神经网络,本质只有一件事:
不断微调参数,使模型输出更接近真实目标。
参数该往哪个方向调、调多大力度,完全由梯度决定。
如果梯度能够稳定传播,模型就能学习;
如果梯度在传播过程中衰减或失控,训练就会失败。
二、什么是梯度(不涉及神经网络)
1. 变化率的直觉理解
考虑函数:
当
- 在
附近, 增加 0.01, 约增加 0.02 - 在
附近,同样增加 0.01, 却增加约 0.2
这说明:
同样的输入变化,在不同位置,对输出的影响不同。
2. 导数的定义
这种“对变化的敏感程度”,就是导数。
数学上,导数的定义为:
对
注: 在单变量函数中称为导数,在多变量函数中,所有偏导数组成的向量称为梯度。
三、梯度在训练中的作用
1. 参数是如何被更新的
设一个最简单的模型:
定义损失函数:
训练的目标是让损失
2. 梯度下降规则
参数更新公式为:
其含义是:
- 梯度大 → 参数调整幅度大
- 梯度小 → 参数调整幅度小
- 梯度为 0 → 参数不再更新
梯度决定了模型是否还能继续学习。
四、神经网络中的梯度从哪里来
1. 神经网络是复合函数
多层神经网络可以表示为函数嵌套:
损失函数是
2. 反向传播的本质
反向传播使用链式法则计算梯度:
也就是说:
梯度是多个导数的连乘结果。
五、梯度消失:为什么“传不到前面”
1. 连乘导致的数值衰减
假设每一层反向传播的导数约为 0.5:
10 层:
50 层:
梯度几乎为 0。
2. 对训练的影响
- 输出层附近仍能更新
- 输入层附近梯度趋近于 0
- 参数几乎不发生变化
这称为梯度消失(Vanishing Gradient)。
六、梯度爆炸:同一机制的反面
1. 连乘导致的数值放大
若每一层导数约为 1.5:
- 10 层:
- 50 层:
2. 对训练的影响
- 参数更新幅度极大
- 损失函数变为 NaN 或 inf
- 数值溢出,模型发散
这称为梯度爆炸(Exploding Gradient)。
七、激活函数为什么会深刻影响梯度
1. 激活函数的作用
如果每一层只有线性变换:
多层叠加后仍等价于一次线性变换,模型表达能力有限。
因此神经网络必须引入非线性激活函数。
2. 激活函数在反向传播中的角色
在反向传播过程中,每一层梯度都会乘上激活函数的导数:
激活函数的导数直接决定梯度是被缩小,还是能够稳定传播。
3. Sigmoid:典型的饱和型激活函数
函数形态:
1 | y |
形态特征:
- 输出值域在 (0, 1) 之间
- 两端逐渐变平,存在明显饱和区
- 当输入绝对值较大时(如
或 ),函数几乎不变化 - 在饱和区内,导数接近 0
- 最大导数出现在
处,值为 0.25
多层连乘后,即使在最佳位置,导数也只有 0.25,梯度迅速衰减,极易出现梯度消失。
4. ReLU:非饱和激活函数
函数形态:
1 | y |
形态特征:
- 负区间输出恒为 0(
时 ) - 正区间保持线性增长(
时 ) - 正区间内导数恒为 1
- 负区间内导数恒为 0
优点: 梯度在正区间不会被缩小,更适合深层网络。
缺点: 负区间梯度为 0,可能导致“神经元死亡”问题(Dead ReLU),即某些神经元永远不会被激活。
5. GELU:平滑的非饱和激活函数
函数形态:
1 | y |
形态特征:
- 整体趋势类似 ReLU
- 负区间平滑过渡,而非硬截断(允许小的负值通过)
- 在
附近是光滑可导的 - 同时保持梯度稳定与函数连续性
- 避免了 ReLU 的“神经元死亡”问题
因此在 Transformer 等现代深层模型中被广泛采用。
6. 激活函数对梯度的整体影响
- Sigmoid / Tanh: 饱和型激活函数,导数最大值为 0.25(Sigmoid)或 1(Tanh),在饱和区导数接近 0,易导致梯度消失
- ReLU: 非饱和激活函数,正区间导数恒为 1,但负区间导数为 0,可能导致神经元死亡
- GELU / Swish: 平滑的非饱和激活函数,结合了 ReLU 的优点并避免了硬截断,在深层网络中表现更好
八、梯度消失与爆炸的本质
梯度问题并非偶然,而是反向传播机制的必然结果:
- 小于 1 的数反复相乘 → 梯度消失
- 大于 1 的数反复相乘 → 梯度爆炸
问题与网络深度、激活函数和结构设计强相关。
九、常见解决思路
针对梯度消失:
- 使用非饱和激活函数(如 ReLU、GELU)代替 Sigmoid、Tanh
- 引入残差连接(ResNet),为梯度提供直接的反向传播路径
- 使用批归一化(Batch Normalization)或层归一化(Layer Normalization)稳定数值尺度
- 适当的权重初始化(如 Xavier、He 初始化)使初始梯度保持在合理范围
针对梯度爆炸:
- 梯度裁剪(Gradient Clipping),限制梯度的最大范数
- 降低学习率
- 使用权重正则化(如 L2 正则化)
- 批归一化同样有助于防止梯度爆炸
十、总结
梯度消失是信号衰减问题,
梯度爆炸是信号放大失控问题。
深度学习模型结构的演进,本质上是在解决同一个问题:
如何让梯度稳定、完整地传回去。