15 分钟串讲:链式法则、导数与梯度(白话直觉版)

这份 15 分钟的课堂 note,串起大一新生最容易在「微积分」里卡壳的三件事:链式法则、导数、梯度。整篇按「开场先感觉剥洋葱→回头补导数地基→从一元跳到多元→用等高线讲梯度→收尾一张关系图」的顺序走,每一章在主线上推进一步。直接受众是讲课的老师本人,他会在课前 15 分钟照着这份 note 念;真正听的对象是大一新生,他们听到的应当是白话、类比和点到为止的公式,不是从抽象定义切入的术语堆砌。

嵌套函数怎么求导:先感觉「得一层层剥」

我们从一个非常具体的例子开始。想象 $y=(3x+1)^2$。这不是普通的二次函数,里面那个 $3x+1$ 是一个子函数,外面那个平方是另一个函数把里头的结果再吃一遍。这就是「嵌套函数」——一个函数塞进另一个函数里。

要怎么求它的导数?直观上,你得先把外面那一层剥掉,看里头那一层到底变化多快,再把外面那层对里头这一层的敏感度乘上去。就像剥洋葱,先剥外面那层看里头,再剥里头那层看更里头,每剥一层都要用「里面变多少、外面放大多少倍」去算总效果。3Blue1Brown 在《Essence of Calculus》系列第 4 集直接引述了那位「Anonymous professor」的比喻:用链式法则就像剥洋葱,你得一层层来,洋葱太大还会让你哭出来(Using the chain rule is like peeling an onion: you have to deal with each layer at a time, and if it is too big you will start crying)。Chain rule — Wikipedia Chain rule — 3Blue1Brown

在动手算之前,我们先看一下 3Blue1Brown 用来演示这种嵌套结构的装置。它把 $f(x) = \sin(x^2)$ 拆成两条平行的数轴:上面是 $x$(量程 0 到 3),中间是 $x^2$(量程 0 到 10),下面是 $\sin(x^2)$(量程 -2 到 2)。三条数轴右端对齐,右侧两条弯曲箭头分别标注 $(…)^2$ 和 $\sin(…)$,意思是「从上一条轴的值经过这个函数映射到下一条轴」。当 $x = 0.5$ 时,中间那条轴显示 $x^2 \approx 0.25$,下面那条轴显示 $\sin(x^2) \approx 0.25$,三个三角游标对齐在同一根纵轴上。Chain rule — 3Blue1Brown

三条数轴装置 setup 帧:x=0.5 对应 x²≈0.25 对应 sin(x²)≈0.25,三轴右端对齐

图注:黑色背景上的三条平行数轴,从上到下分别是 $x$(刻度 0/1/2/3)、$x^2$(刻度 0–10)、$\sin(x^2)$(刻度 -2/-1/0/1/2),右侧弯曲箭头 $(…)^2$ 和 $\sin(…)$ 标出层间映射。三个白色/绿色/蓝色三角游标在同一列对齐,分别指示 $x \approx 0.5$、$x^2 \approx 0.25$、$\sin(x^2) \approx 0.25$。这是「嵌套函数 = 多层装置」的初始 setup 帧,还没有引入 nudge。

再看一个更广义的图。Wikipedia 的「Chain rule」词条里给出一张多层嵌套函数结构示意图,输入 $x$ 经过几层中间函数(标注 $f/g/h$ 等)到达输出 $y$,每层附对应导数,箭头连线表达外层对内层的依赖关系。Chain rule — Wikipedia

Wikipedia 的三层以上复合函数嵌套结构示意图,x 经多层中间函数到 y

图注:从左下到右上画出「输入 x → 中间函数 g → 再中间函数 h → … → 输出 y」的层级流程,每层附对应导数,外层对内层的依赖通过箭头表达。它要传达的关键信息是:剥洋葱不只剥两层,复合函数可以套任意多层,每层都要各算自己的导数。

所以看到一个嵌套函数,第一反应不再是「这怎么算」,而是「先把每一层剥开再说」。这就是这一章要立的直觉:复合函数求导可以分层处理。下一章我们把这层直觉变成公式。

链式法则:为什么是一层层乘下去

