计算图与链式法则互动推演
复杂表达式不是一次算完的黑盒。把它拆成乘法、加法与缩放三个局部操作,前向时逐站计算数值,反向时让梯度沿原路返回。
J = 3(a + bc)
从局部运算到完整结果
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 也为负;梯度的符号同样来自局部导数。