线性回归:梯度下降

梯度下降法是一种数学技术,能够以迭代方式找出权重和偏差,从而生成损失最低的模型。梯度下降法会针对用户指定的多次迭代重复以下过程,以找到最佳权重和偏差。

模型开始训练时使用接近于零的随机权重和偏差,然后重复以下步骤:

  1. 使用当前权重和偏差计算损失。

  2. 确定用于减少损失的权重和偏差的移动方向。

  3. 将权重和偏差值在可减少损失的方向上稍微移动。

  4. 返回第 1 步并重复此过程,直到模型无法进一步降低损失。

下图概述了梯度下降法为找出损失最低的模型权重和偏差所执行的迭代步骤。

图 12. 梯度下降过程示意图。

图 12. 梯度下降是一种迭代过程,用于查找可生成损失最低的模型的权重和偏差。

点击加号图标可详细了解梯度下降背后的数学原理。

具体而言,我们可以使用一个包含 7 个示例的小型数据集来演示梯度下降步骤,这些示例分别对应汽车的重量(以磅为单位)和每加仑行驶里程数:

以千计的英镑(功能) 每加仑英里(标签)
3.5 18
3.69 15
3.44 18
3.43 16
4.34 15
4.42 14
2.37 24
  1. 模型会先将权重和偏差设为零,然后开始训练:
  2. $$ \small{Weight:\ 0} $$ $$ \small{Bias:\ 0} $$ $$ \small{y = 0 + 0(x_1)} $$
  3. 使用当前的模型参数计算 MSE 损失:
  4. $$ \small{Loss = \frac{(18-0)^2 + (15-0)^2 + (18-0)^2 + (16-0)^2 + (15-0)^2 + (14-0)^2 + (24-0)^2}{7}} $$ $$ \small{Loss= 303.71} $$
  5. 计算每个权重和偏差处损失函数的切线斜率:
  6. $$ \small{Weight\ slope: -119.7} $$ $$ \small{Bias\ slope: -34.3} $$

    点击加号图标,了解如何计算斜率。

    为了获取与权重和偏差相切的线的斜率,我们对权重和偏差求导数,然后解方程。

    我们将用于进行预测的方程写为:
    $ f_{w,b}(x) = (w*x)+b $。

    我们将实际值写为:$ y $。

    我们将使用以下公式计算 MSE:
    $ \frac{1}{M} \sum_{i=1}^{M} (f_{w,b}(x_{(i)}) - y_{(i)})^2 $
    其中 $i$ 表示第 $i$ 个训练示例,$M$ 表示示例数量。

    权重导数

    损失函数相对于权重的导数写为:
    $ \frac{\partial }{\partial w} \frac{1}{M} \sum_{i=1}^{M} (f_{w,b}(x_{(i)}) - y_{(i)})^2 $

    其求值结果为:
    $ \frac{1}{M} \sum_{i=1}^{M} (f_{w,b}(x_{(i)}) - y_{(i)}) * 2x_{(i)} $

    首先,我们将每个预测值减去实际值的总和,然后将其乘以特征值的两倍。 然后,将总和除以示例数。 所得结果是直线与权重值相切的斜率。

    如果我们将权重和偏置设为零来求解此方程,则会得到线条的斜率为 -119.7。

    偏向导数

    损失函数相对于偏置的导数写作:
    $ \frac{\partial }{\partial b} \frac{1}{M} \sum_{i=1}^{M} (f_{w,b}(x_{(i)}) - y_{(i)})^2 $

    其求值结果为:
    $ \frac{1}{M} \sum_{i=1}^{M} (f_{w,b}(x_{(i)}) - y_{(i)}) * 2 $

    首先,我们将每个预测值减去实际值的差值求和,然后将其乘以 2。然后,将总和除以示例数。结果是与偏差值相切的线的斜率。

    如果我们用权重和偏差等于零来求解此方程,则直线的斜率为 -34.3。

  7. 向负斜率方向移动一小段距离,即可获得下一个权重和偏差。目前,我们将“小额”定义为 0.01:
  8. $$ \small{New\ weight = old\ weight - (small\ amount * weight\ slope)} $$ $$ \small{New\ bias = old\ bias - (small\ amount * bias\ slope)} $$ $$ \small{New\ weight = 0 - (0.01)*(-119.7)} $$ $$ \small{New\ bias = 0 - (0.01)*(-34.3)} $$ $$ \small{New\ weight = 1.2} $$ $$ \small{New\ bias = 0.34} $$

使用新的权重和偏差计算损失,然后重复上述步骤。完成六次迭代后,我们会得到以下权重、偏差和损失:

迭代 重量 偏差 损失 (MSE)
1 0 0 303.71
2 1.2 0.34 170.67
3 2.75 0.59 67.3
4 3.17 0.72 50.63
5 3.47 0.82 42.1
6 3.68 0.9 37.74

