2.8 使用计算图求导数(Derivatives with a Computation Graph)

在上一个视频中,我们看了一个例子使用流程计算图来计算函数J。现在我们看看流程图的描述,看看你如何利用它计算出函数J的导数。



么影响?





现在我想介绍一个新的符号约定,当你编程实现反向传播时,通常会有一个最终输出值是你要关心的,最终的输出变量,你真正想要关心或者说优化的。在这种情况下最终的输出变量是J,就是流程图里最后一个符号,所以有很多计算尝试计算输出变量的导数,所以输出变量对某个变量的导数,我们就用dvar命名,所以在很多计算中你需要计算最终输出结果的导数,在这个例子里是J,还有各种中间变量,比如a、b、c、u、v,当你在软件里实现的时候,变量名叫什么?你可以做的一件事是,在python中,你可以写一个很长的变量名,比如dFinalOutputvar_dvar,但这个变量名有点长,我们就用dJ_dvar,但因为你一直对dJ求导,对这个最终输出变量求导。我这里要介绍一个新符号,在程序里,当你编程的时候,在代码里,我们就使用变量名dvar,来表示那个量。

好,所以在程序里是dvar表示导数,你关心的最终变量J的导数,有时最后是L,对代码中各种中间量的导数,所以代码里这个东西,你用dv表示这个值,所以dv=3,你的代码表示就是da=3。

好,所以我们通过这个流程图完成部分的后向传播算法。我们在下一张幻灯片看看这个例子剩下的部分。





我不会很详细地介绍最后一个例子,但事实上,如果你计算dJ/dc=dJ/du⋅du/dc=3×3,这个结果是9。
我不会详细说明这个例子,在最后一步,我们可以推出dc=9。

所以这个视频的要点是,对于那个例子,当计算所有这些导数时,最有效率的办法是从右到左计算,跟着这个红色箭头走。特别是当我们第一次计算对v的导数时,之后在计算对a导数就可以用到。然后对u的导数,比如说这个项和这里这个项:

可以帮助计算对b的导数,然后对c的导数。
所以这是一个计算流程图,就是正向或者说从左到右的计算来计算成本函数J,你可能需要优化的函数,然后反向从右到左计算导数。如果你不熟悉微积分或链式法则,我知道这里有些细节讲的很快,但如果你没有跟上所有细节,也不用怕。在下一个视频中,我会再过一遍。在逻辑回归的背景下过一遍,并给你介绍需要做什么才能编写代码,实现逻辑回归模型中的导数计算。