从0开始学习计算机视觉--Day06--反向传播算法
尽管解析梯度可以让我们省去巨大的计算量,但如果函数比较复杂,对这个损失函数进行微分计算会变得很困难。我们通常会用反向传播技术来递归地调用链式法则来计算向量每一个方向上的梯度。具体来说,我们将整个计算过程的输入与输入具体化,用计算图表示:
以SVM为例,如果是求梯度,在点乘处直接做偏导就行了,但如果函数并没有那么简单,由很多个不同的点乘和加法构成呢,那么函数只会在最后形成,要求偏导的话,就要用间接的关系,反相传播的意思就是,假如在第一个节点f与A有关,第二个节点A与要求的偏导B和C有关,那么在正向求完每个节点的梯度值后,就可以用f对A的偏导,再乘以A对B和C的偏导,约去分子分母的同项,从而得到该方向上的剃度了。那么也就是说,假如计算过程可以写成计算图的形式,那么计算每种损失函数的微分都可以实现,区别只是快慢。
假如我们的损失函数是,把计算过程拆解为计算图:
从这个复杂的例子我们就能理解,假如我们直接对损失函数进行求导,这个计算过程会很复杂,难度大的同时还增加计算时间,换成反向传播之后,我们只需根据输入值,一步一步地进行简单计算,然后从最后根据上一个节点传来的值计算偏导再乘到一起就行。
值得注意的是,在实际应用的时候,我们并不一定要拆解成每一步,我们可以将其中一部分当成一个整体,类似于指代的过程,这样我们就可以先通过公式计算完外部的整体求导,再对内部进行反向传播的运算。
学习来自斯坦福教程:Stanford University CS231n: Deep Learning for Computer Vision