机器学习速成·线性回归(2/4):损失函数——从距离到 MSE / MAE 的选择
本文参考 Google 机器学习速成课程 - 线性回归:损失函数(Loss) 模块撰写,承接上篇《线性回归》,重点讲清”损失”是什么、有哪些类型、以及训练时该怎么选。
一、什么是损失(Loss)?
损失(Loss)是一种数值指标,用来描述模型”预测值”与”实际标签”之间的偏差程度。
- 损失衡量的是模型预测与实际标签之间的距离。
- 训练模型的目标,就是让损失尽可能降到最低。
可以把损失直观地理解为:图上每个数据点到模型之间拉出的”箭头”,箭头越长,说明该点的预测误差越大。
二、损失距离:只在乎”多远”,不在乎”方向”
在统计学和机器学习里,损失衡量的是预测值与实际值的差异,更准确地说,是两者之间的距离——与方向无关。
举个例子:模型预测值为 2,实际值为 5:
2 - 5 = -3 ← 我们并不关心这个负号
距离 = 3 ← 我们关心的是数值距离
因此,所有计算损失的方法都必须移除符号。最常见的两种方式:
- 取绝对值:
|实际值 − 预测值| - 取平方:
(实际值 − 预测值)²
这两条思路,恰好演化出后面几类主流损失函数。
三、五种主要损失类型
在线性回归中,有五种主要损失,它们的关系是逐层深入的——从”绝对/平方”两条路,各自衍生出”求和/平均/开根”三种变体:
| 损失类型 | 定义 | 公式 |
|---|---|---|
| L₁ 损失 | 预测值与实际值的差,取绝对值后求和 | Σ|实际值 − 预测值| |
| MAE(平均绝对误差) | 一组 N 个示例的 平均 L₁ 损失 | (1/N) · Σ|实际值 − 预测值| |
| L₂ 损失 | 预测值与实际值的差,平方后求和 | Σ(实际值 − 预测值)² |
| MSE(均方误差) | 一组 N 个示例的 平均 L₂ 损失 | (1/N) · Σ(实际值 − 预测值)² |
| RMSE(均方根误差) | MSE 的平方根 | √((1/N) · Σ(实际值 − 预测值)²) |
看到规律了吗?
L₁损失 ──求平均──► MAE (一条"绝对"路线)
L₂损失 ──求平均──► MSE ──开根──► RMSE (一条"平方"路线)
3.1 L₁ 与 L₂ 的根本差异:那个”平方”
L₁ 与 L₂(或 MAE/RMSE 与 MSE)的功能差异,完全源自”平方”:
- 差值较大(>1)时:平方会让损失变得更大(放大惩罚)。
- 差值较小(<1)时:平方会让损失变得更小(弱化惩罚)。
简单说:平方 = “按下葫芦浮起瓢”,大的误差被放大、小的误差被缩小。 这也决定了它们在处理高误差点时表现截然不同。
3.2 MAE vs RMSE:可解释性与离群敏感度
- MAE 更容易人工解读:它直接用与预测相同的单位表示”平均误差大小”。
- RMSE 更关注误差的离散程度:它受较大误差的影响更明显。
- 注意两者差异可能非常大——MAE 讲的是”平均偏多远”,RMSE 讲的是”最大那些错误有多离谱”。
建议:同时处理多个示例时,无论 MAE、MSE 还是 RMSE,都应该对所有示例的损失求平均。
四、损失计算示例(动手算一次)
回到上篇的汽车油耗模型:
模型:y′ = 34 + (−4.6)·x₁
其中 权重 w₁ = −4.6,偏差 b = 34
现在有一辆 2,370 磅的汽车(用千磅表示 = 2.37):
| 值 | 计算 | 结果 |
|---|---|---|
| 预测 | 34 + (−4.6) × 2.37 | 23.1 |
| 实际 | 标签(label) | 24 |
| L₂ 损失 | (24 − 23.1)² | 0.81 |
这一单个数据点的 L₂ 损失就是 0.81。
L₂损失 = (实际值 − 预测值)²
= (24 − 23.1)²
= 0.9²
= 0.81
五、如何选择损失函数:关键看”离群值”怎么处理
损失函数不是随便挑的,最重要的一条决策依据是:你希望模型如何对待离群值(Outlier)。
5.1 什么是离群值?
离群点常见于两种情况:
- 超出特征范围的样本:汽车重量通常 2000
5000 磅、油耗 850 英里。一辆 8000 磅的车,或每加仑跑 100 英里的车,就属于离群点。 - 相对模型的预测而言偏差过大:一辆 3000 磅的车本身很常见,但如果它的油耗是 40 英里/加仑,而模型预测这样重的车只能约 20 英里,那么对模型来说它就是个离群点。
5.2 MSE vs MAE 对离群值的不同反应
| 行为 | 模型倾向 | |
|---|---|---|
| MSE | 对离群值惩罚极高(平方放大) | 更贴近离群点,但离大多数点较远 |
| MAE | 对离群值惩罚平缓 | 更远离离群点,但离大多数点较近 |
原因:平方损失会把”偏差 2 个单位”惩罚成”偏差 1 个单位”的 4 倍,所以 MSE 会拼尽全力去迁就那个”巨大的错误”,从而牺牲大多数点的拟合。
5.3 选择指南
选择 MSE(或 RMSE):
- 想严厉惩罚大误差;
- 认为离群值很重要,是数据中真实方差的表现;
- 附带优点:MSE 的数学性质往往让优化更平滑;RMSE 用于把误差”还原”回与标签相同的单位。
选择 MAE:
- 数据中存在不希望被过度放大的显著离群值(MAE 更稳健);
- 希望损失能更直观地解释为”平均误差幅度”。
实践中,最终选择还取决于具体业务问题的错误成本——哪种类型的误差代价更高,就优先压制哪种。
六、检查理解:一个直观的对比
有两条线性模型拟合同一批数据。不精确地看,MSE 较高的是右侧模型:
- 右侧模型:线上的 8 个示例损失贡献为 0,但线外 2 个点偏得较远(各偏移 2 个单位)。由于平方放大:
MSE = (0² + 0² + 0² + 2² + 0² + 0² + 0² + 2² + 0² + 0²) / 10 = 0.8 - 左侧模型:线上 6 个示例为 0,线外 4 个点虽多但偏移很小(各 1 个单位):
MSE = (0² + 1² + 0² + 1² + 0² + 1² + 0² + 1² + 0² + 0²) / 10 = 0.4
结论:“少而大”的错误(右侧)在平方下反而比”多而小”的错误(左侧)损失更高 —— 这正是平方损失”放大离群值”的直观证明。
七、关键术语速查
- 损失(Loss):衡量预测与实际偏差的数值指标。
- L₁ 损失:差的绝对值之和。
- L₂ 损失:差的平方之和。
- MAE(平均绝对误差):平均 L₁。
- MSE(均方误差):平均 L₂。
- RMSE(均方根误差):MSE 的平方根。
- 离群值(Outlier):超出正常范围,或相对模型预测偏差过大的样本。
总结
| 核心要点 | 关键结论 |
|---|---|
| 损失是什么 | 预测与实际标签的距离,训练目标就是最小化它 |
| 距离不考虑方向 | 用绝对值或平方移除符号 |
| 两条路线 | 绝对路线→L₁→MAE;平方路线→L₂→MSE→RMSE |
| 平方的威力 | 放大误差:大误差被加重、小误差被缩小 |
| 选 MSE | 想严惩大误差、认为离群值重要 |
| 选 MAE | 有显著离群值不想被过度影响、要更可解释 |
一句话:损失是”预测偏了多远”的尺子,最小化损失就是训练的全部目的;而选哪把尺子,关键看你要不要为那几个”失控的离群值”付出额外的代价。