我们来思考一下,训练一个机器学习模型究竟是什么意思。机器学习模型通常可以表示为数学函数。比如,一个简单的线性回归模型尝试通过函数 $f(x) = mx + b$ 根据输入 $x$ 预估输出 $y$。但是,我们如何从训练数据中找出参数 $m$(斜率)和 $b$(截距)的最恰当值呢?这就是优化发挥作用之处。在机器学习中,优化是指为模型寻找一组参数,使其在训练数据上达到尽可能好的表现。但是,“好”是什么意思?我们需要一种方法来评估模型运行的优劣(或者更普遍地说,劣)。这个评估指标通常被称为成本函数或损失函数。成本函数,常用 $J$ 表示,它接收模型的预测值和训练数据中的真实目标值,然后计算出一个数值,用来衡量总体误差或“成本”。例如,回归问题的一个常用成本函数是均方误差(MSE),它算出预测值与实际值之间平方差的平均数。如果我们的模型参数由向量 $\theta$ (theta) 表示,那么成本函数 $J$ 会依据这些参数:$J(\theta)$。那么,优化的目的是确定特定的参数集合 $\theta^*$,使成本函数最小化:$$ \theta^* = \arg \min_{\theta} J(\theta) $$这个公式表达为:“$\theta^*$ 是使成本函数 $J(\theta)$ 最小化的自变量(参数取值)$\theta$。”可以把成本函数想象成一个曲面,曲面上的位置由模型参数的取值决定,而曲面的高度则代表成本。我们的目的是找到这个曲面上的最低点。设想一个非常简单的情形,我们只有一个参数,称之为 $w$。成本函数 $J(w)$ 可能看起来像一条曲线。优化就是找出这条曲线底部的 $w$ 值。{"layout": {"title": "简单成本函数与参数的关系", "xaxis": {"title": "参数 (w)"}, "yaxis": {"title": "成本 J(w)"}}, "data": [{"x": [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5], "y": [27, 18, 11, 6, 3, 2, 3, 6, 11, 18, 27], "mode": "lines+markers", "name": "成本", "line": {"color": "#228be6"}, "marker": {"color": "#1c7ed6"}}, {"x": [0], "y": [2], "mode": "markers", "name": "最小成本", "marker": {"symbol": "x", "size": 10, "color": "#f03e3e"}}]}当参数 $w$ 等于0时,成本 $J(w)$ 达到最小值。优化旨在确定这个最低点。对于拥有大量参数的模型(深度学习中可达百万),这个“曲面”存在于高维空间,使得可视化变得不可能。我们不能只看图就找出最小值。我们需要一种系统化的算法方法来遍历这个复杂的曲面,并找到最低点,或者至少是一个很低的点。这正是微积分变得不可或缺之处。正如我们在前一节中简略地提到,导数衡量函数的变化率或斜率。通过计算成本函数相对于模型参数的导数(或其多变量对应物——梯度,我们稍后会介绍),我们可以判明成本增加最快的方向。为了使成本最小化,我们只需朝相反方向移动即可。这种迭代计算方向并迈进的过程,是许多机器学习优化算法的根本,其中最著名的就是梯度下降。本质上,优化衔接了拥有模型结构和拥有一个能在数据上实际运作良好的模型之间的距离。它是推动学习过程的引擎,而微积分提供了构建并理解这个引擎的基本工具。