偏导数是理解具有多个输入(例如 f(x,y))的函数如何变化的基础。例如,∂x∂f 描述了当 x 变化时 f 如何变化(保持 y 不变)。同样地,∂y∂f 表示当 y 变化时 f 如何变化(保持 x 不变)。
但是,如果我们想用一个单独的对象来表示对所有输入变量的同时变化率,该怎么办?这就是梯度向量 (vector)的作用。
函数 f 的梯度就是一个向量,其每个分量都是 f 的一个偏导数。如果我们的函数有两个输入 x 和 y,它的梯度就是一个二维向量。如果它有 n 个输入 x1,x2,…,xn,它的梯度就是一个 n 维向量。
我们通常用 nabla 符号 ∇ 来表示梯度。对于函数 f(x,y),梯度写作 ∇f 或 ∇f(x,y),定义为:
∇f(x,y)=[∂x∂f∂y∂f]
有时你也会看到它用尖括号水平书写:∇f(x,y)=⟨∂x∂f,∂y∂f⟩。
对于一个有 n 个变量的函数 f(x1,x2,…,xn),梯度是:
∇f=∂x1∂f∂x2∂f⋮∂xn∂f
简单来说,梯度将所有一阶偏导数打包成一个方便的向量。
例子:计算梯度
让我们以函数 f(x,y)=x2+5xy 为例。
-
求偏导数:
- 将 y 视为常数来求 ∂x∂f:
∂x∂f=∂x∂(x2)+∂x∂(5xy)=2x+5y
- 将 x 视为常数来求 ∂y∂f:
∂y∂f=∂y∂(x2)+∂y∂(5xy)=0+5x=5x
-
组合梯度向量 (vector):
∇f(x,y)=[∂x∂f∂y∂f]=[2x+5y5x]
这个梯度 ∇f(x,y) 给出了一个向量,它取决于我们所考虑的点 (x,y)。例如,在点 (1,2) 处:
∇f(1,2)=[2(1)+5(2)5(1)]=[2+105]=[125]
在点 (−1,0) 处:
∇f(−1,0)=[2(−1)+5(0)5(−1)]=[−2−5]
因此,梯度本身是一个函数,它以点 (x,y) 为输入并输出一个向量。这个向量包含有关函数 f 在该特定点附近行为的重要信息,我们将在下一节中进行更详细的讨论。在机器学习 (machine learning)中,成本函数的梯度告诉我们如何调整模型参数 (parameter)(如输入 x1,x2,…,xn)以改变成本。