训练与优化 / 训练目标与正则化 原理笔记入门 3 分钟阅读 查看源文件 ↗

回归损失:怎样对待大小不同的误差#

TL;DR#

本页内容7 个部分

1. 背景与问题#

回归模型预测连续数值。误差平方会使大误差的贡献增长很快,但异常值也更容易主导梯度;绝对误差控制了大误差的斜率,却在零点不可微。Huber 在小误差区域使用二次形式、大误差区域使用线性形式,在两者之间作取舍。

2. 目标与定义#

标签为 yy、预测为 y^\hat y,残差为 e=y^−ye=\hat y-y,有效标量目标数为 nn。常见样本平均目标为:

LMSE=1n∑i=1nei2,LL1=1n∑i=1n∣ei∣.\mathcal L_{\mathrm{MSE}}=\frac1n\sum_{i=1}^n e_i^2,\qquad\mathcal L_{\mathrm{L1}}=\frac1n\sum_{i=1}^n|e_i|.

取阈值 δ>0\delta>0,单个 Huber 损失为:

hδ(e)={12e2,∣e∣≤δ,δ(∣e∣−12δ),∣e∣>δ.h_\delta(e)=\begin{cases}\frac12e^2,&|e|\le\delta,\\\delta(|e|-\frac12\delta),&|e|>\delta.\end{cases}

Huber 小误差区使用半个平方,与上面的 MSE 系数不同,比较梯度时要保留这一差别。[1]

3. 方法与推导#

3.1 梯度怎样随残差增长#

对预测求导,MSE 单项为 2e2e,L1 在非零处为 sign⁡(e)\operatorname{sign}(e);零点可取次梯度 [−1,1][-1,1]。Huber 则为:

hδ′(e)={e,∣e∣≤δ,δsign⁡(e),∣e∣>δ.h_\delta'(e)=\begin{cases}e,&|e|\le\delta,\\\delta\operatorname{sign}(e),&|e|>\delta.\end{cases}

两段在 e=±δe=\pm\delta 连续衔接。大残差的斜率不会继续增大,但经网络传播后的参数梯度仍取决于预测对参数的导数。

3.2 为什么平方与绝对误差偏向不同位置#

固定输入 xx,用常数 aa 作预测,并假定所需期望有限、可交换求导与期望。平方风险的导数为 ∂aE[(a−Y)2∣x]=2(a−E[Y∣x])\partial_a\mathbb E[(a-Y)^2\mid x]=2(a-\mathbb E[Y\mid x]),所以最优位置为条件均值。

绝对风险的次梯度由左右概率质量决定;最优位置满足 P(Y≤a∣x)≥1/2P(Y\le a\mid x)\ge1/2 且 P(Y≥a∣x)≥1/2P(Y\ge a\mid x)\ge1/2,即条件中位数。Huber 的最优位置由 E[hδ′(a−Y)∣x]=0\mathbb E[h_\delta'(a-Y)\mid x]=0 决定,随分布与阈值改变,不能直接称为“中位数”。

4. 计算过程#

用同一个常数预测拟合标签 (0,0,9)(0,0,9)。平方误差最优预测为均值 3,绝对误差最优预测为中位数 0。取 Huber 阈值 δ=1\delta=1,在 0≤a≤10\le a\le1 时:

∑ih1′(a−yi)=a+a−1=0⟹a=0.5.\sum_i h_1'(a-y_i)=a+a-1=0\quad\Longrightarrow\quad a=0.5.

损失 最优预测 此处的样本平均损失
MSE 3 (9+9+36)/3=18(9+9+36)/3=18
L1 0 (0+0+9)/3=3(0+0+9)/3=3
Huber,δ=1\delta=1 0.5 (0.125+0.125+8)/3=2.75(0.125+0.125+8)/3=2.75

Huber 的远端样本只提供斜率 −1,两个近端样本合计提供斜率 2a2a,平衡点为 0.5。表中的 loss 单位和尺度不同,数值更小不代表方法更好。

5. 比较与边界#

MSE 对大残差的梯度敏感,L1 与 Huber 控制了单项斜率,但不能因此保证对任意数据污染鲁棒。阈值 δ\delta 与目标单位相关,目标缩放后应重新核对。

生成模型也会使用平方损失,但预测噪声、数据或速度时,等权 MSE 通常对应不同时间权重。具体参数化由 DDPM和 Flow Matching维护,本篇只解释残差惩罚。

参考资料#

  1. HuberLoss(PyTorch 2.9). 文档:分段定义、阈值与 reduction;均值和中位数结论由第 3 节的总体风险推导。

相关阅读路线

完成一次训练更新 ↗