更新于 2026年8月13日

线性回归:理解损失函数#

原页面: https://developers.google.com/machine-learning/crash-course/linear-regression/loss

「损失(Loss)」 是一个数值指,也就是说它是一个标量,它用来描述模型的预测(Prediction)结果到底如何。损失用于衡量模型预测值与实际标签之间的距离,而训练模型的目标则是最小化损失值,使其尽可能接近最小值。

MLWM:换句话说,损失函数是用来刻画模型的预测效果到底如何的一种手段,并进一步通过最小化目标函数来求解模型。相关内容也可参见 「2.1.3 求解线性回归模型」

在下图中,我们可以把损失看作从数据点指向模型的箭头。这些箭头表示模型预测值与实际值之间的距离,即箭头越长那么模型预测该结果的损失值就越大。

图 8. 损失线将数据点连接到模型
图 8. 损失是从实际值到预测值之间测得的距离

损失距离#

在统计学和机器学习中,损失用于衡量预测值与实际值之间的差异,因此损失只关注的是两个值之间的距离,而不管方向差异。例如,如果模型预测值为 2,实际值为 5,我们并不关心损失是否为负数 $(2 − 5 = −3)$ ,关心的是两个值之间的距离为 3。因此,所有损失计算方法都会去掉符号。

最常见的两种去除符号的方法如下:

  • 取实际值与预测值之差的绝对值。

  • 对实际值与预测值之差进行平方。

损失的类型#

在线性回归中,主要有5种损失类型,具体如下表所示。

损失类型 定义 公式
$L_1$ 损失 预测值与实际值之差的绝对值之和。 $ ∑ \| \text{actual\_value} - \text{predicted\_value} \| $
平均绝对误差(MAE) 一组 $N$ 个样本的 $L_1$ 损失平均值。 $\frac{1}{N} ∑ \| \text{actual\_value} - \text{predicted\_value} \| $
$L_2$ 损失 预测值与实际值之差的平方和。 $ ∑(\text{actual\_value} - \text{predicted\_value})^2 $
均方误差(MSE) 一组 N 个样本的 $L_2$ 损失平均值。 $ \frac{1}{N} ∑ (\text{actual\_value} - \text{predicted\_value})^2 $
均方根误差(RMSE) 均方误差(MSE)的平方根。 $ \sqrt{\frac{1}{N} ∑ (\text{actual\_value} - \text{predicted\_value})^2} $

$L_1$ 损失和 $L_2$ 损失之间的函数差异(或者 MAE/RMSE 和 MSE 之间的差异)在于平方运算。当预测值与标签之间的差异较大时,平方会使损失变得更大;当差异较小(小于 1)时,平方会使损失变得更小。

在某些使用场景中,MAE 和 RMSE 可能比 $L_2$ 损失或 MSE 更合适,因为它们通常更易于人类理解:它们使用与模型预测值相同的尺度来衡量误差。

注意: MAE 和 RMSE 可能相差很大。MAE 表示平均预测误差,而 RMSE 表示误差的“离散程度”,并且会受到较大误差更大的影响。

MLWM:上面提到的5种损失函数同时也可以作为评估模型优劣点评价指标,相关内容可以参见 2.4 回归模型评估

同时处理多个样本时,无论使用 MAE、MSE 还是 RMSE,都建议对所有样本的损失取平均值。

计算损失示例#

在上一节内容中,我们创建了以下用于根据汽车重量预测燃油效率的模型

  • 模型:$ y' = 34 + (-4.6)(x_1) $
    • 权重:$ -4.6 $

    • 偏置:$ 34 $

如果模型预测一辆 2,370 磅重的汽车每加仑可行驶 23.1 英里,但实际每加仑可行驶 24 英里,我们会按如下方式计算 $L_2$ 损失:

注意: 公式使用 2.37,是因为图中的重量单位是千磅。

数值 公式 结果
预测值 ${\text{bias} + (\text{weight} * \text{feature\_value})}=\small{34 + (-4.6*2.37)}$ $\small{23.1}$
实际值 $ \text{ label } $ $ \small{ 24 } $
$L_2$ 损失 $ (\text{actual\_value} - \text{predicted\_value})^2 =\small{ (24 - 23.1)^2 }$ $\small{0.81}$