直觉立住了,公式就跟着来了。把 $y = (3x+1)^2$ 拆成外层 $u^2$ 和内层 $3x+1$,先求外层对 $u$ 的导数 $2u$(其中 $u = 3x+1$),再乘以内层对 $x$ 的导数 $3$,得到 $6(3x+1)$。这就是「外层导 × 内层导」,用 Lagrange 记号写就是

$$(f \circ g)'(x) = f'(g(x)) \cdot g'(x)$$

或者用 Leibniz 记号写

$$\frac{dy}{dx} = \frac{dy}{du} \cdot \frac{du}{dx}$$

Wikipedia 的 Chain rule 词条把这两种记号都列出来作为标准形式,并特别说明外层导要在 $u = g(x)$ 处求值,不是自变量 $x$ 处求值。Chain rule — Wikipedia

为什么是「乘」而不是「加」?3Blue1Brown 的三条数轴装置把这个动作做成了可以拖动的 nudge:当你把 $x$ 轴上的红色 nudge $dx$ 推一下,$x^2$ 轴上出现的绿色 nudge 长度变成 $2x \cdot dx$(被第一层的局部斜率 $2x$ 放大),再传到 $\sin(x^2)$ 轴上出现的蓝色 nudge 长度变成 $\cos(x^2) \cdot 2x \cdot dx$(再被第二层的局部斜率 $\cos(x^2)$ 放大)。每一层的 nudge 都是「上一层 nudge × 本层局部斜率」,传到最后一层就是整体变化率。

三条数轴 nudge expanded 帧:x 轴上的 dx 传到 x² 轴变成 2x·dx,再传到 sin(x²) 轴变成 cos(x²)·2x·dx

图注:深色背景三条数轴:$x$ 轴(量程 0–3)白色三角游标配红色 nudge $dx$;$x^2$ 轴(量程 0–10)绿色三角游标配绿色 nudge $2x \cdot dx$;$\sin(x^2)$ 轴(量程 -2 到 2)蓝色三角游标配蓝色 nudge $\cos(x^2) \cdot 2x \cdot dx$。右侧两条弯曲箭头分别标注 $(…)^2$(绿色)和 $\sin(…)$(蓝色)。三轴 nudge 长度比例清晰呈现「逐层乘以局部斜率」的乘法关系。

为什么 Leibniz 记号里那个 $du$ 可以「抵消」?3Blue1Brown 在视频里特别强调:这种抵消不只是符号技巧,而是 calculus 的 nudges 物理本质的真实反映。$du$(即 $dh$)既是从 $x$ 数轴经过第一层乘出来的 nudge,又是第二层 $f$ 在计算 $df$ 时使用的输入 nudge——它在两层的接口位置被读了一次、又被用了一次,所以符号上抵消。Chain rule — 3Blue1Brown

到这里我们用了一个类比剥洋葱,把它当主线。还有一个备选的机械类比值得在口播时顺带提一句:把链式法则想成齿轮传动。Thomas' Calculus 14E 配套讲义里就给出了三齿轮啮合的 Figure 3.26:齿轮 A 转 $x$ 圈、齿轮 B 转 $u$ 圈、齿轮 C 转 $y$ 圈;数齿数得 $y = u/2$、$u = 3x$,所以整体传动比 $dy/dx = 3/2 = (1/2)(3) = (dy/du)(du/dx)$。齿轮比相乘 = 总传动比,和链式法则的「局部变化率相乘 = 整体变化率」是同一件事的机械版翻译。Chain rule — Wikipedia

三齿轮传动机构图:齿轮 A 转 x 圈、齿轮 B 转 u 圈、齿轮 C 转 y 圈,传动比相乘等于总传动比

图注:三个相互啮合的齿轮:左侧灰色大齿轮标 2 = C(y turns),中间橙色小齿轮标 1 = B(u turns),右侧灰色大齿轮标 3 = A(x turns)。每齿轮有红色半径线、圆心点、蓝色顺时针弧形箭头。图本身不含 $y=u/2$、$u=3x$ 这些方程,那些数学关系在紧邻正文里。

