数值稳定性
神经网络的梯度

数值稳定性的两个常见问题:梯度爆炸 和 梯度消失

- 梯度爆炸(gradient exploding)问题: 参数更新过大,破坏了模型的稳定收敛;
- 梯度消失(gradient vanishing)问题: 参数更新过小,在每次更新时几乎不会移动,导致模型无法学习。
梯度消失与梯度爆炸 (Vanishing/Exploding Gradients)
在深层网络或 RNN/LSTM 中,连乘操作会导致数值极端化。
爆炸:权重矩阵的特征值 ,连乘后梯度趋向
Inf。消失:权重矩阵的特征值 ,连乘后梯度趋向
0(下溢),导致浅层参数不更新。解决方案:
- 权重初始化:使用 Xavier (Glorot) 或 He (Kaiming) 初始化,确保初始方差适中。
- 激活函数:使用 ReLU, Leaky ReLU, GELU 等替代 Sigmoid/Tanh(Sigmoid 导数最大仅 0.25,连乘极易消失)。
- 归一化技术:Batch Normalization (BN) 或 Layer Normalization (LN)。它们强制将每一层的输入分布拉回到均值为 0、方差为 1 附近,从根本上切断连乘导致的数值发散。
- 梯度裁剪 (Gradient Clipping):在 RNN/Transformer 训练中常用。如果梯度的范数超过阈值(如 1.0 或 5.0),就将其强行缩放回阈值内。
torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0) - 残差连接 (Residual Connections):如 ResNet 和 Transformer 中的 结构,提供了一条梯度可以直接回传的“高速公路”,避免梯度在深层传递中消失。
总结
- 当数值过大或者过小时会导致数值问题
- 常发生在深度模型中,因为其会对n个数累乘
