神经网络反向传播算法总结

什么是反向传播算法

反向传播算法其实就是通过样本产生的误差来回推参数的修正值。它看上去像是通过输出值来计算输入值(参数),所以叫反向传播。反向传播算法其实和梯度下降算法比较类似,都可以表示为:修正值=原始值-学习率*代价函数对目标参数的偏导数。其中代价函数对目标参数的偏导数比较复杂,这里着重说明一下。

如何求偏导数

神经网络反向传播算法总结
以这个图为例,可以看到,我们要修正的是w1~w8这八个参数。先看看如何求代价函数对w5的偏导数,因为参数w5只影响了o1,所以不需要考虑o2。根据链式求导法则,L(代价函数)对w5的偏导=L对o1out的偏导×o1out对o1in的偏导×o1in对w5的偏导(注:o1in是o1这个结点使用的函数的输入值,o1out是o1这个结点使用的函数的输出值)。具体的求偏导方法也就不再赘述,w5-w8都同理,只需考虑一个输出结点的误差,求法都比较简单。
我们再来看看如何求L对w1的偏导数,求法总体与w5的求法区别不大,但是有一点值得注意的是,w1这个参数影响的不止o1一个输出结点,对于o2也有影响。所以我们在计算L对h1out的偏导数的时候要将两个输出结点的误差相加,即L对h1out的偏导数=L对o1in的偏导数+L对o2in的偏导数,然后再代入式子L对w1的偏导=L对h1out的偏导×h1out对h1in的偏导×h1in对w1的偏导。同理w1-w4也能得出。
结论:在计算某个参数的偏导值的时候,一定要注意的是这个参数对后面层上的哪些值产生了影响,一定要把所有被影响值的误差算上。