最后留一句:「链式法则逐层乘」这件事,往后走会变成深度学习里反向传播的同一件事——Wikipedia 的 Chain rule 词条在 Backpropagation 节直接给出这一定位:The chain rule forms the basis of the backpropagation algorithm, which is used in gradient descent of neural networks in deep learning。这一句给老师本人看,学生听不懂就跳过;它埋的是后续深度学习章节的伏笔。Chain rule — Wikipedia

所以这一章能带走的核心动作是:看到任何嵌套函数,机械地说「外层导 × 内层导」,并知道这个动作的物理含义是 nudge 在每层被局部斜率放大。

回头补地基:导数到底是什么

刚刚我们用「导数」这个概念去描述「每一层自己的变化率」,但导数本身是什么还没正式定义。现在回头补这块地基。

一句话定义:在某一点附近,输出随输入变化得快不快,就是导数。几何上看,那一点切线的斜率;物理上看,是瞬时速度。

先看几何。Wikipedia 的 Derivative 词条把导数定义为差商的极限

$$f'(a) = \lim_{h \to 0} \frac{f(a+h) - f(a)}{h}$$

并把这条极限的几何含义翻译成「过标记点的那条红色切线的斜率」。Derivative — Wikipedia

黑色函数曲线 + 红色切线 + 标记点,几何上证明导数 = 切线斜率

图注:黑色函数曲线旁有一条红色切线,切线在标记点与曲线接触。图中不标具体函数或公式,只展示「标记点 + 切线」的几何关系——切线的斜率就是函数在该点的导数。

再看课堂级的几何叙事。MIT 18.01 Lecture 1 给出了 Figure 1:坐标平面内一条黑色曲线 $f(x)$,曲线上左下点 $P$ 对应 $x_0$、右上点 $Q$ 对应 $x_0 + \Delta x$;绿色虚线是穿过 $P$、$Q$ 的割线(secant line);红色实线是在 $P$ 点与曲线相切的切线(tangent line)。这里的叙事是:割线的斜率就是差商 $\Delta f / \Delta x$;当 $\Delta x \to 0$,$Q$ 不断靠近 $P$,割线不断收缩,最终逼近切线。18.01 Single Variable Calculus, Lecture 1 — MIT OCW

MIT 18.01 Figure 1:黑色曲线 f(x) + 点 P、Q + 绿色虚线 secant + 红色实线 tangent at P

图注:坐标系内黑色单调递增曲线,曲线上点 $P = (x_0, f(x_0))$ 与点 $Q = (x_0 + \Delta x, f(x_0 + \Delta x))$;绿色虚线(标注 Secant line)穿过两点;红色实线(标注 Tangent line)在 $P$ 点与曲线相切。$x$ 轴上标 $x_0$ 与 $x_0 + \Delta x$ 两个刻度。caption 完整保留为 "Figure 1: A function with secant and tangent lines"。

不过要小心一个反直觉的地方。「瞬时变化率」这四个字听起来像个悖论——变化是发生在两个时刻之间的事,把眼睛蒙住只看一个瞬间,哪还有变化?3Blue1Brown 在《Essence of Calculus》第 2 集把这点讲透了:导数不是「把 $h$ 直接代 0 得到的 0/0」,而是「差商 $\Delta f / \Delta x$ 在 $\Delta x \to 0$ 时逼近的值」。它是一条 shrinking secant slope 的极限,不是某个具体 $\Delta x$ 上的比值,更不是 $0/0$。The paradox of the derivative — 3Blue1Brown

最后把这条地基落到大家熟悉的物理场景里。MIT 18.01 Lecture 1 给了一个经典 Halloween 案例:MIT 万圣节有从 400 英尺高的楼顶扔南瓜的传统,下落高度满足 $y = 400 - 16t^2$,$t = 5$ 时瞬时速度 $y'(5) = -32 \cdot 5 = -160$ 英尺/秒(约 110 mph)。负号表示 $y$ 在减少(南瓜向下)。这条「导数 = 瞬时速度」的物理直觉,比任何抽象定义都更容易让学生记住「导数是什么」。18.01 Single Variable Calculus, Lecture 1 — MIT OCW

所以「导数」三种说法——切线斜率、瞬时变化率、附近最好的常数近似变化率——是同一件事。链式法则里那个「每一层各算自己的导数」的「导数」,指的就是它。

从一元到多元:偏导数与方向求导

