让我们把理论付诸实践。我们已经了解到导数如何识别函数的斜率,并帮助找出斜率为零的点,这些点通常对应着最小值或最大值。这直接适用于机器学习 (machine learning)中的一项根本任务:最小化成本函数。
什么是成本函数?
在机器学习 (machine learning)中,成本函数(也称作损失函数 (loss function)或目标函数)衡量模型表现的好坏。具体来说,它量化 (quantization)了模型预测值与实际目标值之间的差异。成本越低表示表现越好;训练模型的目的通常是找到使成本达到最小的模型参数 (parameter)。
在一个简化的场景中,模型只有一个参数,称之为 w。该参数控制着模型的输出。成本函数 J(w) 表示与特定 w 值相关的“成本”。目标是找到使 J(w) 最小化的 w 值。
一个简单例子:二次成本
成本函数的一种常见且数学上便利的形式是二次函数。让我们定义一个简单的成本函数如下:
J(w)=(w−3)2+2
在这里,J(w) 代表给定参数 (parameter)值 w 时的成本。我们想要找到使成本 J(w) 最小的 w 值。从图形上看,这个函数是一个开口向上的抛物线。
成本函数为 J(w)=(w−3)2+2。最小成本出现在 w=3 处。
我们如何使用微积分从数学上找到这个最小值?
步骤 1:求导数
我们计算 J(w) 关于 w 的一阶导数。使用幂次法则和链式法则(或者先展开平方),我们得到:
J′(w)=dwdJ=dwd((w−3)2+2)
J′(w)=2(w−3)1⋅dwd(w−3)+0
J′(w)=2(w−3)⋅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)=dw2d2J=dwd(J′(w))=dwd(2w−6)
J′′(w)=2
现在,我们在驻点 w=3 处计算二阶导数:
J′′(3)=2
由于 J′′(3)=2>0,函数在 w=3 处是向上凹的。这证实了 w=3 对应着一个局部最小值。因为我们的成本函数是一个简单的开口向上的抛物线,所以这个局部最小值也是全局最小值。
与机器学习 (machine learning)的关联
这个简单例子阐明了优化许多机器学习模型背后的核心思想:
- 定义成本函数: 构造一个函数 J,它根据模型的参数 (parameter)(此处仅为 w)来衡量模型的误差。
- 计算导数(或梯度): 找出成本函数相对于每个参数的导数。这说明了当你调整参数时,成本如何变化。
- 寻找最小值: 使用微积分方法找出导数为零(并满足最小化条件,例如二阶导数为正)的参数值。这会确定使成本最小的参数,从而得到在该成本函数下表现“最佳”的模型。
在实际的机器学习问题中,成本函数通常依赖于数百万个参数,而不仅仅是一个。此外,如果函数非常复杂,通过直接将导数(或多变量情况下的梯度)设为零来寻找最小值可能会在计算上不可行或不可能。
这就是为什么我们经常依赖迭代算法,例如梯度下降 (gradient descent)(我们将在第 4 章中详细讨论)。梯度下降使用导数,不是直接求解最小值,而是确定调整参数的方向,从而一步步逐渐趋近最小成本。然而,根本原理保持不变:导数指引优化过程。
“接下来,我们将把这些思想推广到具有多个输入变量的函数,这对于处理机器学习模型的复杂性很重要。”