机器学习4 -- 反向传播(back propagation)

1 先从梯度下降说起

深度学习中,我们需要沿着梯度下降的方向,更新参数。如下
在这里插入图片描述
其中学习率为超参数,故重点即为求解Loss函数对参数θ的梯度,从而实现参数更新。梯度表达如下
在这里插入图片描述
由于有多个样本输出值,故叠加所有loss函数对参数w的偏导,即可得到最终的梯度。

2 forward和backward

在这里插入图片描述
如上图所示,假设输入两个feature x1和x2,前向计算得到中间隐层z,然后再经过一系列计算得到最终输出y1和y2。故∂l/∂w 可以拆分为 ∂z / ∂w * ∂l / ∂z 两项。其中∂z / ∂w通过前向forward即可得到,故称为forward pass。而∂l / ∂z则比较麻烦,需要通过反向计算得到,称为backward pass。

forward pass

先来看forward pass。由公式
在这里插入图片描述
可知,∂z ∕ ∂w1 = x1, ∂z ∕ ∂w2 = x2,故只需要知道每个神经元的输入,我们就可以得到forward pass部分的偏导了。

backward pass

再来看backward pass,这部分比较麻烦。
在这里插入图片描述
如上图所示,我们假设经过sigmoid激活后的输出为a,则有 ∂l / ∂z = ∂a / ∂z * ∂l / ∂a,其中∂a / ∂z即为sigmoid函数的导数,如上图右下角所示。故关键在于求解∂l / ∂a。我们依次向后来计算在这里插入图片描述
如上图所示,隐层z经过sigmoid激活后得到输出a,然后又经过两个神经元,得到z′和z′′。然后他们又继续计算,经过一系列的隐层,最终得到输出y。故我们可以得到
在这里插入图片描述
上式是不是很像神经元的计算。将∂l / ∂z′ 和 ∂l / ∂z′′ 看作神经元的两个输入feature,我们可以重构得到一个反向传播的network,如下
在这里插入图片描述
因此backward计算∂l / ∂z,可以通过反向传播来计算。终于搞懂了为啥叫back propagation了。

3 例子

在这里插入图片描述
如上图所示,两个输入feature,经过三层网络计算得到两个输出feature。计算∂l/∂z时,

  1. 我们从最后的神经元开始计算,先计算得到∂l/(∂z_5)和∂l/(∂z_6)。
  2. 然后再反向通过两个w,并经过一层σ′(x)计算,得到前一个神经元的偏导∂l/(∂z_3)和∂l/(∂z_4)
  3. 同样的方法,继续反向传播,计算得到∂l/(∂z_1)和∂l/(∂z_2)

4 总结

反向传播是进行梯度计算的关键方法,梯度计算才能实现参数更新。梯度计算包括前向传播和反向传播两部分。如下图
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/u013510838/article/details/108294176