Gradient Descent

做法就是对于loss function做微分, 然后更新$\theta$, 但是问题是如何有效的处理上百万的参数?

因此反向传播做的事情就是让梯度计算更加有效率。

chain Rule

也就是说dz会被dx和dy影响。

对于识别的问题,loss是cross entropy,也就是交叉熵。对于sumCrossEntropy做微分的话就是可以写成这个式子。

通过chain rule可以得到$\frac{\partial C}{\partial Z}$是可以写成$\frac{\partial z}{\partial w}\frac{\partial C}{\partial z}$的
那么foward pass就代表$\frac{\partial z}{\partial w}$的过程,backward pass代表$\frac{\partial C}{\partial z}$的过程

那么这个计算很简单, 就是根据w之前接的input值就是偏微分的值。

Forward pass

知道微分的值跟input有关后,那么计算就很简单,理解也很容易,对于第一层的值就是根据inputx的值,就是-1

第二层开始就是根据第一层算出来的output的值,也就是代入激活函数后的值,是0.12,这个0.12就是下一层的input,因此就是0.12。以此类推同样。

Backward pass

z=sigmoid(a),求导应该是这样的


sigmod的导数就是$\frac{\partial a}{\partial z}$,那么剩下的就是求$\frac{\partial C}{\partial a}$

这个就可以写成下面的式子:

那么对于右边求的过程,可以简化后写成以下这样

因为$\sigma ^{‘}(z)$是一个常数,也就是在前向传播里已经被确定好了值。

case1:output layer

对于output layer,y1,y2值确定,loss function确定,那么以上的求导都可以做出来

case2:Not output layer

因为我们可以得到output layer那层的所有微分的值,所以可以不断反推到前一层,再反推再前一层,直到第一层,但是这个计算是非常有效率的。

这一步骤很难用语言解释,但是理论就跟之前前向传播一样,input就是导数的值,因此反向传播的input就是$\sigma ^{‘}(z)$。因此计算是没有那么复杂的。