P2-4.6 复合函数(composite function)与链式法则(chain rule)¶
Section ID:
P2-4.6Version:v2026.07.20
读完导数(derivative)、梯度(gradient)、梯度下降(gradient descent)之后,还会留下这样一句话:backpropagation uses the chain rule。如果这里不知道链式法则(chain rule),反向传播就很容易看起来像一句需要背下来的话,而不是一种计算结构。
核心直觉是:当一个函数由多个阶段连接起来时,前面阶段的变化会穿过后面的阶段,一直传到最终结果。 只有先抓住这个直觉,才能读懂损失(loss)是怎样和每一层、每一个参数连接起来的。需要快速回看术语时,也可以一起查看概念词汇表。
核心判断标准:复合函数(composite function)与链式法则(chain rule)¶
- 能把复合函数(composite function)解释成
前一个输出进入下一个函数作为输入的结构。 - 能把链式法则(chain rule)说成
把各阶段变化率连起来相乘读取的规则。 - 能建立这样的直觉:前面的值一旦变化,后面的结果也会通过多个阶段一起变化。
- 能在入门层面说明为什么反向传播(backpropagation)需要链式法则。
先抓住的一个场景¶
这一节最先要抓住的,是一个按 x -> y -> z 流动的两阶段计算。
| 阶段 | 表达式 | 现在要读的问题 |
|---|---|---|
| 第 1 阶段 | y = 2x + 1 | 如果 x 变一点,y 会变多少? |
| 第 2 阶段 | z = y^2 | 变化后的 y 会让 z 再多变多少? |
| 整体 | z = (2x + 1)^2 | x 的变化是怎样一路传到最终结果 z 的? |
所以,链式法则并不是要多背一个新符号,而是在读 前段变化怎样通过中间阶段传到后段结果 这条路径。
三个基准¶
| 基准 | 为什么重要 | 本节所需的理解水平 |
|---|---|---|
把复合函数读成 计算管线 | 因为它会自然连到神经网络层(layer)的说明。 | 理解函数会经过多个阶段。 |
链式法则是 变化传递规则 | 因为它让我们能读懂前段变化怎样到达最终输出。 | 理解各阶段的变化率会被连接起来。 |
| 反向传播不是链式法则本身,而是使用它的过程 | 因为这样就不会把概念和算法流程混在一起。 | 只要清楚地区分两者角色就够了。 |
复合函数是把多个函数连成一行的结构¶
例如:
这样写时,我们会读成:先计算 g(x),然后把这个结果再送进 f。
所以它的计算顺序是:
x进入。g做出一个中间结果。f接收这个中间结果,并生成最终结果z。
这种直觉在看神经网络时会原样再次出现,因为一层的输出会成为下一层的输入。
把它画成下面这样的流程会更直观。
flowchart LR
x["输入 x"]
g["中间函数 g(x) = 2x + 1"]
f["外层函数 f(y) = y^2"]
z["结果 z = (2x + 1)^2"]
x --> g --> f --> z
如果写得更像日常计算:
意思就是:先做出一个中间分数 2x + 1,再把这个值平方成最终结果。只要计算阶段这样接了起来,前面的微小变化就会先改变中间分数,然后再把这份变化继续传给最终结果。
链式法则是把前面的变化往后传的规则¶
在复合函数里,前面阶段只要稍微变化,这份变化就会经过中间阶段并影响最终输出。链式法则(chain rule)就是读这种传递规则的方法。
对初学者来说,最重要的一句话是:
链式法则是在多阶段函数里,沿着各阶段变化率去读“前段变化最终能传到输出多少”的规则。
只看一个很短的公式:
这里最重要的不是符号本身,而是那种结构:前面的变化会经过中间值,再被传到后面的结果。
如果继续用同一个例子,就会更直观。
只要 x 变化,y 会先变化,而变化后的 y 会再继续改变 z。想读懂 x 对最终结果 z 的影响,就必须把 x -> y 的变化与 y -> z 的变化分开看,然后再把它们接起来。这就是链式法则的核心。
例如当 x = 1 时:
y = 2(1) + 1 = 3z = 3^2 = 9
如果这时把 x 稍微再变大一点,y 会先变大,而变大的 y 被平方之后,z 会更明显地变化。也就是说,前段变化的效果会在后面的阶段里累积起来。
把这个场景重新写成表:
| 问题 | 读法 |
|---|---|
x -> y 有多敏感? | dy/dx |
y -> z 有多敏感? | dz/dy |
整个 x -> z 路径有多敏感? | 把前两个变化连起来读 |
为什么只做一步求导还不够¶
如果函数只是 z = x^2,那么 x 会直接改变 z。但在复合函数里,x 不会直接改动 z,它是通过中间阶段一步一步地影响 z。
所以在复合函数里,我们必须把下面两个问题分开看。
- 前面阶段的值会把中间值改变多少?
- 这个中间值又会把最终结果改变多少?
链式法则就是把这两个问题接成一个式子的规则。读者在这里真正要抓住的,不是“比微分更难的额外规则”,而是“沿着计算阶段读取影响路径的方法”。
把这个差别再写得更短一些:
| 函数形式 | 求导时怎样读 |
|---|---|
z = x^2 | x 直接改变 z |
z = (2x + 1)^2 | x 先改变中间值 y,那个 y 再继续改变 z |
为什么反向传播说明里一定会需要链式法则¶
反向传播(backpropagation)是一种过程:它从神经网络最后算出的损失(loss)开始,倒着去算每一层、每个参数到底对这个损失影响了多少。而实现这件事所需要的最小规则,就是链式法则。
也就是说:
- 链式法则是“变化如何传递”的数学规则。
- 反向传播则是利用这条规则,高效地算出许多参数梯度的过程。
如果没有这个区分,就很容易把它们读成 chain rule = backprop。
在进入后面的 Part 之前,可以先把最小的连接记成下面这样。
| 后面会看到的表达 | 现在先这样读 |
|---|---|
loss -> layer -> parameter | 损失的变化会穿过层,一路传到参数 |
| backpropagation | 从后往前沿着这条传递路径计算的过程 |
| gradient | 被传递过来的变化率结果 |
这种结构后面还会在哪里出现¶
| 后面再次遇到的场景 | 这里先留下的直觉 |
|---|---|
| Part 5 的反向传播 | 如果没有 chain rule,就很难读懂“损失从后往前被传回去”这句话。 |
| Part 5 的多层神经网络 | 层越深,也就意味着复合函数结构越长。 |
| optimizer 与 gradient 计算 | gradient 不该被看成突然出现的数字,而应该被看成传递过来的变化率结果。 |
这一节真正应该留下的一句核心话很简单:复合函数是把多个计算阶段打包成一行的结构,而链式法则是沿着这些阶段传递变化率的规则。 只要这句话稳住,后面再看到 backpropagation 时,每一层就不会再像完全分开的独立计算。
检查清单¶
- 能把复合函数解释成
阶段相连的函数吗? - 在
y = 2x + 1、z = y^2里,能说明为什么必须把x -> y和y -> z分开看吗? - 能把链式法则解释成
把各阶段变化率接起来读的规则吗? - 能说明反向传播和链式法则在角色上有什么不同吗?
- 能用“损失的变化穿过多个阶段传回去”的图景来解释反向传播吗?
来源与参考资料¶
- OpenStax, Calculus Volume 1, 3.6 The Chain Rule。可以确认复合函数的求导、链式法则,以及两层以上复合函数中的链式法则应用。确认日期: 2026-07-20.
- Google for Developers,
Machine Learning Glossary. 因为它可以一起确认backpropagation、gradient等词,所以它可以作为阅读“为什么链式法则会和反向传播说明绑定在一起”的最小参考点。 https://developers.google.com/machine-learning/glossary / 确认日期: 2026-07-20 - 同一 Part 内部连接:P2-4.3 微分(derivative)与梯度(gradient)、P2-4.5 梯度补充学习:从高中微分到多变量微分。这一节补强的是这两节之间的
复合函数 -> chain rule -> backpropagation连接。