单变量微积分通常通过识别导数 $f'(x) = 0$ 的临界点来寻找函数 $f(x)$ 的潜在最小值和最大值。在这些点,切线是水平的,表明函数暂时平坦。随后,二阶导数 $f''(x)$ 可以用于对这些点进行分类:$f''(x) > 0$ 表示局部最小值(向上凹),而 $f''(x) < 0$ 表示局部最大值(向下凹)。我们可以将此思想推广到多变量函数,例如 $f(x, y)$,或更一般地表示为 $f(\mathbf{x})$,其中 $\mathbf{x}$ 是一个变量向量 $(x_1, x_2, ..., x_n)$。借助梯度寻找临界点对于多变量函数,导数为零的对应物是梯度向量为零向量。函数 $f(\mathbf{x})$ 的临界点(或驻点)$\mathbf{x}_0$ 是梯度为零的点:$$ \nabla f(\mathbf{x}_0) = \mathbf{0} $$请记住,梯度 $\nabla f$ 是一个包含所有偏导数的向量:$\nabla f = \left( \frac{\partial f}{\partial x_1}, \frac{\partial f}{\partial x_2}, ..., \frac{\partial f}{\partial x_n} \right)$。因此,条件 $\nabla f(\mathbf{x}_0) = \mathbf{0}$ 意味着在 $\mathbf{x}_0$ 处,所有偏导数必须同时为零:$$ \frac{\partial f}{\partial x_1}(\mathbf{x}_0) = 0, \quad \frac{\partial f}{\partial x_2}(\mathbf{x}_0) = 0, \quad ..., \quad \frac{\partial f}{\partial x_n}(\mathbf{x}_0) = 0 $$这直观地意味着什么?梯度指向最陡峭上升的方向。如果梯度是零向量,则表示从该点没有上升(或下降)的方向。函数在所有平行于输入轴的方向上局部“平坦”。就像单变量情况一样,这些临界点可能是局部最小值、局部最大值或其他类型的点。临界点分类:海森矩阵的作用在单变量情况下,仅有零导数不足够;我们需要二阶导数判别法。对于多变量函数,包含所有二阶偏导数的海森矩阵 $\mathbf{H}$ 扮演着二阶导数的角色。$$ \mathbf{H} = \begin{pmatrix} \frac{\partial^2 f}{\partial x_1^2} & \frac{\partial^2 f}{\partial x_1 \partial x_2} & \cdots & \frac{\partial^2 f}{\partial x_1 \partial x_n} \ \frac{\partial^2 f}{\partial x_2 \partial x_1} & \frac{\partial^2 f}{\partial x_2^2} & \cdots & \frac{\partial^2 f}{\partial x_2 \partial x_n} \ \vdots & \vdots & \ddots & \vdots \ \frac{\partial^2 f}{\partial x_n \partial x_1} & \frac{\partial^2 f}{\partial x_n \partial x_2} & \cdots & \frac{\partial^2 f}{\partial x_n^2} \end{pmatrix} $$在临界点 $\mathbf{x}_0$(其中 $\nabla f(\mathbf{x}_0) = \mathbf{0}$)评估海森矩阵有助于我们了解函数在该点附近的曲率。多变量函数的二阶导数判别法使用海森矩阵 $\mathbf{H}(\mathbf{x}_0)$ 的性质:局部最小值: 如果 $\mathbf{H}(\mathbf{x}_0)$ 是正定的,则 $f$ 在 $\mathbf{x}_0$ 处有局部最小值。直观地,这意味着函数在从 $\mathbf{x}_0$ 辐射的所有方向上“向上凹”。 (如果对于所有非零向量 $\mathbf{v}$,都有 $\mathbf{v}^T \mathbf{H} \mathbf{v} > 0$,则矩阵是正定的。这通常对应于所有特征值均为正)。局部最大值: 如果 $\mathbf{H}(\mathbf{x}_0)$ 是负定的,则 $f$ 在 $\mathbf{x}_0$ 处有局部最大值。这意味着函数在所有方向上“向下凹”。 (负定通常对应于所有特征值均为负)。鞍点: 如果 $\mathbf{H}(\mathbf{x}_0)$ 是不定的(意味着它既不正定也不负定,通常同时具有正负特征值),则 $f$ 在 $\mathbf{x}_0$ 处有鞍点。这是函数在某些方向上向上弯曲而在其他方向上向下弯曲的点,像马鞍一样。请看下面的图示。不确定: 如果海森矩阵判别法没有结论(例如,如果它是正半定或负半定,意味着某些特征值可能为零),则需要其他方法。对于机器学习中的大多数优化问题,我们主要关注于寻找局部(或理想情况下全局)最小值。鞍点对某些优化算法构成一个难题,因为梯度为零,可能中止进展,即使它不是最小值。{"data":[{"type":"surface","x":[-2,-1,0,1,2,-2,-1,0,1,2,-2,-1,0,0,0,1,1,1,1,1,2,2,2,2,2],"y":[-2,-2,-2,-2,-2,-1,-1,-1,-1,-1,0,0,0,0,0,1,1,1,1,1,2,2,2,2,2],"z":[0,-3,-4,-3,0,-3,0,-1,0,-3,-4,-1,0,-1,-4,-3,0,-1,0,-3,0,-3,-4,-3,0],"colorscale":"Viridis","showscale":false,"contours":{"z":{"show":true,"usecolormap":true,"highlightcolor":"#42f4df","project":{"z":true}}}},{"type":"scatter3d","x":[0],"y":[0],"z":[0],"mode":"markers","marker":{"color":"#fa5252","size":8,"symbol":"diamond"},"name":"鞍点"}],"layout":{"title":"鞍点示例:z = x² - y²","scene":{"xaxis":{"title":"x"},"yaxis":{"title":"y"},"zaxis":{"title":"z"}},"margin":{"l":0,"r":0,"b":0,"t":40},"width":600,"height":450}}在函数 $f(x, y) = x^2 - y^2$ 的原点 (0,0) 处,梯度 $\nabla f = (2x, -2y)$ 为 $(0, 0)$。海森矩阵是 $\begin{pmatrix} 2 & 0 \ 0 & -2 \end{pmatrix}$,它是不定的。这表明是一个鞍点:函数沿x轴增加但沿y轴减小。与机器学习的关联性在机器学习中,我们想要优化的函数 $f$ 通常是成本函数或损失函数,它衡量模型表现有多差。变量 $\mathbf{x}$ 是模型的参数(权重和偏置)。我们的目标几乎总是最小化此成本函数。因此,寻找成本函数关于参数的梯度为零的点是一个基本步骤。虽然使用海森矩阵的二阶导数判别法提供了一种分类这些点的方法,但计算和分析海森矩阵可能计算成本高昂,特别是对于具有数百万参数的模型(如深度神经网络)。此外,对于复杂的机器学习模型,通过解析地求解偏导数方程组来寻找 $\nabla f = \mathbf{0}$ 的点通常是难以处理的。这促使使用迭代优化算法,例如梯度下降(我们将在下一章中介绍),它们使用梯度 $\nabla f$ 来遍历成本曲面并逐步移向最小值,而无需计算海森矩阵或显式地求解 $\nabla f = \mathbf{0}$。然而,理解梯度、临界点和曲率的原理对于理解这些算法如何以及为何有效,以及它们可能遇到哪些难题(例如鞍点)仍然非常重要。