利用计算图做自动微分时,既有前向模式,也有反向模式。而神经网络中的反向传播就是自动微分的反向模式。事实上,我们还可以用“前向传播”来计算神经网络中的梯度值,但是由于效率原因这个方法并没有被采用。
我们首先考虑下面这个计算图
我们的终极目标是为了计算输出对输入的梯度,即 (注意,这里输出L是一维的,即实数,因此是梯度。而x,y,z可以是多维的向量。这个维度的差异非常关键)。y与z可以看做中间状态变量,数学上并不是必须存在的,完全可以去掉它们,直接考虑 这个函数及其梯度。但是为了自动求梯度,我们把x到L的计算过程拆分成一些基本运算(如加减乘除)的序列执行,这样相邻两层之间的梯度就只有有限几种简单的形式,从而可以结合链式法则自动计算梯度。
由于这样的拆分,我们预先就知道了相邻两层的微分(例如