在这个示例中,单个数据点的 $L_2$ 损失为 0.81。

选择损失函数#

决定使用 MAE 还是 MSE,可能取决于数据集以及你希望如何处理某些预测值。数据集中的大多数特征值通常都处在一个明确的范围内。例如,汽车通常重 2,000 到 5,000 磅,每加仑可行驶 8 到 50 英里。一辆重 8,000 磅的汽车,或者每加仑可行驶 100 英里的汽车,超出了典型范围,因此会被视为「异常值(Outlier)」

异常值也可以指模型预测值与真实值之间偏差较大的情况。例如,3,000 磅处于典型汽车重量范围内,40 英里/加仑也处于典型燃油效率范围内。然而,如果一辆重 3,000 磅的汽车每加仑可行驶 40 英里,那么从模型预测的角度来看,这就是一个异常值,因为模型会预测一辆重 3,000 磅的汽车大约每加仑可行驶 20 英里。

选择最佳损失函数时,需要考虑你希望模型如何处理异常值。例如,MSE 会使模型更加偏向异常值,而 MAE 不会。同时,与 $L_1$ 损失相比,$L_2$ 损失会对异常值施加高得多的惩罚。下面的两张图分别展示了使用 MAE 和 MSE 训练的模型。红线表示训练完成并用于进行预测的模型。异常值距离使用 MSE 训练的模型更近,而距离使用 MAE 训练的模型更远。

图 9. 模型更加偏向异常值
图 9. MSE 损失使模型更靠近异常值
图 10. 模型进一步偏离异常值
图 10. MAE 损失使模型与异常值保持更远的距离

请注意模型与数据之间的关系:

  • MSE: 模型更靠近异常值,但距离大多数其他数据点更远。

  • MAE: 模型距离异常值更远,但更靠近大多数其他数据点。

点击了解如何选择一个合适的损失函数

选择 MSE:

  • 如果你希望严厉惩罚较大的误差。

  • 如果你认为异常值很重要,并且它们反映了模型应该考虑的真实数据变化。

注意: MSE 的数学性质通常会使优化过程更加平滑。均方根误差(RMSE)通常用于将误差转换回与标签相同的单位。

选择 MAE:

  • 如果数据集中存在明显的异常值,并且你不希望它们对模型产生过大的影响。MAE 的鲁棒性更强。

  • 如果你更偏好一种可以直接解释为平均误差大小的损失函数。

在实践中,指标的选择也可能取决于具体的业务问题,以及哪类错误的代价更高。

检查你的理解#

考虑下面两幅线性模型拟合数据集的图:

模型 示意图
一幅包含 10 个点的图。一条直线穿过 6 个点,2 个点位于直线上方 1 个单位处,另外 2 个点位于直线下方 1 个单位处。 一幅包含 10 个点的图。一条直线穿过 8 个点,1 个点位于直线上方 2 个单位处,另外 1 个点位于直线下方 2 个单位处。

上面两幅图中的线性模型,哪一个在图示数据点上计算出的均方误差(MSE)更高?

  • A. 右侧的模型

  • B. 左侧的模型

点击查看答案
答案选 A。

A. 右侧模型。位于直线上的 8 个样本损失总计为 0。然而,尽管只有两个点位于直线之外,但这两个点距离直线的距离是左图中异常点距离直线的两倍。平方损失放大了这些差异,因此偏差为 2 时产生的损失是偏差为 1 时的 4 倍:

$$ \text{MSE} = \frac{0^2 + 0^2 + 0^2 + 2^2 + 0^2 + 0^2 + 0^2 + 2^2 + 0^2 + 0^2} {10} = 0.8 $$

B. 左侧的模型。位于直线上的 6 个样本损失总计为 0。位于直线之外的 4 个样本距离直线并不远,因此即使对它们的偏差进行平方,结果仍然较小:

$$ \text{MSE} = \frac{0^2 + 1^2 + 0^2 + 1^2 + 0^2 + 1^2 + 0^2 + 1^2 + 0^2 + 0^2} {10} = 0.4 $$

关键术语:

阅读 --