1. 损失函数

损失函数用于衡量模型预测结果与真实标签之间的差异。训练模型的目标通常是让损失不断减小。

MAE:平均绝对误差

计算预测值与真实值之间的绝对误差,再取平均:

MAE = (1/n) * Σ|y^hat - y|

特点:

  • 对所有误差基本一视同仁
  • 对异常值相对不敏感
  • 鲁棒性较好
  • 在误差为0的位置不可导,但实际可通过次梯度等方式优化

MSE:均方误差

计算预测值与真实值之间误差的平方,再取平均:

MSE = (1/n) * Σ(y^hat - y)^2

特点:

  • 会放大较大的误差
  • 对异常值比较敏感
  • 梯度连续,通常更容易优化
  • 常用于回归任务

例如真实值为10:

预测值 误差 MAE贡献 MSE贡献
12 2 2 4
20 10 10 100

MSE会明显加大对大误差的惩罚。


2. 交叉熵损失

交叉熵主要用于分类任务,用于衡量模型预测的概率分布与真实标签之间的差异。

例如模型预测:

猫:0.9
狗:0.1

真实标签:

猫:1
狗:0

模型给真实类别分配的概率越高,交叉熵越小。

二分类交叉熵 BCE

适用于二分类任务,或者一个样本可以同时属于多个类别的多标签分类任务。

其中:

  • y:真实标签,只能是0或1
  • p:模型预测属于正类的概率
BCE = -[y*log(p) + (1-y)*log(1-p)]

如果真实标签为1:

BCE = -log(p)

模型预测正确且非常自信,损失很小;预测错误且非常自信,损失会很大。

例如真实标签是正类:

预测正类概率 p 损失趋势
0.99 很小
0.60 中等
0.10 很大
0.01 极大

二分类模型通常使用一个输出值,经过 Sigmoid 转换为0到1之间的概率。

多分类交叉熵 CCE

适用于一个样本只属于多个类别中的一个类别,例如猫、狗、鸟三分类。

假设真实类别是猫:

猫:0.7
狗:0.2
鸟:0.1

在真实标签使用 One-Hot 编码时,多分类交叉熵可简化为:

CCE = -log(真实类别对应的预测概率)

因此,虽然模型输出了所有类别的概率,但最终损失主要取决于真实类别对应的概率。

多分类模型通常输出多个 logits,再通过 Softmax 转换为概率分布。

实际框架中,交叉熵损失通常直接接收 logits,并在内部完成 Sigmoid 或 Softmax,这样数值稳定性更好。


3. 多任务中的总损失

复杂模型通常同时完成多个子任务,总损失由多个子损失加权组成:

total_loss =
a * box_loss
+ b * cls_loss
+ c * seg_loss

其中 a、b、c 是不同损失的权重。

权重的作用:

  • 决定不同任务对参数更新的影响程度
  • 权重过大,该任务可能主导训练
  • 权重过小,该任务可能学习不足
  • 不同损失的数值尺度不同,不能只比较原始数值大小

YOLO分割任务中常见:

  • Box loss:约束预测框的位置和大小
  • Classification loss:约束类别预测
  • Segmentation loss:约束预测 Mask 与真实 Mask 的差异
  • DFL loss:部分实现中用于优化边界框位置分布

训练时要同时观察:

  • 训练损失
  • 验证损失
  • Box mAP
  • Mask mAP
  • Precision
  • Recall

不能只因为训练 Loss 很低,就认为模型效果一定很好。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