损失函数分类
1. NLLLoss(负对数似然损失)
定义:
- 直接对预测的概率 p(yi) 的负对数求平均。
- 通常配合 Softmax 使用,输入为对数概率。
优点:
- 对离散分类问题效果良好。
- 更灵活,用户可以自行计算 Softmax。
缺点:
- 需要输入已经经过 LogSoftmax 的对数概率。
- 使用不便,现代任务中常被 CrossEntropyLoss 替代。
适用场景:
- 分类问题,尤其是多分类问题。
2. CrossEntropyLoss
定义:
- 内部集成了 Softmax 和 NLLLoss 的计算。
优点:
- 集成了 Softmax 和对数概率计算,使用简单方便。
- 稳定性更高,避免了数值溢出问题。
缺点:
- 不适用于多标签分类任务。
- 输出需要为原始 logits。
适用场景:
- 图像分类、文本分类等多分类任务。
3. BCELoss
定义:
- 用于二分类任务,输入为概率值(通常在 [0, 1])。
优点:
- 简单直观,适合二分类问题。
- 适用于多标签分类(标签独立)。
缺点:
- 输入必须经过 Sigmoid 函数,使用不如 BCEWithLogitsLoss 方便。
- 数值稳定性较差,容易出现浮点溢出。
适用场景:
- 二分类任务,如情感分析、垃圾邮件分类。
- 多标签分类任务。
4. BCEWithLogitsLoss
定义:
- 结合了 Sigmoid 和 BCELoss 的计算。
优点:
- 自动处理 Sigmoid 和数值稳定性问题。
- 更高效,推荐替代 BCELoss。
缺点:
- 使用时需要注意输入为 logits,而非概率值。
适用场景:
- 同 BCELoss,但推荐优先使用。
5. MSE(均方误差)
定义:
- 衡量预测值和真实值之间的平方差。
优点:
- 对小误差更敏感,优化平滑,易于收敛。
- 实现简单,适用范围广。
缺点:
- 对异常值非常敏感,可能导致模型过拟合异常值。
适用场景:
- 连续值预测(如回归任务)。
- 自监督任务(如自编码器)。
6. MAE(均绝对误差)
定义:
- 衡量预测值和真实值之间的绝对差。
优点:
- 对异常值更鲁棒,不会过分放大大的误差。
缺点:
- 优化不平滑,梯度在零点不连续,可能导致收敛变慢。
适用场景:
- 数据中可能存在异常值的回归任务。
7. SmoothL1Loss
定义:
- 结合了 MSE 和 MAE 的优点。
优点:
- 对小误差效果类似 MSE,收敛快;对大误差类似 MAE,鲁棒性好。
- 平滑优化过程,适合复杂任务。
缺点:
- 参数较多(如阈值),需要调试。
适用场景:
- 目标检测中的回归(如边框偏移)。
- 对异常值敏感但仍需要高精度的回归任务。
总结对比表格
损失函数 | 定义 | 适用任务 | 优点 | 缺点 |
---|---|---|---|---|
NLLLoss | 负对数似然 | 多分类任务 | 灵活,自定义 Softmax | 需要 LogSoftmax,使用麻烦 |
CrossEntropyLoss | 集成 Softmax 和 NLLLoss | 多分类任务 | 使用方便,数值稳定 | 不支持多标签分类 |
BCELoss | 二分类交叉熵 | 二分类、多标签分类 | 简单直观 | 需手动加 Sigmoid,数值易溢出 |
BCEWithLogitsLoss | BCELoss + Sigmoid | 二分类、多标签分类 | 自动加 Sigmoid,数值稳定 | 需输入 logits,无法直接输入概率 |
MSE | 均方误差 | 连续值预测 | 平滑优化,易收敛 | 对异常值敏感 |
MAE | 均绝对误差 | 连续值预测 | 对异常值鲁棒 | 优化不平滑,梯度零点不连续 |
SmoothL1Loss | MSE + MAE 结合 | 回归、目标检测 | 平滑优化,兼顾精度和鲁棒性 | 参数较多,需调试 |
选择建议
-
分类任务:
- 二分类:优先使用
BCEWithLogitsLoss
。 - 多分类:使用
CrossEntropyLoss
。 - 多标签分类:可使用
BCELoss
或BCEWithLogitsLoss
。
- 二分类:优先使用
-
回归任务:
- 精确值预测:
MSE
。 - 数据有异常值:
MAE
或SmoothL1Loss
。
- 精确值预测:
-
特殊场景:
- 自定义 Softmax:使用
NLLLoss
。 - 目标检测:
SmoothL1Loss
。
- 自定义 Softmax:使用