Backpropagation算法简称BP,是用来训练神经网络的常用算法。简单来说,forward propagation的时候算得结果,跟ground truth比较,然后back propagation时调整weight。网上随便搜搜,讲述BP原理的文章很多。本文主要讲述如何在BP时求导算weight,敝人刚刚手推了一遍,就顺便做了笔记。
先看看forward和back propagation的过程如下:

上图来自gyfcat.com
然后手画个图,三层网络,分别是x,h,y。其中activation函数用sigmoid,E用最小二乘法。

sigmoid有很好的数学特性,求导也方便,过程如下,先记下结论,下面的推导会用到。

E对y求导

E对u求导,使用chain rule如下:

w' 的求导如下,还是chain rule,用到上面的求导结果,比如sigmoid

迭代的过程就是update weight,下图":="表示赋值,就用上面的求导结果,h到y之间的w'就这样算完了。

同理,算x到h到y的过程如下


完毕
发明BP算法的牛人是谁呢?最后插播一下历史(来自wikipedia)
Vapnik引用(Bryson, A.E.; W.F. Denham; S.E. Dreyfus. Optimal programming problems with inequality constraints. I: Necessary conditions for extremal solutions. AIAA J. 1, 11 (1963) 2544-2550)在他的书《支持向量机》中首次发表反向传播算法。在1969年Arthur E. Bryson和何毓琦将其描述为多级动态系统优化方法。[5][6] 直到1974年以后在神经网络的背景下应用,并由Paul Werbos[7]、David E. Rumelhart、杰弗里·辛顿和Ronald J. Williams[1][8]的著作,它才获得认可,并引发了一场人工神经网络的研究领域的“文艺复兴”。在21世纪初人们对其失去兴趣,但在2010年后又拥有了兴趣,如今可以通过GPU等大型现代运算器件用于训练更大的网络。例如在2013年,顶级语音识别器现在使用反向传播算法训练神经网络。