导数地基立住了,现在把场景扩展。函数输入不再只有一个——比如 $f(x, y)$ 同时吃两个变量。这时候「导数」本身要扩展成「偏导数」。

直觉很简单:对每个方向分别求导,其他坐标冻住不动。比如 $f(x, y) = x^2 + y^2$,在 $(1, 1)$ 处:

  • $\partial f / \partial x$:冻住 $y$,把 $y$ 当常数,对 $x$ 求导,得 $2x$,在 $(1, 1)$ 处等于 $2$。
  • $\partial f / \partial y$:冻住 $x$,把 $x$ 当常数,对 $y$ 求导,得 $2y$,在 $(1, 1)$ 处等于 $2$。

这就给出了两个数字。下一步要把它们拼成梯度向量,这是为什么「偏导数」和「梯度」必须一前一后讲的原因。Gradient — Wikipedia

用一个简表把「冻住哪一个、对哪一个求导」这件事梳理清楚:

你要做的事冻住的坐标对哪个方向求导结果记号在 $(1,1)$ 处的值($f=x^2+y^2$)
看 $x$ 动、$y$ 不动时 $f$ 怎么变$y$$x$$\partial f / \partial x$$2$
看 $y$ 动、$x$ 不动时 $f$ 怎么变$x$$y$$\partial f / \partial y$$2$

偏导数最重要的意义是:它是「下一步梯度向量」的零件。每个方向各算一个偏导,把它们打包成一个向量就是梯度。

所以这一章能带走的核心动作是:看到 $f(x, y, …)$,第一反应是「得逐方向求导」,而不是「导数只有一个」。

梯度:最陡上坡 + 垂直等高线

把各方向偏导打包成一个向量,就得到了梯度。Wikipedia 的 Gradient 词条给出标准形式:$\nabla f = (\partial f / \partial x, \partial f / \partial y)$,二维情形下是一个列向量(更高维同理)。它有两条性质:方向 = 最陡上坡方向,大小 = 在该方向单位步长的最大变化率。Gradient — Wikipedia

先建一个最普适的直觉。Wikipedia 词条顶部的两张灰度场图展示了一个泛命题:不管函数是什么形状,只要标量场有「高低」,梯度(蓝箭头)就指向数值增加最快的方向——圆形径向场从四周指向中心(中心是极大值),水平条带场从浅色指向深色(左深右浅时箭头指向左侧深色区)。

Wikipedia Gradient 词条 overview 图:圆形径向灰度场 + 水平条带灰度场,蓝色箭头指向标量场增长最快方向

图注:左图圆形灰度场中心黑(高值)→ 四周白(低值),蓝色箭头从四周径向指向中心;右图水平条带灰度场左侧深(高值)→ 右侧浅(低值),蓝色箭头水平指向左侧深色区。caption 完整保留:「The gradient, represented by the blue arrows, denotes the direction of greatest change of a scalar function.」这两张图没标具体函数,只传达一个最普适的命题:梯度指向标量场增加最快的方向。

再看一个具体函数的具体梯度场。Wikipedia 给出的第二张矢量场图是 $f(x, y) = x e^{-(x^2+y^2)}$ 的梯度场:背景伪彩色热力图(深紫低值→亮黄高值)上叠加黑色箭头网格,箭头从紫色极小值指向黄色极大值,中心长边缘短呈点状。这张图比上面两张 overview 图更有「场」的感觉——它告诉你「梯度场」就是把每一点梯度都画成箭头,长度表示那个方向上变化有多快。Gradient — Wikipedia

Wikipedia Gradient 词条矢量场图:f(x,y)=x·e^{-(x²+y²)} 的伪彩色背景 + 黑色箭头网格,箭头从极小值指向极大值

图注:viridis 伪彩色背景(深紫→亮黄),$x/y$ 轴范围 $[-2.0, 2.0]$,右侧色条 $[0.0, 1.0]$。黑色箭头网格从紫色极小值(约 $x=-0.7, y=0$)指向黄色极大值(约 $x=+0.7, y=0$),中心长边缘短。这是「梯度场 = 把每一点梯度画成箭头」的具体示例,函数不是 $x^2+y^2$。

