1-监督学习损失

1. 损失函数的本质:为什么它决定了模型学什么

模型的学习,本质上是在一个由参数 定义函数族 中,寻找使经验风险最小的那个:

损失函数 定义了”预测有多错”,它的选择不是任意的,而是由数据生成过程的概率假设决定的。选择错误的损失函数相当于让模型优化一个与真实目标不符的方向——即便模型完美地最小化了错误的损失函数,预测结果仍然不符合需求。

换个角度看,若假设数据 由某个概率模型 生成,则最优预测(在 MSE 意义下)是条件期望 ;在 0-1 损失意义下是最可能的类别。损失函数的选择,本质上是对”预测目标”和”噪声假设”的一种显式声明。


2. 统一视角:经验风险、最小二乘与最大似然估计

2.1 经验风险最小化

设数据集 ,经验风险定义为

ERM(经验风险最小化)的目标是找到使 最小的 。这背后的直觉是:经验风险是期望风险的蒙特卡洛近似,当 时,若 选择得当, 的最小点会趋近于期望风险的最小点。

2.2 最大似然估计(MLE)

假设数据由概率密度 生成,似然函数为

对数似然为

即 MLE。注意 可以写成负对数似然形式:

其中 恰好是某种损失函数。这建立了 MLE 与 ERM 之间的桥梁:若选定某个概率模型 ,则最小化对应损失函数等价于最大化该模型的似然。


3. 从概率假设推导常见损失

3.1 MSE(均方误差)

概率假设:高斯噪声

设真实标签 由确定性函数 加噪声生成:

,其概率密度为

推导 MSE

负对数似然为

忽略常数项,经验风险为

MSE。结论:MSE 对应高斯噪声假设( 范数损失)。若数据中的噪声确实是高斯分布,则 MSE 是最优损失函数;若噪声是拉普拉斯分布,则 MAE 更合适。

MSE 的梯度

,则

梯度大小与误差 成正比。当预测严重偏离标签时(MSE 大),梯度也大,参数更新强;这既是优点(快速修正)也是缺点(MSE 对离群点(outlier)极度敏感, 很大时梯度会被少数离群点主导)。


3.2 MAE(平均绝对误差)

概率假设:拉普拉斯噪声

MAE 对应的概率假设是拉普拉斯分布:

取负对数:

即 MAE。

MAE 的梯度(不可微点处理)

MAE 在 处不可微。设 ,则

其中 是符号函数。在不可微点 处,约定梯度为 0 或介于 之间的任意值(次梯度)。

MAE 的特点:梯度大小恒为 (与误差绝对值无关),因此对所有误差给予相同权重——这使得 MAE 对离群点更鲁棒,但训练初期会导致参数更新幅度偏小,收敛速度慢于 MSE。


3.3 Huber Loss

MSE 在大误差时梯度过大(),MAE 在所有误差处梯度相同(),两种极端各有优缺。Huber Loss 试图在两者之间取得平衡:

其中 切换阈值(通常取 1.0 或作为超参数调优)。

  • 小误差区间):使用 MSE,保证快速收敛
  • 大误差区间):使用 MAE,限制梯度的增长,防止离群点主导更新

Huber Loss 是对噪声不是高斯而是重尾分布(heavy-tailed)数据的一种鲁棒损失,在强化学习的值函数估计和目标检测(如 YOLO)中应用广泛。


3.4 BCE / Sigmoid Cross-Entropy(二元交叉熵)

概率假设:伯努利分布

设二分类问题中 ,模型输出 作为 的估计。这相当于假设

即伯努利分布。负对数似然为

这就是 BCE(Binary Cross-Entropy)。注意这里 Sigmoid 与 Cross-Entropy 的结合不是巧合——Sigmoid 将输出压缩到 区间,使其可以作为概率参数进入伯努利分布。

BCE 梯度推导

。对 求偏导:

利用

结论:二分类 Cross-Entropy 对 logits 的梯度正好是预测概率与真实标签的残差 ,这与多分类 Softmax + Cross-Entropy 的梯度形式完全一致(残差直接反向传播),是 Cross-Entropy 成为分类首选损失的关键原因。

梯度大小与置信度的关系

梯度 的大小受置信度影响:

  • 低置信度时, , ):残差 ,梯度接近最大值,参数大步更新
  • 高置信度时, ):残差 ,梯度接近 0,参数几乎不更新(模型已”确信”当前预测正确)

