Backpropagation
Backpropagation(反向传播),就是告诉我们用gradient descent来train一个neural network的时候该怎么做,它只是求微分的一种方法,而不是一种新的算法
Gradient Descent
gradient descent的使用方法,跟前面讲到的linear Regression或者是Logistic Regression是一模一样的,唯一的区别就在于当它用在neural network的时候,network parameters
所以现在最大的困难是,如何有效地把这个近百万维的vector给计算出来,这就是Backpropagation要做的事情,所以Backpropagation并不是一个和gradient descent不同的training的方法,它就是gradient descent,它只是一个比较有效率的算法,让你在计算这个gradient的vector的时候更有效率
Chain Rule
Backpropagation里面并没有什么高深的数学,你唯一需要记得的就只有Chain Rule(链式法则)
对整个neural network,我们定义了一个loss function:
我们把training data里任意一个样本点
然后summation over所有training data的cross entropy
这个表达式告诉我们,只需要考虑如何计算对某一笔data的
我们先考虑某一个neuron,先拿出上图中被红色三角形圈住的neuron,假设只有两个input
现在的问题是这样:
计算前面这一项
Forward pass
先考虑
它的规律是这样的:==求
- 比如input layer作为neuron的输入时,
前面连接的是 ,所以微分值就是 ; 前面连接的是 ,所以微分值就是 - 比如hidden layer作为neuron的输入时,那该neuron的input就是前一层neuron的output,于是
的值就是前一层的z经过activation function之后输出的值(下图中的数据是假定activation function为sigmoid function得到的)
Backward pass
再考虑
公式推导
我们的z通过activation function得到a,这个neuron的output是
这里的
这里的
另一个观点
这个式子还是蛮简单的,然后,我们可以从另外一个观点来看待这个式子
你可以想象说,现在有另外一个neuron,它不在我们原来的network里面,在下图中它被画成三角形,这个neuron的input就是
这张图描述了一个新的“neuron”,它的含义跟图下方的表达式是一模一样的,作这张图的目的是为了方便理解
值得注意的是,这里的
所以这个neuron其实跟我们之前看到的sigmoid function是不一样的,它并不是把input通过一个non-linear进行转换,而是直接把input乘上一个constant
两种情况
ok,现在我们最后需要解决的问题是,怎么计算
case 1:Output Layer
假设蓝色的这个neuron已经是hidden layer的最后一层了,也就是说连接在
其中
而
这个时候,你就已经可以把
Case 2:Not Output Layer
假设现在红色的neuron并不是整个network的output,那
根据之前的推导证明类比,如果知道
知道
你可能会想说,这个方法听起来挺让人崩溃的,每次要算一个微分的值,都要一路往后走,一直走到network的output,如果写成表达式的话,一层一层往后展开,感觉会是一个很可怕的式子,但是!实际上并不是这个样子做的
你只要换一个方向,从output layer的
假设现在有6个neuron,每一个neuron的activation function的input分别是
但是,如果你反过来先去计算
这里每一个op-amp的放大系数就是
在做Backward pass的时候,实际上的做法就是建另外一个neural network,本来正向neural network里面的activation function都是sigmoid function,而现在计算Backward pass的时候,就是建一个反向的neural network,它的activation function就是一个运算放大器op-amp,每一个反向neuron的input是loss
注:如果是正向做Backward pass的话,实际上每次计算一个
Summary
最后,我们来总结一下Backpropagation是怎么做的
Forward pass,每个neuron的activation function的output,就是它所连接的weight的
Backward pass,建一个与原来方向相反的neural network,它的三角形neuron的output就是
把通过forward pass得到的