让我们花点时间梳理一下前面章节讨论过的概念。请记住,在许多机器学习任务中,我们的主要目的是创建一个能够进行准确预测或分类的模型。但是,我们如何确定何为“准确”,又如何系统地改进模型以达到此目的呢?这正是优化在微积分的指导下发挥作用之处。目标:找到最佳模型参数机器学习模型本质上通常可以表示为一个函数,它有输入(数据特征)和输出(预测)。这个函数也有决定其具体行为的内部参数或权重。例如,对于 $y = mx + b$ 这样的简单线性模型,参数是斜率 $m$ 和 y 截距 $b$。 $m$ 和 $b$ 的不同值会产生不同的直线,从而产生不同的预测。我们的目标是找到这些参数(在我们简单的情况下是 $m$ 和 $b$)的特定值,使模型在我们的数据上表现最佳。“最佳”通常意味着最小化模型产生的误差。衡量性能:成本函数为了系统地找到最佳参数,我们首先需要一种方法来衡量模型当前表现的优劣。这就是成本函数(也称损失函数或目标函数)的作用。成本函数将模型的预测值与我们数据中的实际目标值进行比较,并计算出一个代表总误差或“成本”的单一数值。一个常见例子是均方误差(MSE),它计算预测值与实际值之间差异的平方的平均值。高成本: 模型的预测值与实际值相去甚远。参数可能很差。低成本: 模型的预测值接近实际值。参数表现更好。我们的优化目标变得明确:找到最小化成本函数值的模型参数。算法:梯度下降我们如何找到产生最小成本的参数值呢?我们可以尝试随机值,但这效率极低,尤其是当模型有许多参数时。一个更系统的方法是梯度下降。想象成本函数是一个带有山丘和山谷的地形。任何一点的高度代表了特定参数值组合下的成本。我们的目标是找到山谷中的最低点(一个最小值)。梯度下降是一种迭代算法,帮助我们“走”下这个成本的斜坡:开始: 从参数值的初始猜测开始。计算方向: 确定当前点最陡峭的上升方向。微积分告诉我们这个方向:它就是成本函数的梯度,$\nabla J$。请记住,梯度是一个向量,它包含成本函数对每个参数的偏导数(例如,$\frac{\partial J}{\partial m}$ 和 $\frac{\partial J}{\partial b}$)。梯度指向山坡的上方。迈出一步: 沿着梯度的反方向(下坡)迈出一小步。这一步的大小由学习率控制。重复: 在新位置计算新的梯度,并再迈一步下坡。停止: 持续迭代直到成本足够低,或者步长变得非常小,这表明我们可能已经达到一个最小值。digraph G { rankdir=LR; node [shape=box, style=rounded, fontname="sans-serif", color="#495057"]; edge [fontname="sans-serif", color="#495057"]; Start [label="从初始参数开始", color="#1c7ed6", style="filled, rounded", fontcolor="#ffffff"]; CalcGrad [label="计算梯度\n(最陡峭上升方向)\n∇J", color="#f76707"]; Step [label="更新参数:\n新参数 = 旧参数 - 学习率 * ∇J\n(下坡迈步)", color="#37b24d"]; Check [label="检查成本\n(是否足够低?)", shape=diamond, color="#7048e8"]; Stop [label="停止:\n找到(局部)最小值", color="#1c7ed6", style="filled, rounded", fontcolor="#ffffff"]; Start -> CalcGrad; CalcGrad -> Step; Step -> Check; Check -> CalcGrad [label=" 否"]; Check -> Stop [label=" 是"]; }梯度下降算法的简化流程图。本质上,梯度(由偏导数构成)充当我们的指南针,始终指引我们上坡。通过持续向反方向移动,梯度下降引导我们走向成本函数的一个最小值点,从而找到使模型表现更好的参数值。既然我们已经回顾了优化目标和梯度下降过程,接下来让我们将这些思路应用于一个具体例子:优化一个简单的线性回归模型。