计算图与链式法则互动推演

复杂表达式不是一次算完的黑盒。把它拆成乘法、加法与缩放三个局部操作,前向时逐站计算数值,反向时让梯度沿原路返回。

J = 3(a + bc)

从局部运算到完整结果

J 等于 3 乘 a 加 b 乘 c 的计算图 a 直接流向加法节点,b 与 c 先进入乘法节点生成 u,再与 a 相加生成 v,最后乘 3 得到 J。 输入 a2.0此步 输入 b3.0 输入 c4.0 × 乘法u = 12.0此步 + 加法v = 14.0此步 × 3J = 42.0此步 损失42.0 实线:数值前向流动  橙色虚线:梯度反向返回
1
读入三个输入

前向计算从叶子节点开始:a=2.0,b=3.0,c=4.0。

反向传播得到的三个偏导

反向传播不是背一条“大公式”,而是在每条边上重复同一件事:传入该节点的上游梯度 × 该节点对输入的局部导数

dJ/da = 3加法对 a 的局部导数是 1,所以 3 × 1。
dJ/db = 3c = 12.0乘法对 b 的局部导数是 c=4.0,所以 3 × 4.0。
dJ/dc = 3b = 9.0乘法对 c 的局部导数是 b=3.0,所以 3 × 3.0。
上游梯度∂J/∂v = 3
×
局部导数∂v/∂u = 1
=
传给 u∂J/∂u = 3

前向在保存什么

前向过程不仅计算 J,还保存 u=bc 和 v=a+u。反向计算局部导数时会用到这些中间关系,因此深度学习框架会记录运算及其依赖。

自检问题

  • 若 c=0,dJ/db 为多少?答案是 0,因为 b 的变化会被 c“截断”。
  • 若 b 为负,dJ/dc 也为负;梯度的符号同样来自局部导数。