让我们把理论付诸实践。我们已经了解到导数如何识别函数的斜率,并帮助找出斜率为零的点,这些点通常对应着最小值或最大值。这直接适用于机器学习中的一项根本任务:最小化成本函数。什么是成本函数?在机器学习中,成本函数(也称作损失函数或目标函数)衡量模型表现的好坏。具体来说,它量化了模型预测值与实际目标值之间的差异。成本越低表示表现越好;训练模型的目的通常是找到使成本达到最小的模型参数。在一个简化的场景中,模型只有一个参数,称之为 $w$。该参数控制着模型的输出。成本函数 $J(w)$ 表示与特定 $w$ 值相关的“成本”。目标是找到使 $J(w)$ 最小化的 $w$ 值。一个简单例子:二次成本成本函数的一种常见且数学上便利的形式是二次函数。让我们定义一个简单的成本函数如下:$$ J(w) = (w - 3)^2 + 2 $$在这里,$J(w)$ 代表给定参数值 $w$ 时的成本。我们想要找到使成本 $J(w)$ 最小的 $w$ 值。从图形上看,这个函数是一个开口向上的抛物线。{"data": [{"x": [0, 1, 2, 3, 4, 5, 6], "y": [11, 6, 3, 2, 3, 6, 11], "type": "scatter", "mode": "lines", "name": "J(w)", "line": {"color": "#339af0"}}, {"x": [3], "y": [2], "type": "scatter", "mode": "markers", "name": "最小值", "marker": {"color": "#fa5252", "size": 10}}], "layout": {"title": "简单二次成本函数 J(w)", "xaxis": {"title": "参数 w"}, "yaxis": {"title": "成本 J(w)"}, "showlegend": false, "width": 600, "height": 400}}成本函数为 $J(w) = (w - 3)^2 + 2$。最小成本出现在 $w=3$ 处。我们如何使用微积分从数学上找到这个最小值?步骤 1:求导数我们计算 $J(w)$ 关于 $w$ 的一阶导数。使用幂次法则和链式法则(或者先展开平方),我们得到:$$ J'(w) = \frac{dJ}{dw} = \frac{d}{dw} ((w - 3)^2 + 2) $$ $$ J'(w) = 2(w - 3)^{1} \cdot \frac{d}{dw}(w - 3) + 0 $$ $$ J'(w) = 2(w - 3) \cdot 1 $$ $$ J'(w) = 2w - 6 $$这个导数 $J'(w) = 2w - 6$ 告诉我们成本函数在任意给定 $w$ 值处的斜率。步骤 2:寻找驻点(将导数设为零)为了找到可能的最小值或最大值,我们寻找斜率为零的点。我们将一阶导数设为零,然后解出 $w$:$$ J'(w) = 0 $$ $$ 2w - 6 = 0 $$ $$ 2w = 6 $$ $$ w = 3 $$这表明 $w=3$ 是一个驻点,在该点函数上的切线是水平的。步骤 3:使用二阶导数判别法$w=3$ 是最小值、最大值还是其他情况?我们可以使用二阶导数判别法。让我们找出二阶导数 $J''(w)$:$$ J''(w) = \frac{d^2J}{dw^2} = \frac{d}{dw}(J'(w)) = \frac{d}{dw}(2w - 6) $$ $$ J''(w) = 2 $$现在,我们在驻点 $w=3$ 处计算二阶导数:$$ J''(3) = 2 $$由于 $J''(3) = 2 > 0$,函数在 $w=3$ 处是向上凹的。这证实了 $w=3$ 对应着一个局部最小值。因为我们的成本函数是一个简单的开口向上的抛物线,所以这个局部最小值也是全局最小值。与机器学习的关联这个简单例子阐明了优化许多机器学习模型背后的核心思想:定义成本函数: 构造一个函数 $J$,它根据模型的参数(此处仅为 $w$)来衡量模型的误差。计算导数(或梯度): 找出成本函数相对于每个参数的导数。这说明了当你调整参数时,成本如何变化。寻找最小值: 使用微积分方法找出导数为零(并满足最小化条件,例如二阶导数为正)的参数值。这会确定使成本最小的参数,从而得到在该成本函数下表现“最佳”的模型。在实际的机器学习问题中,成本函数通常依赖于数百万个参数,而不仅仅是一个。此外,如果函数非常复杂,通过直接将导数(或多变量情况下的梯度)设为零来寻找最小值可能会在计算上不可行或不可能。这就是为什么我们经常依赖迭代算法,例如梯度下降(我们将在第 4 章中详细讨论)。梯度下降使用导数,不是直接求解最小值,而是确定调整参数的方向,从而一步步逐渐趋近最小成本。然而,根本原理保持不变:导数指引优化过程。“接下来,我们将把这些思想推广到具有多个输入变量的函数,这对于处理机器学习模型的复杂性很重要。”