这与 MSE 的行为不同——MSE 的梯度始终与误差成比例,但对大置信度预测仍有非零梯度(梯度消失体现在激活函数饱和,Sigmoid 两端梯度趋近 0,但若 在饱和区外,MSE 梯度仍有效)。


3.5 Softmax Cross-Entropy(多分类交叉熵)

概率假设:多项分布

设多分类问题中 ,独热编码(one-hot)为 ,模型输出 ,其中 为 logits。假设

即多项分布,其概率质量函数为

负对数似然为

Categorical Cross-Entropy(多分类交叉熵)。

Softmax 的梯度(关键推导)

,对 求偏导(利用 Softmax 的性质):

其中 是克罗内克 。结合交叉熵损失的偏导:

在独热编码假设下( 当且仅当 为真实类别),上式简化为

结论:多分类 Cross-Entropy 对 logits 的梯度 = 预测概率与真实标签的残差 ,与二分类 BCE 的结论完全一致,形式简洁优美,是该组合成为多分类标准损失的核心理由。

为什么 Cross-Entropy 常与 Softmax 配对

Softmax 的作用是将任意实数向量 映射为概率向量 ,满足 。若不经过 Softmax,直接用 的各分量作为伯努利参数代入 Cross-Entropy,则各分量概率之和可能大于 1 或小于 0,违反概率公理。Softmax 是使 Cross-Entropy 在多分类场景下具有概率合法性的必要变换


3.6 Multi-label BCE(多标签二元交叉熵)

多标签分类中,每个标签独立存在,不施加互斥约束。设 为第 个标签的正类概率,独立伯努利假设:

负对数似然为

每个标签独立计算 BCE,梯度同样为 (对各自 logit 求导),各标签之间互不影响。


3.7 Label Smoothing(标签平滑)

问题引入

标准 Cross-Entropy 鼓励模型对真实类别输出接近 1 的概率,对其他类别输出接近 0 的概率——这种**硬目标(hard target)**会导致过拟合,且在模型犯错时给予极大的梯度(当 时,)。

Label Smoothing 的形式

设平滑参数 ,将硬目标 替换为软目标

即以 的权重保留真实标签,以 的权重均分给所有类别(包括真实类别自身)。独热编码场景下:

注意:部分实现使用”均匀分布”作为平滑目标(),但也有实现使用”先验分布”或”类别频率分布”。

概率视角

Label Smoothing 等价于假设数据标签不是完全确信的,而是以 的置信度标注,即标签存在噪声。从正则化角度看,它使模型不再过度追求对训练样本的完美分类,提升了泛化能力。ResNet-DenseNet、CIFAR-10/100 的标准训练配置均使用

对梯度的影响

使用 Label Smoothing 后,梯度变为

趋近 1 时,梯度不会趋于无穷大,而是被平滑上限 所约束。这防止了训练过程中因个别样本的错误标签或极端预测导致的梯度爆炸。


4. 类别不平衡的处理

4.1 代价敏感学习(Cost-Sensitive Learning)

标准 BCE / Cross-Entropy 对所有样本一视同仁。若正例()数量远少于负例(),模型会倾向于预测负例以最小化总体损失——因为正确预测大量负例带来的损失减少,超过了少量正例错误的影响。

设正例权重 ,负例权重 ,引入加权 BCE:

实践中通常用类别频率的倒数作为权重:

或者设类别权重向量(class weights),多分类 Cross-Entropy 加权为

4.2 Focal Loss

类别不平衡的另一解法是 Focal Loss(Lin et al., 2017, RetinaNet)。核心思想是降低易分类样本的贡献,聚焦于难分类样本:

其中:

  • 聚焦参数(focusing parameter):当 时退化为标准 BCE;当 时,置信度高的样本()的损失被 因子大幅衰减,而置信度低的样本的损失几乎不受影响
  • 是可选的类别平衡权重(与代价敏感学习结合)

直觉解释:当模型对某样本的预测已经接近标签(如 ),该样本是”简单样本”,对学习贡献有限,应降低其权重;当模型预测错误(如 ),该样本是”困难样本”,应给予更多关注。Focal Loss 通过 因子自动实现这一聚焦效果。

是经验上常见(empirical common practice)的选择(Lin et al. 论文中使用 )。

4.3 类权重的实践设置

