从BP算法的4个公式分析梯度消失问题

    xiaoxiao2023-12-04  148

    (1)为网络中每个神经元的错误量的计算公式,上标l代表第几层 ,下标j代表该层的第几个神经元,z代表神经元的加权输入,这个公式可以这样理解:某个神经元的错误量为损失函数对它的加权输入的偏导数,也就是损失函数对它的加权输入的变化率,如果损失函数对某个神经元的加权输入的改变而变化得很大,说明该神经元的错误量很大,也就意味着该神经元还需要学习(调整连接它的权重值的大小)。 (2)为输出层神经元的错误量的计算公式,其中,a就是网络的最终输出,根据损失函数的形式可以很容易求得公式的第一项,也就是C对a的偏导数,第二项就是神经元激活函数的导数。 (3)为隐藏层神经元的错误量的计算公式,可以看到,误差是从后面的层像前面的层传播,这一层的误差值的计算要考虑后面几层的误差值。 (4)为某个神经元的偏置b的梯度,可以看到,某个神经元的偏置的梯度,直接等于该神经元的错误量 (5)为连接某个神经元的权重w的梯度

    总结: 从(4)(5)可以看出,参数的梯度大小总体来说都是取决于错误量,错误两越大,梯度就越大,错误量越小,梯度就越小。而从(2)和(3)可以看出,错误量的计算公式中都含有激活函数的导数这一项,如果使用sigmoid或者tanh等非线性激活函数,则会出现错误量非常小,也就是梯度消失的问题,原因有两个: 1、sigmoid的导数范围为0~0.25,从(3)可以看出,某层的错误量,是要乘上后面几层传播过来的错误量,假设激活函数取能取到最大值0.25,错误量往前传4层,则该层的错误量的值会乘0.25^4,也就是此时的错误量已经很小了,也可以说这一层的梯度很小了,如果在更深层的网络中,这种情况会更加严重。 2、如果加权输入z很大,那么sigmoid函数的导数值会接近于0,这也是导致一个神经元的错误量很小的原因,也就是梯度很小(消失)。

    最新回复(0)