损失函数:从 0-1 损失到代理损失
一句话定义
损失函数 L(y, ŷ) 量化单条样本上「预测值与真实值的差距」,模型的训练目标是在其累积(经验风险)上做最小化;不同损失选择决定了模型的统计性质与可优化性。
为什么重要
「选什么损失」几乎等价于「在解决什么问题」:平方损失对应均值预测,绝对损失对应中位数,铰链损失对应 SVM,交叉熵对应概率分类。同一个网络结构换损失就变成完全不同的任务。理解损失函数是读懂一切模型推导的钥匙,也是排查「模型为什么不收敛、预测为什么系统性偏移」的第一现场。
前置知识
学习问题的形式化:假设空间、经验风险与泛化 的经验风险框架;微积分求导。
核心概念
- 0-1 损失:分类对错记账 L(y, f(x)) = 1[y ≠ f(x)],是真正关心的量,但不连续、不可导,无法梯度优化。
- 平方损失:L = (y - f(x))2,回归默认,对异常值敏感。
- 绝对损失:L = |y - f(x)|,更稳健,但零点不可导。
- Hinge 损失:L = max(0, 1 - y f(x))(y ∈ {-1, +1}),SVM 使用,只惩罚间隔不足的样本。
- Logistic 损失 / 交叉熵:L = log(1 + e-y f(x)),逻辑回归使用,处处光滑、输出可作概率。
- 代理损失(surrogate loss):用光滑上界替代 0-1 损失以便优化;hinge 与 logistic 都是 0-1 损失的凸上界。
直观类比
损失函数像评分规则:奥运会跳水打分规则改了,运动员训练策略就会变。0-1 损失是「只看名次」的极端规则——信息量太少没法指导训练;代理损失是「把名次拆成技术分」的平滑版——好算好练,且技术分高通常名次也好(上界性质保证这一点)。
原理与机制
为什么平方损失的最优预测是条件期望:最小化期望平方损失 𝔼[(Y - f(X))2],对 f 求导置零得 f^*(x) = 𝔼[Y | X = x]。同理,绝对损失的最优解是条件中位数——损失函数直接决定模型「在估计分布的哪个位置统计量」。
为什么需要代理损失:经验风险最小化要求对参数可导。0-1 损失关于连续打分 s = f(x) 是阶梯函数,梯度处处为 0(除跳点),无法优化;hinge 与 logistic 损失都是它的凸、连续上界,优化它们保证间接压低 0-1 损失。这解释了模块 02 与 04 中「逻辑回归与 SVM 训练的都不是 0-1 错误率,但都服务于降低它」。
公式与推导
以二分类打分 s = f(x)、标签 y ∈ {-1, +1} 为例,常见损失的统一视角:
四个选项依次是 0-1、hinge、logistic、exponential 损失,全部只依赖边际(margin)t = y · s:同号且越大损失越小。这一统一形式让「比较模型族」变得容易——AdaBoost 的指数损失对 t < 0 的错分惩罚最猛,因此对噪声标签最敏感(见 kp-012)。
图示
损失
▲ 指数 e^{-t}
│ \
│ \ logistic log(1+e^{-t})
│ \ ~~~~~~~~~
│ hinge \~~
│ max(0,1-t) \_______
│ 0-1 ┃
└────────┬──────────────▶ 边际 t = y·s
t = 0(决策边界)实例或案例
回归任务预测销量:某天数据录入错误使 y 放大 100 倍。平方损失下这一条样本主导了整个梯度,模型为迁就它整体偏移;换成 Huber 损失(二次区与线性区拼接,|t| > δ 时退化为线性)后影响被截断。工程上「指标异常先查脏样本 + 考虑稳健损失」是标准动作。
from sklearn.linear_model import HuberRegressor, LinearRegression
from sklearn.datasets import make_regression
X, y = make_regression(n_samples=200, n_features=5, noise=10, random_state=0)
y[:5] += 500 # 制造异常值
print(LinearRegression().fit(X, y).coef_) # 系数被异常值拉偏
print(HuberRegressor(epsilon=1.35).fit(X, y).coef_) # 稳健许多常见误区
- 分类任务直接用平方损失训练:对 sigmoid 输出会导致损失非凸(多极小),且预测被推向错误的方向(见 kp-007 推导)。
- 把「损失下降」当「模型变好」:损失下降只说明训练集拟合变好,泛化要用验证集说话。
- 多分类时忘了类不平衡:损失均摊到每条样本,少数类贡献小,需配合类权重(见 kp-026)。
与其他知识点的关系
逻辑回归与交叉熵损失 推导交叉熵与逻辑回归;软间隔 SVM 与铰链损失 推导 hinge 与软间隔 SVM 的等价;梯度提升树 GBDT 与 XGBoost 展示「以梯度下降方式逐棵树拟合损失负梯度」的 boosting 视角。
自测题
- 为什么 hinge 损失比 logistic 损失更「省样本」但更怕噪声?
- 要点:hinge 在 t ≥ 1 后梯度为 0,远离边界的样本不再参与训练(解稀疏);但对 t < 0 的错分样本线性惩罚、不封顶,且对异常标签同样不设上限,敏感。
- 平方损失下最优预测是什么?绝对损失呢?
- 要点:条件期望 𝔼[Y | X];条件中位数(对异常值更稳健)。
- 什么是代理损失,为什么必须用它?
- 要点:0-1 损失的凸光滑上界;因为 0-1 损失不可导、经验风险最小化无法梯度优化,代理损失使问题可优化且优化它间接控制 0-1 风险。
延伸阅读
李航《统计学习方法》第 1、6 章;Bishop《PRML》第 1、4 章。