15.1_反向传播的正确顺序

15.1 反向传播的正确顺序

DeZero 的问题出在哪里呢?为了找出原因,我们来思考一下图 15-3 这个相对简单的计算图。当前的 DeZero 针对这个计算图进行计算会得出错误的导数。


图15-3 中途出现分支后,分支又连接在一起的计算图示例

我们要注意图15-3中的变量a,它是在计算过程中出现的变量。通过上一个步骤可知,对于重复使用同一变量的情况,我们需要在反向传播时加上从输出端传来的导数。因此,要想求出a的导数(式子为 ya\frac{\partial y}{\partial a} ),就要使用从a的输出端传来的两个导数。这两个导数传播出去之后,导数就可以从a向x传播了。基于以上内容,反向传播的流程如图15-4所示。


图15-4 反向传播的正确顺序

图15-4是由变量y向变量x传播导数的流程。再次强调一下,这里需要注意的是“在向变量a传播两个导数之后,从a向x传播导数”这一点。此时,从函数的角度来看,反向传播是按照D、B、C、A的顺序进行的。不过,B和

C的顺序可以调换,所以D、C、B、A的顺序也正确。在进行函数A的反向传播之前,要先完成函数B和函数C的反向传播。