第二条性质:梯度与等高线正交。MIT 18.02SC 的课堂笔记给出了这个命题的最干净的具体例子:$w = (x^2 + y^2)/3$,梯度 $\nabla w = \langle 2x/3, 2y/3 \rangle = (2/3) \langle x, y \rangle$;在 $(1, 2)$ 处 $\nabla w(1, 2) = (2/3) \langle 1, 2 \rangle$。过 $(1, 2)$ 的等高线是 $x^2 + y^2 = 5$(半径 $\sqrt{5}$ 的圆),而 $\nabla w(1, 2)$ 是 $\langle 1, 2 \rangle$ 的标量倍,方向径向朝外——径向方向与圆正交。18.02SC Notes: Gradient — MIT OCW (Orloff)

MIT 18.02SC 同心圆 + 径向箭头图:z=(x²+y²)/3 的等高线 + 梯度场,箭头径向朝外与圆正交

图注:二维 $x$-$y$ 坐标系原点在中央,三个同心圆(圆心在原点,半径递增)表示 $z = (x^2 + y^2)/3$ 的等高线;每圈圆上分布若干沿径向朝外的箭头,最内圈最短,最外圈最长。$x$ 轴标签在右、$y$ 轴标签在上,图下方公式 $z = (x^2 + y^2)/3$ 作为标注。

这里有个反直觉要提前挡住:「梯度永远指向外、与同心圆正交」是 $(x^2+y^2)/3$ 这个特例的巧合,不是通用结论。MIT 18.02SC 笔记里的 Example 2 给了反例:把 $y = e^x$ 的图像看作 $w = y - e^x = 0$ 的等高线,$\nabla w(1, e) = \langle -e, 1 \rangle$ 仍然与那条曲线正交,但不指向任何「圆心」——曲线本身根本不是圆。所以正确的读法是:梯度永远与「当前那一条等高线」正交,但等高线长什么样要具体函数说了算。18.02SC Notes: Gradient — MIT OCW (Orloff)

把两条性质合成一个类比来记忆——等高线 + 爬山:

  • 站在某一点,梯度指向最陡上坡方向——所以「梯度方向」告诉你该往哪儿迈步能最快爬高。
  • 梯度的大小 = 那个最陡坡度——所以「梯度模长」告诉你爬得有多陡。
  • 梯度与等高线正交——因为沿等高线走高度不变,方向导数为 0,所以梯度必然与「水平走」的方向垂直。

所以这一章能带走的核心动作是:看到 $f(x, y)$,能立刻写出 $\nabla f = (\partial f / \partial x, \partial f / \partial y)$,并能用「等高线 + 爬山」解释梯度方向的几何意义——最陡上坡、垂直等高线。

串成一条线:概念关系图 + 反向传播埋点

15 分钟快到收尾,我们把今天讲的所有概念用一张关系图串成线。

这张图里有两条线。第一条从「导数」出发:导数是单层局部变化率;链式法则把多层的局部变化率逐层乘起来;在多元情形下,「每层一个数」变成「每层一个矩阵」(雅可比矩阵连乘 $J_{f \circ g} = J_f(g(a)) \cdot J_g(a)$);反向传播就是从输出端反向往输入端走一遍同样的链式法则——这一条线在「导数 = 单层局部变化率」那里立住。Chain rule — Wikipedia

第二条线也从「导数」出发:扩展到多元时,逐方向求导得到偏导 $\partial f / \partial x_i$;把这些偏导打包成一个向量就是梯度 $\nabla f$。这一条线也在「导数」处与第一条线汇合。

多元链式法则的最一般形式,可以用一个 dependency graph 来可视化。Dive into Deep Learning 第 25 章给出了一个 4 输入 / 3 层复合函数的计算图:9 个节点从左到右分层排列——4 个输入 ${w, x, y, z}$、第 1 层中间 ${a, b}$、第 2 层中间 ${u, v}$、输出 ${f}$,箭头从左到右流。Multivariate Chain Rule — Dive into Deep Learning §25.2.3

D2L 多元链式法则 dependency graph:4 个输入 {w,x,y,z} 经 {a,b} → {u,v} → 输出 f 的 4 层前向计算图

