本周基本没时间看论文了,一直在搬砖。。。
不过这周倒是看了一波hinton对BP算法的反思的各种解读。这自是引起了很多的关注,但不可否认BP算法目前为止真的很work,所以想好好回顾下BP算法。
来来来,接下来我们就来推导推导:
- 首先来看看最后一个hidden layer到输出层的梯度计算:
- 中间层的梯度计算:
- 链接输出的第一个hidden layer的梯度计算:
上述方程式中由最后一层的权重更新梯度最简单,而前面层级的更新梯度则需要向前推导,这一推导的过程借用链式法则可以很容易的求解了。
但我们知道,在CNN中,本层的输入是上一层的多个输入,一如下图所示:
可以看到,梯度计算依然是反向传播,无论是单输入还是多输入。
接下来我们来看看多个输出的情况。
你看吧,手推公式真的很爽啊~~~~可以看到,具有多个输出的神经元权重更新依赖于所有可能路径上的导数。
在反向传播的过程中,最方便的是计算神经网络输出端的误差,我们会把这一误差反向传播并且沿着反向路径加权。当我们传播到了一个神经元,可以将经权重反向传播过来的误差乘以神经元的导数,然后就可以同样的方式反向传播误差,一直追溯到输入端,这就是BP的思想了。
手推有利于理解BP,但随着中间层的加深,需要有更简洁的方式来简化推导,于是就出现了误差信号的定义了:
这么推导下来,可以看到BP算法的强大了吧~~~
最后,在知乎上看到一篇作为入行数年的专业科研工作者,你每周看几篇 paper 的文章,觉得值得学习哈。