对BP算法的理解

  2018-11-8 


损失函数$J(W_{11},W_{12},\cdots,W_{ij},\cdots,W{mn})$

要计算梯度$\nabla J=\frac{\partial J}{\partial W_{11}}e_{11}+\cdots+\frac{\partial J}{\partial W_{mn}}e_{mn} $,$e_{ij}$为单位正交向量($J$对每个参数求偏导)

那么使用链式法则,我们可以画出计算图

①先标记出所有中间结点

②对每一个结点,写出上一层直连结点(最顶层就是$J$)对该节点求得的偏导式(偏的是本结点中间变量),其他变量都视为常数

③根据计算图,使用链式法则(两个结点之间,偏导式同路径相乘,所有路径相加)

主要理解清,某一个中间结点对另一个邻层中间结点求导,是对中间变量求导,只看局部,其它的变量都视为常数,都先只计算邻接层求导,再分别计算完每个偏导式之后,再运用链式法则根据全路径计算跨层求导

这样一来会有很多的重复计算(重复路径)。

为了解决这个问题,BP的做法是自顶向下,逐层反向求导,累计计算

也就是说从最高层$J$开始按层计算出该层的偏导式值,然后再把这个值(是个含变量的表达式,但是对于这个中间层来说是个常数)发给这个结点下属路径下的每个结点(让他们乘上这个上层来的偏导式),然后再计算下一层的偏导式,如此迭代到输入层

注意都是先推导式子,最后再代入值计算,比如输入以及真实label都是最后推导完式子后计算的时候的一个常数值


且听风吟