A Question?
我们用之前的梯度下降去找最佳的θ显然在神经网络里很麻烦,参数太多了,为了更有效率的计算梯度,我们使用反向传播。
下面是链式法则,高数下册的东西:
Backpropagation
我们先看三角型框住的部分:
如下图,损失函数对w求偏导,可以根据链式法则换成下述形式,z对w求偏导被称为正向传递,损失函数对z求偏导被称为反向传递
先来看看正向传递,我们发现,z对权重w求偏导,结果就是input。
下面是个例子,应该很容易看懂吧?z对w求偏导的值就是它的input。
现在我们来计算损失函数对激活函数的偏导。我们设a=σ(z),那么损失函数l对z求偏导,可根据链式法则转化成下述模样。而a对z求偏导我们在之前的博客中算过,所以是能算的。
这时我们要求损失函数l对a的偏导,那么如下图所示,回顾本博客第二章图片的第二种链式法则,我们可以得到如下结果:因为z’=aw3+…,所以z’对a求偏导就是w3,以此类推。
经过上述推理,损失函数对z求偏导就变成了如下形式:这时还有两个未知的量,就是上图那两个红色问号。
σ‘(z)是一个常量,因为z在正向传递时已经确定。这时看下图,我们只要知道L对z’求偏导和L对z’‘求偏导的值,就可以得到L对z求偏导。
假设该完整的神经网络就像下图一样粉色神经元就是output layer,L对z’求偏导和L对z’'求偏导可很容易得出。
如果粉色神经元不是output layer,我们接着往下看:
下图描绘了整个反向传播过程,我们从output layer往前算。
看下图,从output layer往反向进行传播,就可以得出最终的L对z的偏导。
然后将Forward pass与Backward pass相乘,就得到最终的L对w求偏导。