梯度爆炸
误差的梯度能给予权重正确的更新方向
在反向传播过程中,随着网络层数的增加,梯度逐渐变大,可能会变得非常大,导致模型的参数更新过大,甚至数值溢出, 这是由于层间的链式相乘导致
梯度的链式相乘
在反向传播过程中,梯度的计算涉及对每一层参数的偏导数的计算,并且这些偏导数是按层逐步相乘传播的。假设我们有一个非常深的网络,网络的输出相对于某一层的输入的梯度是通过将所有后续层的导数相乘得到的。
对于每一层 ,假设该层的激活函数为,权重矩阵为 ,输入为,那么反向传播时对上一层输入的梯度(即下一层的输出)可以表示为:
如果网络很深,这样的链式相乘会导致梯度逐层累积。当权重矩阵 或激活函数的导数中的值较大时,每一层的梯度乘积会不断放大,最后导致梯度爆炸。
影响因素
- 激活函数的影响
某些激活函数的导数可能在某些区域内大于 1,例如 ReLU 的导数在正数区域是 1,如果输入非常大,那么它们会导致梯度逐层放大
- 权重初始化的影响
如果权重初始化较大,反向传播过程中这些权重将被多次乘上激活函数的导数,可能导致梯度的急剧放大,尤其是在深层网络中,放大的效果会更加明显
- 网络深度的影响
随着网络层数的增加,即使每一层的放大效果不明显,但累积效应可能会导致梯度在反向传播时迅速增大,这就形成了梯度爆炸
梯度消失
在反向传播过程中,随着网络层数的增加,梯度逐渐变小,最终可能接近于零,导致早期层的权重几乎无法更新
影响因素
- 激活函数
某些激活函数(如 sigmoid 和 tanh)会将输入压缩到一个很小的范围内(例如 sigmoid 将输出压缩到 0 到 1 之间)。当输入远离 0 时,函数的导数值接近于零,导致梯度在反向传播过程中逐层缩小
- 网络深度
在深度网络中,梯度在多次链式相乘的过程中可能会变得非常小,最终导致前面层的梯度几乎消失