back propagation算法原理简述

back propagation - 即反向传播,因为error function是关于输出层的函数,error function对隐藏层系数求偏导涉及输出层求导,所以,本质上,反向传播算法的推导,是链式求导的推导过程。所以我们先看看链式求导(复合求导)。

假设:
h = f(u) = f(w,x)
y = g(u') = g(w',h)

那么:
dy/dw' = dg/du' * du/dw'

其中,我们假设h为隐藏层,y为输出层(简化描述,假设就1个输入层、1个隐层、1个输出层)
在整个推导过程,我们的目的是求得w、w',即网络参数。

隐藏层系数:w
输出层系数:w'

假设我们采用MSE作为loss function:
E = 1/2 *sum( (label - y)^2 )

1、输出层
输出层的输入为隐藏层h输出u',对任意输出层的输入ui'进行求导:
dE/dui' = dE/dy * dy/dui' = (y-label) * dy/dui' 记为 EI'
由于y一般为sigmoid function,y为训练过程输出值(依赖隐藏层、输入层等),label为目标值

所以:
EI' = (y-label) * y * (1-y)

对任意的输出层的系数wi' 求导,复合求导,先求y的相关系数h,然后h关于wi'求导
dE/dwi' = dE/dui' * dui'/dwi' = EI' * dui'/dwi'

由于:
u' = sum(h * w')
所以:
dE/dwi' = dE/dui' * dui'/dwi' = EI' * hi

2、隐藏层
h为隐藏层的输出,参照以上流程,对任意hi求导,u'是关于h的函数,根据复合求导规则:
dE/dhi = dE/du' * du'/dhi = EI' * wi'

可以看到隐藏的求导结果依赖了输出层的求导结果,也即,体现了反向传播的内在含义。

继续对隐藏层的任意系数求导:wi
dE/dwi = dE/dhi * dhi/dui * dui/dwi = EI' * wi' * dhi/dui * xi

dhi/dui 取决于隐藏层采用什么类型的目标函数,假设还是sigmod function,则:
dE/dwi = EI' * wi' * hi * (1-hi) * xi 记为 EI

可见,隐藏层的参数更新依赖于 输出层的EI',初始化随机撒点,得到y,根据随机梯度下降算法更新wi、wi',即可求得wi、wi'系数。

参考:arXiv:1411.2738

back propagation算法原理简述