梯度下降:Backpropagation

参考依据

李宏毅《深度学习》
https://www.bilibili.com/video/BV1JE411g7XF?p=13

Chain Rule

简单的链式法则,是反向传播唯一用到的数学基础:
梯度下降:Backpropagation

Backpropagation

要计算一个节点的梯度(损失函数对w求偏导:∂C/∂w),可以利用chain rule将式子进行转换(∂C/∂w = ∂C/∂z * ∂z/∂w):其中计算∂z/∂w的过程称之为Forward pass;而计算∂C/∂z的过程称之为Backward pass.
梯度下降:Backpropagation

Forward Pass

对取Forward Pass(∂z/∂w)这部分:求∂z/∂w其实就是看w前面连接的input是什么(线性函数,微分后为对应的x),因此只要计算出网络里每个神经元的output(前一个的output就是后一个的input),就可以知道任意的∂z/∂w。
梯度下降:Backpropagation
为什么叫Forward pass呢,因为需要计算出上一层神经的输出,才可以继续计算下一层的∂z/∂w,这是在数据流向前传递的过程中完成的。
梯度下降:Backpropagation

Backward Pass

对于剩下的Backward Pass部分(∂C/∂z),根据链式法则,我们可以转换为以下形式(我们假设∂C/∂z,∂C/∂z’‘已知):
梯度下降:Backpropagation
最后总结为以下形式:
梯度下降:Backpropagation
那么,关于∂C/∂z,∂C/∂z’'怎么求解呢?

case 1

如果z’和z’'为输出层:

梯度下降:Backpropagation

case 2

如果为中间层,那么从后往前推,如下图所示,要计算∂C/∂z1,根据链式法则需要∂C/∂z3,∂C/∂z4的值,根据链式法则其实需要的是∂C/∂z5,∂C/∂z6,而它们可以case1求得。所以整个过程就是一个从后往前的递归:
梯度下降:Backpropagation

总结

所以对于神经网络来说,整个过程可以分为Forward Pass和Backward Pass,每个过程计算所需的一部分偏导,然后将它们的结果相乘即为参数的梯度:
梯度下降:Backpropagation