对于一个有多个输入的函数,比如 $f(x, y)$,可以计算它的偏导数,即 $\frac{\partial f}{\partial x}$ 和 $\frac{\partial f}{\partial y}$。这些偏导数被组合成梯度向量,通常写作 $\nabla f$:$$ \nabla f(x, y) = \left[ \frac{\partial f}{\partial x}, \frac{\partial f}{\partial y} \right] $$但是,这个向量究竟是什么含义呢?实际上,梯度不仅仅是列出偏导数的一种便捷方式;它拥有强大的几何解释,这对于机器学习中的优化而言非常重要。梯度指向“上坡”方向想象你正站在一个山坡上。地形代表函数 $f(x, y)$ 的值, $x$ 和 $y$ 是你的坐标(例如东西方向和南北方向),高度 $z = f(x, y)$ 是你的海拔。在你所站的任何一点,你可以迈向许多方向。有些方向是上坡,有些是下坡,有些则可能让你保持在相同海拔(沿着等高线移动)。你当前位置的梯度向量 $\nabla f$ 直接指向最陡峭上坡路径的方向。如果你想尽可能快地爬山,就应该沿着梯度指示的方向行走。可以这样理解:$\frac{\partial f}{\partial x}$ 告诉你如果纯粹在 x 方向(东西方向)迈一小步,你的海拔会变化多快。$\frac{\partial f}{\partial y}$ 告诉你如果纯粹在 y 方向(南北方向)迈一小步,你的海拔会变化多快。梯度向量 $\nabla f$ 结合这些单独的变化率,指向函数值(你的海拔)增加最快的整体方向。梯度的可视化等高线图是可视化这一点的好方法。等高线图显示连接函数值相同点的线,就像地形图上的等高线一样。考虑函数 $f(x, y) = x^2 + y^2$,它看起来像一个碗状。它的最小值在原点 (0, 0) 处为 0。等高线是围绕原点的圆。偏导数是 $\frac{\partial f}{\partial x} = 2x$ 和 $\frac{\partial f}{\partial y} = 2y$。所以,梯度是 $\nabla f(x, y) = [2x, 2y]$。让我们看看在特定点,比如 $(1, 1)$ 上的梯度。 $\nabla f(1, 1) = [2(1), 2(1)] = [2, 2]$。这个向量对角线向外,远离原点的最小值。如果我们绘制等高线并画出不同点的梯度向量,你会发现两点:任何一点的梯度向量都垂直(正交)于穿过该点的等高线。梯度向量总是指向函数值更高的方向(上坡)。{"data":[{"type":"contour","x":[-2,-1.5,-1,-0.5,0,0.5,1,1.5,2],"y":[-2,-1.5,-1,-0.5,0,0.5,1,1.5,2],"z":[[8,5.25,4,3.25,4,5.25,8],[5.25,3.25,2,1.25,2,3.25,5.25],[4,2,1,0.25,1,2,4],[3.25,1.25,0.25,0,0.25,1.25,3.25],[4,2,1,0.25,1,2,4],[5.25,3.25,2,1.25,2,3.25,5.25],[8,5.25,4,3.25,4,5.25,8]],"colorscale":"Blues","contours":{"coloring":"lines","showlabels":true,"labelfont":{"size":10,"color":"black"}}}, {"type":"scatter","x":[1, -1, 0.5, -1.5],"y":[1, 1, -1.5, -0.5],"mode":"markers","marker":{"color":"#f03e3e","size":8},"name":"点"},{"type":"cone","x":[1, -1, 0.5, -1.5],"y":[1, 1, -1.5, -0.5],"u":[2, -2, 1, -3],"v":[2, 2, -3, -1],"w":[0, 0, 0, 0],"colorscale":[["0","#fa5252"],["1","#fa5252"]],"sizeref":2,"showscale":false,"anchor":"tip","name":"梯度 (∇f)"}],"layout":{"title":{"text":"函数 f(x,y) = x^2 + y^2 等高线图上的梯度向量","font":{"size":14}},"xaxis":{"title":"x","range":[-2.2, 2.2]},"yaxis":{"title":"y","range":[-2.2, 2.2],"scaleanchor":"x","scaleratio":1},"width":500,"height":450,"legend":{"font":{"size":10}}}}函数 $f(x, y) = x^2 + y^2$ 在不同点上的梯度向量(红色箭头)。注意它们如何远离最小值 (0,0) 并垂直于圆形等高线(蓝色)。梯度的长度梯度向量不仅告诉我们最陡峭上升的方向;它的长度告诉我们那个上升实际有多陡峭。梯度的长度,表示为 $||\nabla f||$,使用勾股定理计算: $$ ||\nabla f(x, y)|| = \sqrt{\left(\frac{\partial f}{\partial x}\right)^2 + \left(\frac{\partial f}{\partial y}\right)^2} $$ 梯度的长度越大,意味着函数值在梯度方向上增加得越快。如果你在山上非常陡峭的部分,梯度向量会很长。如果你在相对平坦的部分,梯度向量会很短。在山顶或谷底(最小值或最大值),地面完全平坦时,梯度向量的长度为零:$\nabla f = [0, 0]$。与优化的关联这个几何含义对于机器学习来说非常重要。许多机器学习算法通过尝试最小化成本函数(或损失函数)来工作。这个成本函数衡量模型的表现有多差。最小化成本意味着找到能带来最佳表现的模型参数。再次将成本函数想象成崎岖的地形。我们想找到谷底的最低点。梯度告诉我们最陡峭的上升方向(上坡)。所以,如果我们想尽可能快地下坡走向最小值,我们就应该沿着与梯度相反的方向移动。这个方向,即 $-\nabla f$,就是最陡峭的下降方向。这是梯度下降背后的核心思想,它是我们之前介绍过并将进一步讨论的一种优化算法。通过重复计算成本函数的梯度并沿着相反方向迈小步,我们可以迭代地走向最小值点,从而优化我们的机器学习模型。总而言之,梯度 $\nabla f$ 是一个向量,它:指向函数 $f$ 增加最快的方向。其长度 $||\nabla f||$ 等于该最大增加率。理解这一点使我们能够在成本函数的复杂曲面上寻找方向,并找到使机器学习模型误差最小化的参数值。