我说神经网络的计算是按正向传递或前向传播步骤组织的,我们计算神经网络的输出,然后是反向传递或反向传播步骤,我们用于计算梯度或计算导数。计算图解释了为什么它以这种方式组织。我们将通过一个例子说明计算图(比对数概率回归或完整的神经网络更简单的例子)。
假设我们正在尝试计算一个函数
,我们令
,
,
,并在计算图中绘制它们如下。
当有一些特殊的输出变量(例如在这种情况下为
)你想要优化时,计算图就派上用场了。在对数概率回归的情况下,
当然是我们试图最小化的成本函数。我们在这个小例子中看到的是,通过从左到右的传递,你可以计算出
的值。
如果我们将 的数值稍微改变一下, 的值会如何变化?在这里,我们将 增加了0.001。最终的结果是 增加了0.003。所以 。因为 的增加是 的增加的3倍。
现在让我们看另一个例子。 ,换句话说,如果我们改变a的值,那么这对J的值有何影响?
在代码中,当你在你编写的代码中计算这个东西时,我们只是使用变量名dvar来表示 。
从这个例子来看,利用计算图计算导数的关键点是,当计算微分时,最有效的方法是按照反向进行从右到左的计算。特别是,我们首先计算 。然后,这对于计算关于 和 是有用的。再往下传播,这些对于计算关于 和 也是有用的。