方法说明适用场景
无权重标准 BCE / Cross-Entropy类别大致平衡
逆频率权重 为第 类样本数)中度不平衡(~10:1)
有效样本数权重(见 ESOTA 等方法)高度不平衡
Focal Loss + 可选 平衡目标检测等极不平衡场景
阈值调整保持损失函数不变,在推理时调整分类阈值已知特定类别的召回需求

5. 任务目标与评测指标不一致的处理

损失函数定义的优化目标与评测指标(evaluation metric)往往不同——这是训练中的常见矛盾。

典型案例:二分类问题中,我们用 BCE 作为损失函数,但评测时关心 F1 分数而非 accuracy。模型可能通过将所有预测推向某一极端(使 accuracy 最大化)来最小化 BCE,但这导致 precision 或 recall 失衡,F1 分数不高。

解决方案

  1. 加权损失:在 BCE 中引入类权重,使损失函数反映 F1 的优化需求
  2. 调整决策阈值:用 BCE 训练模型,推理时在 区间搜索最优分类阈值以最大化 F1(这不改变训练目标,但改变了决策边界)
  3. 自定义损失:直接以 F1 或其他指标的可微近似作为损失函数(但 F1 的离散性使直接优化困难,常用平滑近似)
  4. 指标监控:始终将评测指标作为独立的 validation 监控指标,而非仅看 loss——若 loss 下降但评测指标不提升,说明损失函数与任务目标存在根本性偏差,需要重新设计损失函数

6. 工程实践

6.1 如何根据任务选择损失函数

任务类型推荐损失函数概率假设关键考量
标准回归(低噪声)MSE高斯噪声快速收敛,对离群点敏感
鲁棒回归(有离群点)Huber Loss( 自调)或 MAE重尾噪声权衡收敛速度与鲁棒性
二分类BCE(Sigmoid + Cross-Entropy)伯努利分布梯度为 ,形式简洁
多分类(互斥)Softmax + Cross-Entropy多项分布梯度为 (残差形式)
多标签分类Multi-label BCE(独立 Sigmoid)独立伯努利分布各标签独立,无竞争假设
类别不平衡二分类BCE + class weight 或 Focal Loss代价敏感伯努利Focal Loss 对难分类样本聚焦
目标检测(RetinaNet)Focal Loss解决正负样本极端不平衡
标签有噪声/需正则化Label Smoothing标签噪声假设防止硬目标过拟合
有界回归(0~1)MSE + Sigmoid 输出 或 BCE 风格高斯/伯努利混合保证输出在目标范围内

6.2 如何监控 loss 曲线判断训练状态

正常训练曲线的特征

  • Loss 持续下降:前 100 个 step 应看到明显下降(10%~30%),若不下降则初始化或学习率有问题
  • Loss 下降速率趋于平缓:收敛阶段应呈现对数下降,趋于平台
  • Train loss ≈ Val loss:若两者差距过大(Train loss 远低于 Val loss)则过拟合,Train loss 远高于 Val loss 则欠拟合

异常曲线的诊断

