一个简单的线性回归模型 $y = mx + b$,使用其成本函数 $J(m, b)$ 来衡量直线与数据的拟合程度。此成本函数的梯度被计算为一个包含偏导数 $\frac{\partial J}{\partial m}$ 和 $\frac{\partial J}{\partial b}$ 的向量。这些导数表明了当我们微调 $m$ 或 $b$ 时成本如何变化。那么,我们究竟如何运用这些梯度来改进模型参数并最小化成本呢?这就是梯度下降算法发挥作用的地方。可以将成本函数 $J(m, b)$ 看作定义了一个曲面,也许像一个有山有谷的地形。我们的目标是找到这个地形中的最低点,即最小成本。参数 $m$ 和 $b$ 定义了我们在这个曲面上的当前位置。梯度 $\nabla J = \left[ \frac{\partial J}{\partial m}, \frac{\partial J}{\partial b} \right]$ 在我们当前位置指向的是最陡峭的上升方向,即上坡最快的路径。由于我们想要最小化成本,所以需要下坡。因此,我们朝着与梯度相反的方向迈出一步。这便引出了梯度下降的核心更新规则。对于每个参数,我们通过减去一个与其偏导数成比例的小量来调整其当前值:更新斜率 $m$: $$ m_{\text{新}} = m_{\text{旧}} - \alpha \frac{\partial J}{\partial m} $$更新 y 轴截距 $b$: $$ b_{\text{新}} = b_{\text{旧}} - \alpha \frac{\partial J}{\partial b} $$这里,$m_{\text{旧}}$ 和 $b_{\text{旧}}$ 是更新步骤之前的参数值,而 $m_{\text{新}}$ 和 $b_{\text{新}}$ 是更新步骤之后的值。梯度 $\frac{\partial J}{\partial m}$ 和 $\frac{\partial J}{\partial b}$ 是使用当前值($m_{\text{旧}}$,$b_{\text{旧}}$)计算的。请注意更新规则中的符号 $\alpha$(阿尔法)。这是学习率,我们将在下一节中进行讨论。现在,可以将其视为控制我们下坡所迈步的大小。它是一个小的正数(例如,0.01,0.1)。如果梯度分量(例如 $\frac{\partial J}{\partial m}$)为正,则表示增加 $m$ 会增加成本。因此,更新规则会减去一个正值($\alpha \times \text{正梯度}$),从而有效地减小 $m$。如果梯度分量为负,则增加 $m$ 会减小成本。更新规则会减去一个负值($\alpha \times \text{负梯度}$),这意味着我们增加 $m$,使其朝着降低成本的方向移动。对 $m$ 和 $b$ 的这种单一计算和更新构成了梯度下降的一步。digraph G { rankdir=LR; node [shape=box, style=rounded, fontname="helvetica", fontsize=10, margin=0.05]; edge [fontname="helvetica", fontsize=9]; subgraph cluster_0 { label = "梯度下降步骤"; bgcolor="#e9ecef"; // Light gray background color="#adb5bd"; // Border color start [label="从当前\n(m, b) 开始", shape=ellipse, style=filled, fillcolor="#a5d8ff"]; calc_grad [label="计算梯度\n∇J = [ ∂J/∂m, ∂J/∂b ]", style=filled, fillcolor="#96f2d7"]; update [label="更新参数\nm -= α * (∂J/∂m)\nb -= α * (∂J/∂b)", style=filled, fillcolor="#ffec99"]; end_step [label="得到新的\n(m, b)", shape=ellipse, style=filled, fillcolor="#bac8ff"]; start -> calc_grad [label=" 使用当前值"]; calc_grad -> update [label=" 使用梯度\n + 学习率 (α)"]; update -> end_step; } loop_back [shape=none, margin=0, label="重复\n过程"]; end_step -> loop_back [style=dashed, arrowhead=none, color="#868e96"]; loop_back -> start [style=dashed, label=" 使用新的 (m,b)", color="#868e96"]; }该图显示了梯度下降中单次更新的流程。从当前模型参数开始,使用这些参数计算成本函数的梯度,然后通过沿梯度相反的方向微小移动来更新参数。此过程通常会重复多次。理解梯度下降是一种迭代算法很重要。通常,一步不足以达到最小成本。我们多次重复这个过程,计算梯度并更新参数。每一步,我们(希望)都会更接近最小化成本函数所需的 $m$ 和 $b$ 值,从而得到一个拟合度更好的线性回归模型。这一步,在计算出的导数引导下,是许多机器学习模型从数据中学习的基本机制。通过重复调整参数以减少误差(成本)的方向,模型逐步提高其预测能力。