Lecture7 Backpropagation

Backpropagation就是如果你要用gradient descent的方法来train一个Neural Network的时候,你应该要怎么做。

Gradient Descent

现在你的Neural Network里有很多参数


image.png

随机选一个初始参数θ计算每一个Network里的参数w1 w2 w3 ...它对Loss Function的偏微分。


image.png

然后现在你就可以更新你的θ参数,重复这个步骤。
image.png

但是在Neural Network中使用gradient descent方法的时候跟我们在logistic regression中还有linear regression中是没有太大区别的,但是最大的问题就是在Network中会有非常多的参数。所以现在的困难就是你要有效的把上百万个参数计算出来,这个就是Backpropagation做的事情。只是一个有效率计算参数的演算法。

Chain Rule

链式法则就是Backpropagation中最重要的。


image.png

我们回到Neural Network的training。我们定义一个Loss Function,也就是total loss是所有training data的Loss值的和,对w作微分后得到如下。


image.png

所以我们现在把注意力放在最后一部分。


image.png

该怎么计算它呢?拿一个Neuron举例。

image.png

image.png

不难看出,∂z/∂w的值就是input的xi的值
image.png

这个步骤就叫做forward pass,显然这个很easy。

接下来怎么算∂C/∂z呢?
假设这个neuron的function是sigmoid。我们把z写成a = σ(z)

image.png

∂a/∂z其实就是sigmoid对z的微分。所以我们需要计算的就只剩两项了,∂C/∂z'和∂C/∂z''
image.png

现在我们分两种情况来分析。

第一种:红色layer已经是output layer。

image.png

因为y=f(z'),所以你只需要知道neuron的function,∂y1/∂z‘就很容易算出来。
∂C/∂y1你只需要知道你怎么定义cost function的,例如cross entropy 或者square error等,那么也很容易求出来。所以我们就能求出结果∂C/∂w的结果了!

第二种:红色layer不是output layer。

image.png

其实由第一种情况我们已经推导出∂C/∂z的公式,所以求上图∂C/∂z'用的方法是一模一样的,因为不是最后一层output layer,所以我们不知道∂C/∂Za和∂C/∂Zb,但是只要我们换个方向来想,从最后一层往前算,就会发现运算量其实是跟forward pass一模一样的。
image.png

image.png

我们只需要先计算∂C/∂z5和∂C/∂z6,就容易计算出∂C/∂z3和∂C/∂z4,一直往前进行下去。(这个步骤就叫做backward pass)

image.png

你可能感兴趣的:(Lecture7 Backpropagation)