线性回归:理解损失函数#
原页面: https://developers.google.com/machine-learning/crash-course/linear-regression/loss
「损失(Loss)」 是一个数值指,也就是说它是一个标量,它用来描述模型的预测(Prediction)结果到底如何。损失用于衡量模型预测值与实际标签之间的距离,而训练模型的目标则是最小化损失值,使其尽可能接近最小值。
MLWM:换句话说,损失函数是用来刻画模型的预测效果到底如何的一种手段,并进一步通过最小化目标函数来求解模型。相关内容也可参见 「2.1.3 求解线性回归模型」。
在下图中,我们可以把损失看作从数据点指向模型的箭头。这些箭头表示模型预测值与实际值之间的距离,即箭头越长那么模型预测该结果的损失值就越大。
损失距离#
在统计学和机器学习中,损失用于衡量预测值与实际值之间的差异,因此损失只关注的是两个值之间的距离,而不管方向差异。例如,如果模型预测值为 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 训练的模型更远。
请注意模型与数据之间的关系:
-
MSE: 模型更靠近异常值,但距离大多数其他数据点更远。
-
MAE: 模型距离异常值更远,但更靠近大多数其他数据点。
点击了解如何选择一个合适的损失函数
选择 MSE:
-
如果你希望严厉惩罚较大的误差。
-
如果你认为异常值很重要,并且它们反映了模型应该考虑的真实数据变化。
注意: MSE 的数学性质通常会使优化过程更加平滑。均方根误差(RMSE)通常用于将误差转换回与标签相同的单位。
选择 MAE:
-
如果数据集中存在明显的异常值,并且你不希望它们对模型产生过大的影响。MAE 的鲁棒性更强。
-
如果你更偏好一种可以直接解释为平均误差大小的损失函数。
在实践中,指标的选择也可能取决于具体的业务问题,以及哪类错误的代价更高。
检查你的理解#
考虑下面两幅线性模型拟合数据集的图:
| 模型 | 示意图 |
|---|---|
![]() |
![]() |
上面两幅图中的线性模型,哪一个在图示数据点上计算出的均方误差(MSE)更高?
-
A. 右侧的模型
-
B. 左侧的模型
点击查看答案
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 $$
关键术语:
- 平均绝对误差(MAE)
- 均方误差(MSE)
- $L_1$
- $L_2$
- 损失(Loss)
- 异常值(Outlier)

