P2-4.6 复合函数与链式法则¶
Section ID:
P2-4.6Version:v2026.09.15
复合函数(composite function)把一个函数的输出作为下一个函数的输入。当各阶段都可微时,链式法则(chain rule)通过将各阶段的变化率相乘,求出整体变化率。
两阶段计算与复合函数¶
先由 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。因为一步产生的变化量会成为下一步的输入变化量,所以各步的变化率要相乘。 第一步是线性的,变化量关系精确成立;下一步的平方运算采用当前位置附近的近似。
将链式法则应用于上述计算,得到:
第一阶段 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。
当 a=2、t=5、当前参数 w=1、b=1 时,预测为3,损失为4。保持输入和目标不变,求只改变 w 或只改变 b 时的损失变化率。
| 计算 | 结果 | 含义 |
|---|---|---|
∂L/∂ŷ=2(ŷ−t) | −4 | 预测略微增大时,当前损失减小 |
∂ŷ/∂w=a | 2 | 权重变化影响预测的比率 |
∂ŷ/∂b=1 | 1 | 偏置变化影响预测的比率 |
损失对预测的导数 −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。 - 能区分用瞬时变化率近似的变化量与有限区间的实际变化量。
- 能区分链式法则与反向传播的作用。
- 能说明反向传播计算参数变化对损失的影响。
来源与参考资料¶
- OpenStax, Calculus Volume 1, 3.6 The Chain Rule。用于确认复合函数求导、链式法则及其在两个或更多阶段中的应用。确认日期: 2026-09-15。
-
本 Part 内部链接:P2-4.3 导数与梯度、P2-4.5 梯度补充:从高中微分到多变量微分。
-
PyTorch, Automatic Differentiation with torch.autograd. 前向计算图与反向传播中的链式法则应用。确认日期:2026-09-15。