回归损失:怎样对待大小不同的误差#
TL;DR#
本页内容7 个部分
1. 背景与问题#
回归模型预测连续数值。误差平方会使大误差的贡献增长很快,但异常值也更容易主导梯度;绝对误差控制了大误差的斜率,却在零点不可微。Huber 在小误差区域使用二次形式、大误差区域使用线性形式,在两者之间作取舍。
2. 目标与定义#
标签为 y、预测为 y^,残差为 e=y^−y,有效标量目标数为 n。常见样本平均目标为:
LMSE=n1i=1∑nei2,LL1=n1i=1∑n∣ei∣.
取阈值 δ>0,单个 Huber 损失为:
hδ(e)={21e2,δ(∣e∣−21δ),∣e∣≤δ,∣e∣>δ.
Huber 小误差区使用半个平方,与上面的 MSE 系数不同,比较梯度时要保留这一差别。[1]
3. 方法与推导#
3.1 梯度怎样随残差增长#
对预测求导,MSE 单项为 2e,L1 在非零处为 sign(e);零点可取次梯度 [−1,1]。Huber 则为:
hδ′(e)={e,δsign(e),∣e∣≤δ,∣e∣>δ.
两段在 e=±δ 连续衔接。大残差的斜率不会继续增大,但经网络传播后的参数梯度仍取决于预测对参数的导数。
3.2 为什么平方与绝对误差偏向不同位置#
固定输入 x,用常数 a 作预测,并假定所需期望有限、可交换求导与期望。平方风险的导数为 ∂aE[(a−Y)2∣x]=2(a−E[Y∣x]),所以最优位置为条件均值。
绝对风险的次梯度由左右概率质量决定;最优位置满足 P(Y≤a∣x)≥1/2 且 P(Y≥a∣x)≥1/2,即条件中位数。Huber 的最优位置由 E[hδ′(a−Y)∣x]=0 决定,随分布与阈值改变,不能直接称为“中位数”。
4. 计算过程#
用同一个常数预测拟合标签 (0,0,9)。平方误差最优预测为均值 3,绝对误差最优预测为中位数 0。取 Huber 阈值 δ=1,在 0≤a≤1 时:
i∑h1′(a−yi)=a+a−1=0⟹a=0.5.
Huber 的远端样本只提供斜率 −1,两个近端样本合计提供斜率 2a,平衡点为 0.5。表中的 loss 单位和尺度不同,数值更小不代表方法更好。
5. 比较与边界#
MSE 对大残差的梯度敏感,L1 与 Huber 控制了单项斜率,但不能因此保证对任意数据污染鲁棒。阈值 δ 与目标单位相关,目标缩放后应重新核对。
生成模型也会使用平方损失,但预测噪声、数据或速度时,等权 MSE 通常对应不同时间权重。具体参数化由 DDPM和 Flow Matching维护,本篇只解释残差惩罚。
参考资料#
- HuberLoss(PyTorch 2.9). 文档:分段定义、阈值与 reduction;均值和中位数结论由第 3 节的总体风险推导。