Skip to content

链式法则

Chain rule

复合映射的导数等于各层导数按计算顺序组成的线性映射复合。

形式陈述

UXVY 是赋范向量空间中的开集,f:UVaU 处 Fréchet 可微,g:VZf(a) 处 Fréchet 可微。则复合映射 gfa 处可微,而且

D(gf)(a)=Dg(f(a))Df(a).

这里 Df(a):XYDg(f(a)):YZ 都是连续线性映射,右侧是线性映射的复合,不是坐标逐项相乘。量词条件不能省略:需要 fa 可微、g 在实际到达点 f(a) 可微,并且 f 的邻域像落在 g 的定义域内。

证明来自余项控制。写

f(a+h)=f(a)+Ah+r(h),r(h)h0,

以及

g(f(a)+k)=g(f(a))+Bk+s(k),s(k)k0.

k=Ah+r(h)。由于 k=O(h),代入后得到

g(f(a+h))g(f(a))=BAh+Br(h)+s(k),

后两项都是 o(h),故导数为 BA

在一维实函数情形,该式退化为熟悉的

(gf)(a)=g(f(a))f(a).

f:RnRmg:RmRp,采用列向量约定时则为 Jacobian 矩阵乘法

Jgf(a)=Jg(f(a))Jf(a).

直觉

复合函数把微小扰动分两段传递:h 先被 Df(a) 变成输出空间中的一阶扰动,再被 Dg(f(a)) 继续变换。局部误差不会凭空变成一阶项,因为第一层输出扰动至多与 h 同阶,第二层的高阶余项仍然比它小一个量级。

矩阵相乘的顺序记录了数据流方向。先执行 f 再执行 g,对扰动却写成 JgJfh;若交换两个 Jacobian,不但维数往往不匹配,也代表完全不同的计算图。自动微分正是把长复合拆成局部 Jacobian,再选择从输入向输出或从输出向输入累积这些线性映射。

例子与计算

f(x,y)=(x2+y,siny)g(u,v)=uev。在 (1,0) 处,f(1,0)=(1,0)

Jf(1,0)=(2101),Jg(1,0)=(11).

因此

Jgf(1,0)=(11)(2101)=(22).

直接展开 g(f(x,y))=(x2+y)esiny 并求偏导,也得到梯度坐标 (2,2)。这个例子展示的是中间空间两个方向如何汇合,而不是把两个导数逐分量相乘。

沿可微曲线 γ:(ε,ε)Rn,标量函数 F 满足

ddtF(γ(t))=DF(γ(t))[γ(t)]=F(γ(t))Tγ(t),

它把梯度与方向导数联系起来,也说明“对路径求导”是同一线性复合原理。

边界与失败情形

仅有方向导数不足以保证链式法则的 Fréchet 版本。函数

f(x,y)={x3x2+y2,(x,y)(0,0),0,(x,y)=(0,0)

在原点沿每条直线都有方向导数,但这些方向导数组不成一个线性映射,因此不能把它当作 Df(0) 放进 Jacobian 乘积。链式法则需要真正控制所有方向的统一余项。

外层函数只在某些方向可导也不够。例如 g(t)=|t|0 不可导;即便内层 f(x)=x 完全光滑,gf=|x| 在零点仍不可导。另一方面,复合函数可导并不反推每一层可导:取 f(x)=|x|g(t)=t2,复合为 x2,但 f 在零点不可导。

高阶链式法则会出现双线性项而非简单矩阵连乘。例如

D2(gf)(a)[h,k]=D2g(f(a))[Df(a)h,Df(a)k]+Dg(f(a))[D2f(a)[h,k]].

忽略第一项或把 Hessian 当成逐项乘积,会丢失曲率通过内层映射传播的部分。

推论与应用

多层复合 fLf1 的导数是按反向书写顺序排列的乘积 DfLDf1。前向模式把一个输入切向量逐层推进,反向模式把一个输出余切向量逐层拉回;二者计算的是同一链式法则,只是结合次序不同。

变量替换、隐函数求导、灵敏度分析与神经网络反向传播都依赖这一结论。实际计算中还要区分数学上的导数存在与程序实现是否在分支点、溢出或不可微原语处忠实表示它。

参考资料
  • Walter Rudin, Principles of Mathematical Analysis, 3rd ed., McGraw-Hill, 1976,§9.15。
  • Serge Lang, Real and Functional Analysis, 3rd ed., Springer, 1993,关于 Fréchet derivative 与 chain rule 的章节。
  • Michael Spivak, Calculus on Manifolds, Westview Press, 1965,Ch. 2。