我们将理论付诸实践。你已经学过,偏导数能够帮助我们找到一个多变量函数相对于其中一个变量的变化率,同时保持其他变量不变。你还知道,梯度向量 (vector)将这些偏导数集合在一起,指向函数最陡峭上升的方向。现在,是时候亲自动手计算它们了。
请记住,这个过程很大程度上依赖于你之前学过的导数规则(如幂法则和和法则),但多了一步:在求导时将某些变量视为常量。
例子1:一个简单的多项式函数
我们从一个包含两个变量x和y的函数开始:
f(x,y)=2x3+4xy2−y5+7
我们的目标是找到偏导数∂x∂f和∂y∂f,然后构成梯度向量 (vector)∇f(x,y)。
计算∂x∂f(相对于x的偏导数)
要找到∂x∂f,我们将y视为一个常数(比如5、-2或π)。
- 项1 (2x3): 2x3相对于x的导数是2⋅(3x3−1)=6x2。(标准幂法则)。
- 项2 (4xy2): 在这里,我们将4和y2视为与x相乘的常数。(常数 ×x)相对于x的导数就是这个常数。所以,4xy2相对于x的导数是4y2。
- 项3 (−y5): 由于我们将y视为常数,y5也是一个常数。任何常数相对于x的导数都是0。
- 项4 (7): 这是一个常数,所以它相对于x的导数是0。
综合起来:
∂x∂f=6x2+4y2+0+0=6x2+4y2
计算∂y∂f(相对于y的偏导数)
现在,我们转换视角。要找到∂y∂f,我们将x视为一个常数。
- 项1 (2x3): 由于x被视为常数,2x3也是常数。它相对于y的导数是0。
- 项2 (4xy2): 将4x视为y2的常数系数。(常数 ×y2)相对于y的导数是(常数 ×2y)。所以,导数是4x⋅(2y)=8xy。
- 项3 (−y5): −y5相对于y的导数是−5y5−1=−5y4。(标准幂法则)。
- 项4 (7): 这是一个常数,所以它相对于y的导数是0。
综合起来:
∂y∂f=0+8xy−5y4+0=8xy−5y4
构成梯度向量∇f(x,y)
梯度向量只是一个包含偏导数的向量。按照惯例,我们按变量的顺序(先x,后y)列出它们。
∇f(x,y)=[∂x∂f∂y∂f]=[6x2+4y28xy−5y4]
在某点计算梯度
梯度本身是一个函数;它告诉我们函数在任何点 (x,y) 最陡峭的上升方向。让我们在特定点 (x,y)=(1,2) 找到梯度。我们将 x=1 和 y=2 代入偏导数表达式:
- ∂x∂f 在 (1,2):6(1)2+4(2)2=6(1)+4(4)=6+16=22
- ∂y∂f 在 (1,2):8(1)(2)−5(2)4=16−5(16)=16−80=−64
因此,点(1,2)处的梯度向量是:
∇f(1,2)=[22−64]
这个向量告诉我们,从函数f(x,y)所定义的曲面上的点(1,2)开始,最陡峭的增加方向主要沿着正x轴(值为22)和强烈地沿着负y轴(值为-64)。在优化(如梯度下降 (gradient descent))中,我们通常会沿着相反的方向,即−∇f(1,2),以减小函数值。
例子2:带有交互项的函数
我们再试一个。考虑一个函数g(w1,w2),它可能表示一个取决于两个权重 (weight)w1和w2的简单成本函数。
g(w1,w2)=3w12−5w1w2+2w22
计算∂w1∂g
将w2视为常数。
- 项1 (3w12): 相对于w1的导数是3(2w1)=6w1。
- 项2 (−5w1w2): 将−5w2视为w1的常数系数。相对于w1的导数是−5w2。
- 项3 (2w22): 将w2视为常数,所以2w22是常数。相对于w1的导数是0。
结果:
∂w1∂g=6w1−5w2
计算∂w2∂g
将w1视为常数。
- 项1 (3w12): 将w1视为常数,所以3w12是常数。相对于w2的导数是0。
- 项2 (−5w1w2): 将−5w1视为w2的常数系数。相对于w2的导数是−5w1。
- 项3 (2w22): 相对于w2的导数是2(2w2)=4w2。
结果:
∂w2∂g=−5w1+4w2
构成梯度向量 (vector)∇g(w1,w2)
∇g(w1,w2)=[∂w1∂g∂w2∂g]=[6w1−5w2−5w1+4w2]
在某点计算梯度
让我们在点(w1,w2)=(2,−1)处计算梯度。
- ∂w1∂g 在 (2,−1):6(2)−5(−1)=12+5=17
- ∂w2∂g 在 (2,−1):−5(2)+4(−1)=−10−4=−14
因此,点(2,−1)处的梯度向量是:
∇g(2,−1)=[17−14]
为何要练习这些?
计算偏导数和梯度是理解和实现机器学习 (machine learning)中优化算法所需的一项基本运算能力。当我们训练模型时,通常会有一个取决于许多参数 (parameter)(权重 (weight)和偏差)的成本函数。梯度下降 (gradient descent)利用这个成本函数的梯度,迭代地更新参数,使其朝着成本最小化的方向移动。你将在下一章看到这个过程的运作方式。
花些时间练习这些例子,也许可以尝试自己构造并求导一些简单的函数。你对这些计算越熟悉,优化过程就会越清晰。