假设我们要更新w1的值。
根据梯度下降法,我们需要计算一个偏导数. 其中C为你定义的Loss函数。
再使用公式 更新w。此处w2不同于上图w2.
那么我们怎么计算呢?
根据链式求导法则:
而
可以很容易求出.即箭头前面的值。事实上,我们可以预先计算所有神经元的这个值。
(其中a为你选取的激活函数)
其中可以很容易的计算出来。
而我们无法直接计算出来。因为C我们是不知道的。
其中
显然.
可以使用这个公式向后传导。
而输出层的C我们是知道的。
其中取决于你选取的激活函数,
取决于你的Loss函数。
这样我们可以计算出.
然后根据上面的式子向前传导,就可以计算出的值了。
而计算的过程我们不需要从前面递归,完全可以从后面开始向前计算,这就是后向传播。
梯度消失
如果我们使用sigmoid函数作为激活函数,函数图像为
导数最大为0.25.
而梯度下降是基于链式求导法则,也就是多个导数的乘积。可以发现网络层次越深,后向传播到第一层时的偏导值已经变得很小,无法进行有效更新。这就是梯度消失。而ReLu等函数则不会出现这种情况。