Better Explained
梯度(gradient)是一个花哨的词,其实质就是导数,或者说函数的变化率。它是一个向量(即一个移动的方向),具有以下特点:
- 指向函数增长最快的方向;
- 在局部极大值或极小值处为零(因为在这些点上不存在单一的增长方向)。
“梯度”一词通常用于具有多个输入变量和一个输出(标量场)的函数。当然,你也可以说一条直线有梯度(即它的斜率),但在单变量函数中使用“梯度”这个词容易引起混淆。保持简单就好。
“梯度”也可以指颜色的渐变,不过我们这里只讨论数学定义(如果你不介意的话)。你会发现这两种含义其实是相关的。
梯度的性质
既然我们已经知道梯度是多变量函数的导数,接下来推导一些它的性质。
普通的、老式的导数给出的是单个变量的变化率,通常是 。例如, 告诉我们当 发生变化时,函数 会改变多少。但如果一个函数有多个变量,比如 和 ,那么它就会有多个导数:当我们“轻微扰动” (即 )或扰动 (即 )时,函数值都会发生变化。
我们可以把这些多个变化率组合成一个向量,每个分量对应一个偏导数。因此,一个具有三个变量的函数将拥有一个包含三个分量的梯度:
- 只有一个变量,因此只有一个导数:
- 有三个变量,因此有三个偏导数:
多变量函数的梯度在每个方向上都有一个分量。
就像普通导数一样,梯度也指向函数增长最快的方向(我们在各个方向上的移动进行权衡,以最大化收益)。
然而,现在我们有了多个方向需要考虑( 、 和 ),最大增长方向不再像单变量函数那样只是沿着 轴“向前”或“向后”。
如果我们有两个变量,那么这个二维梯度就可以指定平面上任意一个方向。同样地,对于三个变量,梯度可以指定三维空间中的任意方向,以使函数值增加。
一个扭曲的例子
我非常喜欢用例子来巩固理解。假设我们有一台神奇的烤箱,上面标有坐标,并配有一个特殊的显示屏:

我们可以输入任意三个坐标(比如 “3,5,2”),显示屏就会告诉我们该点温度的梯度。
这台微波炉还附带一个方便的时钟。不幸的是,这个时钟是有代价的——微波炉内部不同位置的温度差异非常大。但这是值得的:我们真的很想要那个时钟。
明白了吗?我们输入任意坐标,微波炉就会吐出该位置的梯度。
注意不要混淆坐标和梯度。坐标是我们当前的位置,在 、 、 轴上测量得到;而梯度是从当前位置出发的一个移动方向,比如向上、向下、向左或向右。
现在假设我们需要心理医生的帮助,把品食乐面团小子(Pillsbury Dough Boy)放进烤箱,因为我们觉得他应该很好吃。他不是由饼干面团做的吗?我们将他随机放在烤箱内的某个位置,目标是以最快的速度把他烤熟。梯度可以帮我们!
某一点的梯度指向函数增长最快的方向。在这里,我们的函数衡量的是温度。因此,梯度告诉我们应朝哪个方向移动面团小子,才能让他到达温度更高的地方,从而更快地被烤熟。记住,梯度并不直接告诉我们该去哪个坐标;它只告诉我们为了提高温度应朝哪个方向移动。
因此,我们可以从一个随机点开始,比如 (3,5,2),并查看该点的梯度。假设此处的梯度是 (3,4,5)。我们当然不会真的向右移动整整 3 个单位、向后 4 个单位、再向上 5 个单位。梯度只是一个方向,所以我们只需沿着这个方向走一小步,然后再次检查梯度。
我们会到达一个离起点很近的新点,那里也有自己的梯度。这个新的梯度就是下一步要遵循的最佳方向。我们会不断重复这个过程:沿梯度方向走一小步,检查新梯度,再沿新梯度方向走一小步。每次我们轻轻推动并跟随梯度,都会到达一个更热的地方。
最终,我们会到达烤箱中最热的位置,并停留在那里,准备享用新鲜出炉的饼干。
别吃那块饼干!
但在你吃掉那些饼干之前,让我们对梯度做一些观察。这样更有趣,对吧?
首先,当我们到达烤箱最热的点时,那里的梯度是多少?
零。没有。空。 为什么?因为一旦你处于最大值位置,就不再存在增长最快的方向了。无论你朝哪个方向移动,温度都会下降。这就像是站在山顶:任何方向都是下坡。零梯度告诉你:待着别动——你已经处于函数的最大值,无法做得更好了。
但如果附近有两个极大值呢?比如两座相邻的山?你可能站在其中一座山顶,但旁边还有一座更高的山。为了到达最高点,你必须先下坡。
啊哈,现在我们进入了梯度不太美好的一面。在普通(单变量)函数中寻找最大值意味着我们要找出所有导数为零的点:这些点没有增长方向。你还记得吧,普通导数会指出局部最小值和最大值,而全局最大/最小值必须通过测试这些候选点来确定。
同样的原理适用于梯度——它是导数的推广。你必须找到多个梯度为零的点,然后测试这些点,看哪个是全局最大值。再次强调,每座山顶的梯度都是零——你需要比较各山顶的高度,才能知道哪座更高。现在这个问题已经澄清了,去享受你的饼干吧!
数学表达
我们知道梯度的定义:函数对每个变量的导数。梯度符号通常是一个倒置的 delta(Δ),称为“del”(这有点道理——delta 表示单个变量的变化,而梯度表示所有变量的变化)。以上面提到的三个导数为例:
注意,梯度的 分量是关于 的偏导数( 和 同理)。对于单变量函数,根本不存在 或 分量,因此梯度就退化为普通导数。
另外请注意,梯度本身也是一个函数:它接收一个三维坐标作为位置输入,并返回一个三维向量作为方向输出。
例如:
如果我们想知道朝哪个方向移动能使函数值增长最快,只需将当前坐标(比如 3,4,5)代入梯度,得到:
因此,这个新向量 (1, 8, 75) 就是我们应移动的方向,以最快地增加函数值。在这个例子中,$x$ 分量对函数值的贡献不大:它的偏导数始终是 1。
梯度最明显的应用是寻找多变量函数的最大值或最小值。另一个不太明显但相关的应用是寻找约束函数的最大值:即函数的 和 值必须位于某个特定区域内(例如,在一个圆周上寻找最大值)。解决这类问题需要用到我的老朋友拉格朗日(Lagrange),不过别急,时候未到:先好好享受梯度吧。
关键在于认识到:梯度是导数的推广。梯度指向增长最快的方向;只要持续跟随梯度,你就能到达局部最大值。
问题
为什么梯度垂直于等势线?
等势线(“equipotential lines”)是指函数值(或能量)相等的点构成的曲线。最简单的例子是圆:圆上所有点到中心的距离都相同。
梯度代表变化最快的方向。如果梯度在等势线上有任何分量,那就意味着它在朝着一个能量相同的点移动——这种移动是“浪费”的(因为并没有真正增加能量)。只有当梯度与等势线垂直时,它才真正远离这些等值点,实现最大变化。