您可以看到,权重和偏差每次更新,损失都会降低。在此示例中,我们在 6 次迭代后停止。实际上,模型会一直训练,直到收敛。当模型收敛时,进行更多迭代不会进一步降低损失,因为梯度下降法已找到几乎能将损失降至最低的权重和偏差。

如果模型在收敛后继续训练,随着模型不断更新参数以使其接近最低值,损失开始小幅波动。因此很难验证模型是否确实已收敛。为了确认模型已收敛,您需要继续训练,直到损失稳定为止。

模型收敛曲线和损失曲线

在训练模型时,您通常会查看损失曲线,以确定模型是否收敛。损失曲线显示了模型训练时损失的变化。典型的损失曲线如下:损失在 y 轴上,迭代次数在 x 轴上:

图 13。损失曲线图,显示先急剧下降,然后缓慢下降。

图 13. 损失曲线,显示模型在第 1,000 次迭代左右收敛。

您可以看到,损失在前几次迭代期间急剧减少,然后逐渐减小,直到第 1000 次迭代标记左右趋于平缓。经过 1,000 次迭代后,我们可以基本确定模型已收敛。

在以下图中,我们在训练过程中的三个时间点绘制了模型:开始、中间和结束。在训练过程中直观呈现模型的快照状态,有助于加深对更新权重和偏差、降低损失和模型收敛之间的联系的理解。

在图中,我们使用特定迭代中派生的权重和偏差来表示模型。在包含数据点和模型快照的图表中,从模型到数据点的蓝色损失线表示损失量。线条越长,损失就越大。

在下图中,我们可以看到,在第二次迭代左右,由于损失较大,模型无法很好地进行预测。

图 14.模型的损失曲线和相应图表,该图表向数据点倾斜。

图 14. 训练流程开始时的损失曲线和模型快照。

在第 400 次迭代左右,我们可以看到,梯度下降法找到了生成更好模型的权重和偏差。

图 15. 损失曲线和模型的相应图表,该图表穿过数据点,但角度不是最佳角度。

图 15. 损失曲线和训练大约中途的模型快照。

在第 1,000 次迭代左右,我们可以看到模型已收敛,生成了损失可能最低的模型。

图 16. 模型的损失曲线及相应图,很好地拟合了数据。

图 16. 接近训练过程结束时的模型的损失曲线和快照。

练习:检查您的理解情况

梯度下降在线性回归中发挥什么作用?
梯度下降法是一种迭代过程,用于找到可最大限度地减少损失的最佳权重和偏差。
梯度下降有助于确定在训练模型时应使用哪种类型的损失函数,例如 L1 或 L2。
梯度下降不会参与选择模型训练的损失函数。
梯度下降会从数据集中移除离群值,以帮助模型做出更准确的预测。
梯度下降不会更改数据集。

收敛和凸函数

线性模型的损失函数始终会生成函数。因此,当线性回归模型收敛时,我们就知道该模型找到了可产生最小损失的权重和偏差。

如果我们为只有一个特征的模型绘制损失函数表面图,可以看到其凸形。以下是前面示例中使用的每加仑行驶里程数据集的损失函数表面。权重在 x 轴上,偏差在 y 轴上,损失在 z 轴上:

图 17. 损失曲面的 3D 图表。

图 17. 显示凸形的损失曲面。

在此示例中,权重为 -5.44 且偏差为 35.94 时,损失最小,为 5.54:

图 18. 损失曲面的 3D 图表,底部显示的是 (-5.44, 35.94, 5.54)。

图 18. 损失曲面,显示损失最低的权重和偏差值。

当线性模型找到最小损失时,它便会收敛。因此,进行更多迭代只会导致梯度下降在最小值附近以极小的量移动权重和偏差值。如果我们绘制梯度下降过程中的权重和偏差点图,这些点看起来就像一个球从山上滚下来,最终停在没有下坡的点。

图 19. 凸的 3D 损失函数表面,其中梯度下降点会移动到最低点。

图 19. 损失图,显示梯度下降点在图的最低点停止。

请注意,黑色损失点形成了损失曲线的确切形状:先急剧下降,然后逐渐向下倾斜,直到达到损失表面上的最低点。

请务必注意,模型几乎从不找到每个权重和偏差的确切最小值,而是找到非常接近该值的值。另请务必注意,权重和偏差的最小值并不对应于零损失,而只是能为该参数产生最低损失的值。

使用损失最低的权重值和偏差值(在本例中权重为 -5.44,偏差为 35.94),我们可以绘制模型图表,查看它与数据的拟合程度:

图 20显示每加仑英里数与以千计的磅数的图表,其中包含用于拟合数据的模型。

图 20. 使用损失最低的权重和偏差值绘制的模型。

这是此数据集的最佳模型,因为没有其他权重和偏差值可以产生损失更低的模型。