BP算法推导
开始ML之旅,跟Coursera上Andrew Ng的ML课到了第五周,讲了神经网络中 Back Propagation(逆向误差传播,简称BP)算法。但视频没有给出推导的过程,并且和周志华《机器学习》上的推导有所出入,让人觉得无比玄学。但其实思想是非常精炼的一句话(个人理解):从后向前不断计算每一层的误差,来调整对应layer的权重, 从而实现网络权重的学习和优化
在参考了Andrew Ng的讲义和网上的一篇Blog之后,我尝试着推导了一下相关的步骤,这篇文章主要是记录推导的过程和思路。
数学记号

推导过程


Tips

思路和感想
思路
链式法则中的偏导转换实际上存在着对应的实际意义:
我们要求 J 对 Theta(l) 的偏导数,首先转换成对于其下一层输出单元a(l+1)的导数(①),再通过a(l+1)输出对z(l+1)输入的导数(②, 也就是sigmoid函数的导数),最后再通过z(l+1)输入对Theta(l)的导数(③, 可以通过展开得到)。
求偏导过程其实就体现了BP的主要想法: 通过Theta所影响到的下一层的输出,来调整Theta,是一种由后向前的过程。我们没有直接对Theta求导,而是转换到下一层的输出,再到输入,再到Theta这样一条路径来求导的。并且这样的转换也多次体现在步骤的其他求导过程中。
结果非常漂亮,使得我们可以通过不断地从后向前迭代,更新对应Theta来实现算法。
另外一点,Andrew Ng版本和周志华的《机器学习》中的版本不同之处在于对于Cost Function定义的不同,周的书中定义为输出与样本的方差,而Andrew Ng定义中则包含了log(详见tips)。这就是导致其推导过程不同的原因。
感想
一个BP算法,写了足足四张纸,其难度不言而喻,同时也给予了我爆棚的成就感(可把我牛逼坏了)!
知其然,更要知其所以然,这应该是我认为做机器学习,或者说是科研,需要具备的基本素质。
加油!