计算图的导数计算 (Derivatives with a Computation Graph)
在上一个视频中,我们看了一个例子使用流程计算图来计算函数 。现在我们用简单的例子说明如何用计算图计算出函数
的导数。
这是一个流程图:
比如我想计算 对于
的导数,即把
改变一点点,
的值将会如何变化?此处
,假设
提高到
,
就从33提高到33.003。
用反向传播的术语来解释,如果你想要计算最终输出变量对于的导数(比如你很关心的某这个变量),那么我们就做完了一步反向传播,在这个流程图中是一个反向步骤(图中第一条从右到左条红线)。
下面看这个例子 :变量,我们让它增加到5.001,那么对
的影响从11变成11.001,对
影响从33变成33.003。所以我们看到如果
增加0.001,
会增加0.003,所以
对
的导数=3。那么a对于v的影响呢?其实就是一个简单的复合函数求导(链式求导法则)如下图:
下面这张小图就示了如何计算,通过算出
。所以这是另一步反向传播计算(图中第二条从右到左条红线)。
现在我想介绍一个新的符号约定,当你编程实现反向传播时,通常会有一个最终输出值是你要关心的,你真正想要关心或者说优化的就是流程图里最后一个符号(比如上例的 J )。所以有很多尝试计算输出变量的导数,所以输出变量对某个变量的导数,我们就用命名。
在程序中给中间变量(a,b,c,u,v等)取什么名?你可以做的一件事是,在python中,你可以写一个很长的变量名,比如,但这个变量名有点长,我们就用变量名 dvar 来表示
,反正最后都是对 dJ 求导,对这个最终输出变量求导。
同理,如下图(第三条红线,另一条反向传播)
所以这个视频的要点是,对于上述例子,当计算所有这些导数时,最有效率的办法是从右到左计算,跟着这个红色箭头走(其实就是高数的链式求导)。