
在神经网络训练过程中,通过梯度指导参数的更新,使得损失函数尽可能小,以达到对数据集的更好的拟合。
在多层网络中,梯度在反向传播过程中,通过链式法则在不同隐藏层中传递时,就可能会出现梯度消失和梯度爆炸的现象。
梯度消失
所谓梯度消失,是指在反向传播过程中,梯度在传递过程中逐渐变小,最终趋近于0,导致参数更新缓慢,甚至无法更新。
假设,我们使用 Sigmoid 函数作为激活函数,那么,在反向传播过程中,梯度在传递过程中会逐渐变小,最终趋近于0。Sigmoid 函数及导数曲线如下:
我们可以看到,Sigmoid 函数的导数在 0 到 0.25 之间。
Sigmoid函数的优势:
- 非线性,这允许神经网络学习更复杂的模式。
- 平滑性和单调性,具有平滑的 S 型曲线,有助于梯度算法的优化。
- 输出范围,输出范围在 0 到 1 之间,这使得神经网络的输出可以被解释为概率。
假设一个深度神经网络有 n 层,每一层的线性变换输出为:

对于 Wi 的偏导数,可以表示为:

我们注意到,对于第一项,
我们注意到,对于第二项,由于 Sigmoid 函数的导数在 0 到 1 之间,因此,当层数 n 增加时,梯度会趋近于0。
残差连接是解决梯度消失的一种方法。
梯度爆炸
为了解决梯度爆炸,可以采用梯度裁剪的方法。
梯度裁剪,是解决梯度爆炸的一种方法。即在反向传播过程中,对梯度进行裁剪,使其不超过一个阈值。