现象可能原因处理方法
Loss 在前几个 step 变为 NaN学习率过大,梯度爆炸减小学习率,启用梯度裁剪(clip_grad_norm_
Loss 几乎不下降(平缓)学习率过小或陷入饱和增大学习率;检查激活函数是否饱和;检查初始化
Loss 下降但验证集性能不提升损失函数与评测指标不一致;数据泄露重新设计损失或调整阈值;检查数据分割
Loss 周期性振荡学习率过大或 batch size 太小减小学习率;增大 batch size
训练 loss 缓慢上升梯度爆炸或损失函数数值不稳定启用梯度裁剪;检查 Softmax/BCE 的数值安全实现

经验监控频率:实践中建议每 100~1000 个 step 记录一次 loss,每 epoch 结束时计算一次验证集指标。若 loss 曲线出现非单调跳跃,首先检查梯度范数是否异常。

6.3 处理异常标签、噪声标签、缺失标签

异常标签(Label Outliers)

指标签值超出合法范围(如回归目标为负数、分类标签超过 )。处理方法:

  • 数据清洗:训练前检测并修正超出范围的标签(首选方案)
  • 损失裁剪:对回归损失进行裁剪,如 ,防止个别异常标签主导梯度
  • 标签过滤:将异常标签对应的样本从训练集中移除或标记为无效

噪声标签(Noisy Labels)

指部分标签存在标注错误。对于噪声标签:

  • Label Smoothing:以一定概率将标签视为噪声,平滑到其他类别
  • 混合损失:结合带噪标签的损失和标签置信度的加权损失(如 “Co-teaching” 等方法)
  • 鲁棒损失:MAE / Huber Loss 对噪声标签比 MSE 更鲁棒(因为大误差的梯度被截断)
  • EMA 目标更新:对标签使用移动平均的软目标(Label Refinery),使标签随训练缓慢更新

缺失标签(Missing Labels)

多标签场景中,部分标签可能标记缺失(即”未知”而非”负”)。处理方法:

  • 忽略缺失标签:仅在有标注的标签上计算损失,使用布尔掩码(mask)跳过缺失位置:
  • 半监督学习:将缺失标签视为潜在变量,利用未标注数据辅助训练(如 Label Propagation)
  • 两阶段处理:训练时仅用有标签样本,推理时使用完整标签集合

7. 常见陷阱

陷阱 1:回归任务中使用 Cross-Entropy

Cross-Entropy 要求预测值在 区间作为概率。若对无界回归目标使用 Cross-Entropy,相当于强制将无界目标映射到概率空间,损失函数会在大部分区域给出极大惩罚——这不是损失函数的”错误使用”,而是对数据类型的假设错误。回归任务首选 MSE / MAE / Huber Loss,除非对输出有明确的概率解释。

陷阱 2:多分类问题中混用 Sigmoid 和 Softmax

对于多分类()且各类互斥的场景,不应使用独立 Sigmoid + BCE,因为 Sigmoid 不施加互斥约束,各类别概率之和可能大于 1,损失函数会在训练时惩罚”概率之和超过 1”的情形,但这种惩罚与任务无关。正确做法是使用 Softmax + Cross-Entropy。

若各类不互斥(多标签),则必须使用独立 Sigmoid——这正是多分类与多标签的根本区别。

陷阱 3:忽略数值稳定性

BCE 的计算涉及 ,当 时, 输入趋近 0,导致数值崩溃(),梯度变为 NaN。框架实现中通常对 进行裁剪(如 ),但若自行实现必须注意:

# 正确做法(数值稳定)
loss = -(y * torch.clamp(log_pred, min=-100) + (1-y) * torch.clamp(log(1-pred), min=-100))

陷阱 4:类别不平衡时仅用 Accuracy 评估

在极度不平衡的数据集(如 99% 负例,1% 正例)中,模型将所有样本预测为负例即可获得 99% 的 accuracy,但完全无法检测正例。必须使用 Precision / Recall / F1 / AUC 等不平衡敏感的评测指标,同时用加权损失或 Focal Loss 从训练目标层面解决不平衡。

陷阱 5:Loss 下降但评测指标不提升时不调整

Loss 与评测指标的关系并非单调。常见情况:Focal loss 训练中 loss 可能上升(因为模型更聚焦于困难样本,简单样本损失降低),但 mAP(mean Average Precision)实际在提升。若只看 loss,会误判为训练失败。解决方案是独立监控评测指标,不可将 loss 作为唯一成功标准。


8. 分类 / 回归 / 多标签损失选择表

场景损失函数输出层激活评测指标说明
标准二分类BCE(Sigmoid + Cross-Entropy)SigmoidAccuracy, AUC, F1标准配置
类别不平衡二分类BCE + class weight / Focal LossSigmoidPrecision, Recall, F1Focal Loss 中 经验常用
标准多分类(互斥)Softmax + Cross-EntropySoftmaxAccuracy, Top-1/5梯度恒为
类别不平衡多分类Cross-Entropy + class weightSoftmaxMacro-F1, Weighted-F1class weight 为各类频率倒数
标签需要正则化Softmax + Cross-Entropy + Label SmoothingSoftmax + Smoothing 经验常用
多标签分类Multi-label BCE独立 SigmoidHamming Loss, Example-F1各标签独立,无互斥
标准回归MSELinearMSE, MAE, 对离群点敏感
鲁棒回归Huber LossLinearMAE, Huber(自定义) 需调超参数
有界回归(0~1)MSE + Sigmoid 输出SigmoidMSE on bounded target输出约束在目标范围
目标检测(RetinaNet)Focal LossSigmoidmAP解决正负样本极端不平衡
序列建模(NLP)Cross-Entropy(token-level)SoftmaxPerplexity, BLEU按 token 计算交叉熵