图注:9 个浅灰圆形节点,4 层左到右 feedforward 拓扑——4 个输入节点 ${w, x, y, z}$ 排在最左列、第 1 中间层 ${a, b}$(a 上 b 下)、第 2 中间层 ${u, v}$(u 上 v 下)、输出节点 ${f}$ 在最右。边从左到右,箭头方向向右。caption 完整保留为 "Figure 25.2.4: The function relations of Equation 25.2.5, drawn as a graph where nodes are values and edges show direct functional dependence"。图中边不显示公式,节点标签只有单字母。

这张图本身只证明「谁依赖谁」的拓扑:节点 $a$ 和 $b$ 都依赖 4 个输入,$u$ 和 $v$ 都依赖 $a, b$,$f$ 依赖 $u, v$。具体的函数关系——比如 $a = (w+x+y+z)^2$、$b = (w+x-y-z)^2$、$u = (a+b)^2$、$v = (a-b)^2$、$f = (u+v)^2$——是在图周围的 Equation 25.2.5 正文里写的,不在图上。多元链式法则的路径和形式就是沿这张图的每一条有向路径把边导数乘起来再求和:Multivariate Chain Rule — Dive into Deep Learning §25.2.3

$$\frac{\partial f}{\partial a} = \sum_{i} \frac{\partial f}{\partial u_i} \cdot \frac{\partial u_i}{\partial a}$$

这条公式的含义正是「链式法则逐层乘 = 反向传播的同一件事」:反向传播就是从 $f$ 反向往 $a$ 走一遍同样的链式法则,复用每一个中间结果,一次反向扫描就能把所有输入的梯度一起算出来。D2L 在 §25.2.3.2 直接给出这一定位:Computing derivatives from $f$ back toward the inputs, rather than forward from the inputs, is what gives the algorithm its name: backpropagation。这一句是给老师本人看的伏笔,学生听不懂就跳过——它告诉我们,今天讲的链式法则就是深度学习里每个权重梯度的来源。Multivariate Chain Rule — Dive into Deep Learning §25.2.3

收尾留下两个可当堂提问的小例子:

(a) 链式法则应用:$y = (3x+1)^2$ 在 $x = 1$ 处变化多快?算 $2u \cdot 3 = 6u = 6(3 \cdot 1 + 1) = 24$。

(b) 梯度正交性:站在山坡上,梯度方向与等高线什么关系?答:正交,因为沿等高线走高度不变,方向导数为 0,所以梯度必然与「水平走」的方向垂直。

今天 15 分钟的整个故事,从 $y=(3x+1)^2$ 的剥洋葱,到导数是切线斜率,再到梯度是最陡上坡 + 垂直等高线,最后落到多元链式法则与反向传播——全部串在一张概念关系图里,「导数 = 单层局部变化率」是这张图的汇合点。

参考文献

本专题引用的核心资料如下,建议深入学习时阅读原文:

  1. Chain rule — Wikipedia — https://en.wikipedia.org/wiki/Chain_rule
  2. Derivative — Wikipedia — https://en.wikipedia.org/wiki/Derivative
  3. Gradient — Wikipedia — https://en.wikipedia.org/wiki/Gradient
  4. Visualizing the chain rule and product rule — 3Blue1Brown — https://www.3blue1brown.com/lessons/chain-rule-and-product-rule/
  5. The paradox of the derivative — 3Blue1Brown — https://www.3blue1brown.com/lessons/derivatives
  6. Chain Rule — Thomas' Calculus 14E 配套讲义(齿轮传动类比) — https://faculty.etsu.edu/gardnerr/1910/Notes-14E/C3S6-14E.pdf
  7. 18.01 Single Variable Calculus Lecture 1 — MIT OpenCourseWare — https://ocw.mit.edu/courses/18-01-single-variable-calculus-fall-2006/
  8. Multivariable Calculus & Multivariate Chain Rule — Dive into Deep Learning §25.2.3 — https://d2l.smola.org/chapter_mdl-calculus/mdl-multivariable-calculus.html
  9. 18.02SC Notes: Gradient — MIT OpenCourseWare (Orloff) — https://ocw.mit.edu/courses/18-02sc-multivariable-calculus-fall-2010/
15 分钟串讲:链式法则、导数与梯度(白话直觉版)