乘积法则:当两个变化的世界相遇
在微积分的学习中,导数描述的是“变化”。我们很容易理解加法的导数(两个变量各自变化的累加),但当两个变量相乘时,事情变得有趣了。为什么( f ⋅ g ) ′ (f \cdot g)'(f⋅g)′不是简单的f ′ ⋅ g ′ f' \cdot g'f′⋅g′,而是那串看起来有点啰嗦的f ′ g + f g ′ f'g + fg'f′g+fg′?
本文将通过直观的几何图形和现代计算科学的视角,为你揭开这个法则的奥秘。
1. 几何直觉:不断扩张的矩形
理解乘积法则最简单的方法,就是观察一个面积正在变大的矩形 。
想象一个矩形,它的两条边长分别为u uu和v vv。显然,矩形的面积A = u ⋅ v A = u \cdot vA=u⋅v。
现在,如果这两条边都在随时间增长,分别增加了极小的长度d u dudu和d v dvdv:
原面积:u ⋅ v u \cdot vu⋅v
新面积:( u + d u ) ⋅ ( v + d v ) (u + du) \cdot (v + dv)(u+du)⋅(v+dv)
展开这个乘法公式:
( u + d u ) ( v + d v ) = u v + u ⋅ d v + v ⋅ d u + d u ⋅ d v (u + du)(v + dv) = uv + u \cdot dv + v \cdot du + du \cdot dv(u+du)(v+dv)=uv+u⋅dv+v⋅du+du⋅dv
现在,我们来看看面积增加了多少(d A dAdA):
d A = 新面积 − 原面积 = u ⋅ d v + v ⋅ d u + d u ⋅ d v dA = \text{新面积} - \text{原面积} = u \cdot dv + v \cdot du + du \cdot dvdA=新面积−原面积=u⋅dv+v⋅du+du⋅dv
在微积分中,当d u dudu和d v dvdv趋近于无穷小时,它们相乘产生的那个微小矩形d u ⋅ d v du \cdot dvdu⋅dv实在太小了,相对于其他项可以忽略不计 。于是:
d A ≈ u ⋅ d v + v ⋅ d u dA \approx u \cdot dv + v \cdot dudA≈u⋅dv+v⋅du
这就是乘积法则的本质:总的变化等于“第一部分的固定值乘以第二部分的变化”加上“第二部分的固定值乘以第一部分的变化” 。
2. 为什么f ′ ⋅ g ′ f' \cdot g'f′⋅g′是错的?
初学者经常直觉地认为乘积的导数就是导数的乘积。我们举个简单的例子:
设f ( x ) = x f(x) = xf(x)=x,g ( x ) = x g(x) = xg(x)=x。
那么f ⋅ g = x 2 f \cdot g = x^2f⋅g=x2,其导数(坡度)应该是2 x 2x2x。
如果按照错误的逻辑f ′ ⋅ g ′ f' \cdot g'f′⋅g′,那么1 ⋅ 1 = 1 1 \cdot 1 = 11⋅1=1。
显然,2 x 2x2x不等于1 11。错误的逻辑忽略了两个变量之间协同增长产生的额外面积。只有通过f ′ g + f g ′ = 1 ⋅ x + x ⋅ 1 = 2 x f'g + fg' = 1 \cdot x + x \cdot 1 = 2xf′g+fg′=1⋅x+x⋅1=2x,我们才能得到完美的答案。
3. 计算机的视角:自动微分中的“背包”
在上一篇博文中我们提到,自动微分(AD)通过“对偶数”(Dual Numbers)来计算导数。对偶数的形式是a + b ϵ a + b\epsilona+bϵ,其中ϵ 2 = 0 \epsilon^2 = 0ϵ2=0。
当我们用对偶数做乘法时,计算机实际上在执行一个数学炼金术 :
( u + u ′ ϵ ) × ( v + v ′ ϵ ) = u v + ( u v ′ + u ′ v ) ϵ + u ′ v ′ ϵ 2 (u + u'\epsilon) \times (v + v'\epsilon) = uv + (uv' + u'v)\epsilon + u'v'\epsilon^2(u+u′ϵ)×(v+v′ϵ)=uv+(uv′+u′v)ϵ+u′v′ϵ2
因为ϵ 2 = 0 \epsilon^2 = 0ϵ2=0,最后一项消失了,结果变为:
u v + ( u v ′ + u ′ v ) ϵ uv + (uv' + u'v)\epsilonuv+(uv′+u′v)ϵ
看!那个“对偶部”(ϵ \epsilonϵ后面的部分)自动计算出了乘积法则的结果:u v ′ + u ′ v uv' + u'vuv′+u′v。
这就是为什么在 Julia 语言(如使用 ForwardDiff.jl)中,你只需要写出普通的乘法逻辑 x * y,计算机就能在后台精准地追踪导数 。它并不是在背公式,而是利用对偶数的代数性质,让乘积法则在运算过程中自然浮现。
4. 现实世界的应用:投篮机器人
回到我们的投篮机器人例子。计算球的落地位置y ( T ) y(T)y(T)时,公式中包含类似v 2 cos 2 θ v^2 \cos^2 \thetav2cos2θ的项 。
这是一个复杂的乘积:速度的平方乘以角度余弦的平方。
如果机器人想要微调角度θ \thetaθ,角度的变化不仅影响cos θ \cos\thetacosθ,还会通过乘积关系影响整个轨迹的落点。
乘积法则告诉机器人:角度的变化是如何通过余弦函数,进而影响到最终位移的。
如果没有乘积法则,梯度下降算法就无法告诉神经网络:“如果你把速度提高 5%,由于速度是平方项且与角度耦合,最终落点会偏离这么多。” 。
总结
乘积法则不是一个枯燥的公式,它是变化耦合的体现。它告诉我们,在一个由多个因素共同决定的系统中(比如v vv和θ \thetaθ共同决定落点),总的变化是由各个因素交替“发力”并相互叠加的结果。