跳转至

P2-4.6 复合函数与链式法则

Section ID: P2-4.6 Version: v2026.09.15

复合函数(composite function)把一个函数的输出作为下一个函数的输入。当各阶段都可微时,链式法则(chain rule)通过将各阶段的变化率相乘,求出整体变化率。

两阶段计算与复合函数

\[ y = 2x + 1,\qquad z = y^2 \]

先由 x 计算中间值 y,再将 y 平方得到 z。合成一个式子就是 z = (2x + 1)²。

阶段 公式 x = 1 时
第一次计算 y = 2x + 1 y = 3
下一次计算 z = y² z = 9
整体计算 z = (2x + 1)² z = 9

一般而言,z = f(g(x)) 表示先计算 g(x),再把结果输入 f。神经网络中,一层的输出也会成为下一层的输入。

flowchart LR
  X["x=1"]
  Y["y=2x+1=3"]
  Z["z=y²=9"]
  X --> Y --> Z

各阶段变化率的乘积

在 x=1 处,y=3。输入发生微小变化 Δx,第一步产生 Δy=2Δx。下一步满足 Δz≈6Δy,代入中间变化量便得到 Δz≈6×2Δx=12Δx。因为一步产生的变化量会成为下一步的输入变化量,所以各步的变化率要相乘。 第一步是线性的,变化量关系精确成立;下一步的平方运算采用当前位置附近的近似。

将链式法则应用于上述计算,得到:

\[ \frac{dz}{dx} = \frac{dz}{dy}\cdot\frac{dy}{dx} \]

第一阶段 y = 2x + 1 的变化率为 dy/dx = 2。下一阶段 z = y² 的变化率为 dz/dy = 2y。整体变化率因此为 2y × 2 = 4y,代入 y = 2x + 1,得到 8x + 4。

x = 1 时,y = 3,因此得到以下数值。

变化区间 该点的变化率
x → y 2
y → z 6
x → z 6 × 2 = 12

当 x 发生很小的变化时,变化在第一阶段约放大两倍,在下一阶段约放大六倍,因此最终变化量约为输入变化量的十二倍。

外层变化率 2y 应代入根据输入算出的中间值 y=3,而不是原始输入 x=1。如果算成 2×1=2,就使用了错误位置的变化率。一般形式是 f′(g(x))×g′(x),应与 f′(x)×g′(x) 区分。

用小幅输入变化验证

把 x 从 1 改为 1.01,中间值 y 从 3 变为 3.02,最终值 z 从 9 变为 9.1204。

  • 用链式法则近似的变化量:12 × 0.01 = 0.12
  • 实际变化量:9.1204 − 9 = 0.1204

导数描述一个点的瞬时变化率,因此近似值可能与有限区间内的变化量略有差异。把输入增量减小到 0.001,实际变化量为 0.012004,用导数得到的近似值为 0.012。

从输入的导数到参数的导数

前面的 dz/dx 衡量输入变化时,最终输出的变化有多敏感。学习中则固定数据输入,改变权重、偏置等参数。考虑一个小模型,输入为 a,预测为 ŷ,目标为 t。

\[ \hat y=wa+b,\qquad L=(\hat y-t)^2 \]

当 a=2、t=5、当前参数 w=1、b=1 时,预测为3,损失为4。保持输入和目标不变,求只改变 w 或只改变 b 时的损失变化率。

计算 结果 含义
∂L/∂ŷ=2(ŷ−t) −4 预测略微增大时,当前损失减小
∂ŷ/∂w=a 2 权重变化影响预测的比率
∂ŷ/∂b=1 1 偏置变化影响预测的比率

损失对预测的导数 −4 在两个参数的计算中共用。将它分别乘以预测对各参数的导数。

\[ \frac{\partial L}{\partial w} =\frac{\partial L}{\partial\hat y}\frac{\partial\hat y}{\partial w} =(-4)\times2=-8,\qquad \frac{\partial L}{\partial b} =\frac{\partial L}{\partial\hat y}\frac{\partial\hat y}{\partial b} =(-4)\times1=-4 \]

因此,按 [w,b] 顺序排列的梯度是 [-8,-4]。只把权重增加0.01,预测变为3.02,损失变为3.9204。实际损失变化 −0.0796 接近导数近似 −8×0.01=−0.08。

前向数值与反向导数

前向传播根据输入和当前参数计算预测与损失。反向传播沿计算过程从后向前求最终损失的导数,并与各运算的导数结合。本例复用前向计算所得的预测3,求出 ∂L/∂ŷ=−4,再把它用于前面各参数的导数计算。

flowchart TD
  A["输入与当前参数<br/>a=2, w=1, b=1"]
  B["预测<br/>ŷ=wa+b=3"]
  C["损失<br/>L=(ŷ−t)²=4, t=5<br/>∂L/∂L=1"]
  A --> B
  B --> C
  C -. "∂L/∂ŷ = −4" .-> B
  B -. "∂L/∂w = −8<br/>∂L/∂b = −4" .-> A
  linkStyle 0,1 stroke:#2563eb,stroke-width:2px
  linkStyle 2,3 stroke:#b91c1c,stroke-width:2px

蓝色流程表示数值计算顺序,虚线流程表示导数计算顺序。反向传播并不是把预测还原成输入,也不是立即修改参数。它从最终损失对自身的导数 ∂L/∂L=1 开始,向前面的计算求所需变化率。

链式法则是复合函数的求导规则,反向传播则沿计算图反向遍历并复用中间结果。当多条路径通向同一个参数时,需要把各路径的贡献相加。这个小例子展示沿每条路径相乘的过程。优化器负责利用所得梯度实际更新参数。

练习:重新计算中间值

第一,对 y=2x+1、z=y²,求 x=0 时的 y、z 和 dz/dx。第二,把第一个式子改为 y=3x+1,求 x=1 时的整体变化率。第三,在上述学习示例中只把偏置增加0.01,比较实际损失变化与导数近似。

计算与解释

第一题为 y=1、z=1、dz/dx=(2×1)×2=4。第二题的中间值是 y=4,所以整体变化率为 (2×4)×3=24。第三题的预测变为3.01,损失为 (-1.99)²=3.9601,实际变化为 −0.0399,导数近似为 −4×0.01=−0.04。

检查清单

  • 能把复合函数解释为一个函数的输出成为下一个函数输入的结构。
  • 在 y = 2x + 1、z = y² 中,能算出 x = 1 时整体变化率为 12。
  • 能区分用瞬时变化率近似的变化量与有限区间的实际变化量。
  • 能区分链式法则与反向传播的作用。
  • 能说明反向传播计算参数变化对损失的影响。

来源与参考资料