外观
Lesson 43 链式法则
约 2258 字大约 8 分钟
2025-4-2
Chain Rule
设 f=(f1,⋯,fm):Rn→Rm 是可微的 (当然是 C1 的也可以),g:Rm→R 是可微的 (也可以是 C1 的),则:
∂xi∂g(f1(x1,⋯,xn),⋯,fm(x1,⋯,xn))=k=1∑m∂yk∂g(f(x))∂xi∂fk
上面是使用映射语言做出的表述. 更早的语言,也就是变量语言,做出的表述是:
有初始变量 x1,⋯,xn,中间变量 y1,⋯,ym 且对 x1,⋯,xn 有依赖关系 (为 yi=fi(x1,⋯,xn)),最终变量 z,依赖于 y1,⋯,ym (关系为 z=g(y1,⋯,ym)). 因此,z 能够视为依赖于 x1,⋯,xn 的.
这时候的链式法则写成:
∂xi∂z=k=1∑m∂yk∂z∂xi∂yk
提示
这解释了名字的来源,因为这里的分子分母长得像链条环环相扣. ——艾神
但是实际上这种写法有缺陷:
(1) 分子分母中出现的 ∂yk 意义并不一样,我们甚至会问一个非常幼稚的问题——为什么不约掉呢?分母中出现的 ∂yk 可以解释为 z 对 yk 的偏导数,但是再映射语言中第一个分数等价于 ∇e^kg,因此仅仅指示求导的方向;分子中出现的 ∂yk 则是指示对 g 的实际上的第 k 个输入进行求导.
(2) 实际使用中无法区分初始 / 中间变量. 比如以下这个恶意的例子:
z=g(x,x2,y,x2,x3)
初始变量 x,y,中间变量为 x,x2,y,x2,x3,这时出现既是初始又是中间的变量,甚至 x2 作为中间变量出现了两次.
这会导致我们写下这样的式子:
∂x∂z=∂x∂z∂x∂x+∂(x2)∂z∂x∂(x2)+∂y∂z∂x∂y+∂(x2)∂z∂x∂(x2)+∂(x3)∂z∂x∂(x3)
提示
我在北大物理系读书的时候就学的是这一套不知所云的语言. ——艾神
但是用映射的语言写下来的式子有 z=g(f1,⋯,f5),f=(f1,⋯,f5):R2→R5,g:R5→R,其中 R2 坐标是 x,y,R5 坐标是 u1,⋯,u5,因此写作:
∂x∂z=k=1∑5∂uk∂g∂x∂uk
不会产生歧义.
(3) 映射语言中处处标明点:
∂xi∂g(f1,⋯,fn)(x1,⋯,xn)=k=1∑m∂fk∂gf(x)∂xi∂fkx
/Example/
设 f∈C1,p 是 C1 的 path,则:
dtdf(p(t))=∇f(p(t))⋅p′(t)
因此有:
/Claim/
f 沿梯度方向增加最快,沿负梯度方向减少最快. 上节课已经使用 Chain Rule 和 Cauchy - Schwartz 不等式证明过.
接下来我们可以引入一种算法:Gradient Method / Gradient Descent (梯度下降法)
目标:求 f 的最小值 (最大值 maxf=−min(−f)).
算法:从当前点沿 −∇f 前进,xm+1=xm+(−∇f(xm))λ,其中 λ 是一个固定正实数,作为步长.
当 ∣∇f(xm)∣<ε 时,视为潜在的极小值点.
/Claim/ (Fermat)
若 a 是 f 的极小值点,则 ∇f(a)=0.
/Proof/
上学期我们几乎证明过这一结论. 现在只需要找一个 path 再进行复合就好.
任取过 a 的直线 path p(t)=a+vt,要证明 t=0 是 f(p(t)) 的极小值点,用一元 Fermat 的结论得到:
0=dtdf(p(t))=∇f(a)⋅v
而现在 v 是任意的一个矢量,所以 ∇f(a)=0.
在算法设计中,为了消除初始点的影响,我们随机取很多 x0 用 gradient descent 求极小值.
下面讨论 Hadamard 公式.
/Claim/ (Hadamard 公式)
设 f∈C1,则 ∃ 连续的函数 g1,⋯,gn 使得
f(x1,⋯,xn)=f(0)+x1g1(x1,⋯,xn)+⋯+xngn(x1,⋯,xn)
且 gk(0)=∂kf(0).
/Proof/
联系 f(0) & f(x1,⋯,xn).
考虑 h(t)=f(p(t))=f(tx1,⋯,txn),则
⎩⎨⎧h(0)=f(0)h(1)=f(x)h′(t)=Chain Rulek=1∑m∂kf(tx)xk
用 Newton - Leibniz 公式得到:
h(1)−h(0)=∫01h′(t)dt=∫01k=1∑n∂kf(tx)⋅xkdt
于是
f(x1,⋯,xn)=f(0,⋯,0)+k=1∑nxk∫01∂kf(tx1,⋯,txn)dt
令 gk(x1,⋯,xn)=∫01∂kf(tx1,⋯,txn)dt 即证 (含参积分).
另一个结果来自 Euler (更久以前):
/Claim/ (Euler)
设 f(x1,⋯,xn) 是 c1 且是 k 次齐次的 (即,f(λx1,⋯,λxn)=λkf(x1,⋯,xn)),则有
i=1∑nxi∂if(x1,⋯,xn)=kf(x1,⋯,xn)
提示
一般而言我们求导会损失一些信息,因此这个结果还颇令人惊讶. ——艾神
/Proof/
直接对 k 次齐次的定义式两边求导:
dλdf(λx1,⋯,λxn)=kλk−1f(x1,⋯,xn)
LHS 使用 Chain Rule 得到
=i=1∑n∂if(λx1,⋯,λxn)xi
取 λ=1 即得到 Euler 的结果.
现在我们证明了充分性,作业中我们将会证明这是必要条件.
一个换元的手法:极坐标和直角坐标.
用映射的语言讲,极坐标是 [0,+∞)×[0,2π]⟶ΦR2⟶fR. 函数 z=f(x,y) 能够视为 r,θ 的函数,即函数 f∘Φ. 求导:
∂r∂z∂θ∂z=∂r∂f(rcosθ,rsinθ)=f1′(rcosθ,rsinθ)cosθ+f2′(rcosθ,rsinθ)sinθ=∂θ∂f(rcosθ,rsinθ)=−rsinθ⋅f1′+rcosθ⋅f2′
另一方面,反过来用直角坐标表示极坐标的导数,有 R2⟶R+×[0,2π]⟶R,因此
∂x∂z∂x∂r∂x∂θ⋯=∂x∂g(r=x2+y2,θ=arctanxy)=∂r∂z∂x∂r+∂θ∂z∂x∂θ=x2+y2x,∂y∂r=x2+y2y=x2+y2−y,∂y∂θ=x2+y2x
/Example/
ϕ(x,y)=f(x,y,g(x,y)),求 ϕ 对 x,y 的偏导数.
∂x∂ϕ∂y∂ϕ=f1′⋅1+f2′⋅0+f3′⋅∂x∂g=f1′⋅0+f2′⋅1+f3′⋅∂y∂g
为了区分坐标,用下标标序号更好.
我们在学习一元函数时曾经讨论过反函数的导数问题,现在我们来看看多元映射是否具有一样的性质.
/Claim/
设 f:Rn→Rn 有逆 g:Rn→Rn,且 f,g 皆可微. 则逆映射的微分等于微分之逆,即有:
dgf(x0)=(dfx0)−1,Jg(f(x0))=(Jf(x0))−1
/Proof/
利用链式法则,x0⟶ff(x0)⟶gx0,g∘f=Id (恒同映射).
于是 d(Id)x0=d(g∘f)x0=dgf(x0)∘dfx0=Id. 同理,d(Id)x0=d(f∘g)x0=dfx0∘dgf(x0)=Id.
所以这两个微分互逆,dgf(x0)=(dfx0)−1,Jacobian 等式随之成立.
/Remark/
命题需要 f,g∈C1 的条件,我们自然有疑问:能不能通过 f∈C1 导出 g∈C1?这一点我们在以后的反函数定理中可以证明.
更困难的问题是,如何保证 f 存在一个 C1 的逆?
/Example/ (三维球坐标)
用 (r,θ,ϕ) 描述坐标,与直角坐标的转化关系是:
⎩⎨⎧x=rsinθcosϕy=rsinθsinϕz=rcosθ
得到映射 Ψ:R≥0×[0,π]×[0,2π]⟶R3,求各个偏导数.
/Method/ (1)
反函数微分命题.
JΨ−1(x,y,z)=(JΨ(r,θ,ϕ))−1=∂x∂r∂x∂θ∂x∂ϕ∂y∂r∂y∂θ∂y∂ϕ∂z∂r∂z∂θ∂z∂ϕ=∂r∂x∂r∂y∂r∂z∂θ∂x∂y∂θ∂θ∂z∂ϕ∂x∂ϕ∂y∂ϕ∂z−1
这相当复杂.
/Method/ (2)
写出 Ψ−1 表达式:
⎩⎨⎧r=x2+y2+z2θ=arctanx2+y2+z2zϕ=arctanxy
……