当前位置: 首页 > article >正文

损失函数分类

1. NLLLoss(负对数似然损失)

定义:

  • 直接对预测的概率 p(yi) 的负对数求平均。
  • 通常配合 Softmax 使用,输入为对数概率。
优点:
  • 对离散分类问题效果良好。
  • 更灵活,用户可以自行计算 Softmax。
缺点:
  • 需要输入已经经过 LogSoftmax 的对数概率。
  • 使用不便,现代任务中常被 CrossEntropyLoss 替代。
适用场景:
  • 分类问题,尤其是多分类问题。

2. CrossEntropyLoss

定义:

  • 内部集成了 SoftmaxNLLLoss 的计算。
优点:
  • 集成了 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,数值易溢出
BCEWithLogitsLossBCELoss + Sigmoid二分类、多标签分类自动加 Sigmoid,数值稳定需输入 logits,无法直接输入概率
MSE均方误差连续值预测平滑优化,易收敛对异常值敏感
MAE均绝对误差连续值预测对异常值鲁棒优化不平滑,梯度零点不连续
SmoothL1LossMSE + MAE 结合回归、目标检测平滑优化,兼顾精度和鲁棒性参数较多,需调试

选择建议

  1. 分类任务:

    • 二分类:优先使用 BCEWithLogitsLoss
    • 多分类:使用 CrossEntropyLoss
    • 多标签分类:可使用 BCELossBCEWithLogitsLoss
  2. 回归任务:

    • 精确值预测:MSE
    • 数据有异常值:MAESmoothL1Loss
  3. 特殊场景:

    • 自定义 Softmax:使用 NLLLoss
    • 目标检测:SmoothL1Loss

http://www.kler.cn/a/417671.html

相关文章:

  • unique_ptr
  • 7、递归
  • 【Android】EventBus的使用及源码分析
  • 使用Dify与BGE-M3搭建RAG(检索增强生成)应用-改进一,使用工作流代替Agnet
  • 学术中常见理论归纳总结-不定期更新
  • 学习threejs,使用设置lightMap光照贴图创建阴影效果
  • 鸿蒙生态崛起的机遇有什么
  • 【人工智能】探索自然语言生成(NLG):用GPT生成文本
  • 23种设计模式-单例(Singleton)设计模式
  • 洛谷 P1746 离开中山路 C语言 bfs
  • 柔性芯片:实现万物互联的催化剂
  • ScreenshotToCode安装教程
  • 存储过程与自然语言处理逻辑的不同与结合
  • 模拟实现命令行解释器shell
  • 【C++初阶】第5课—动态内存管理
  • 混乱原理与程序设计。
  • clickhouse 使用global in 优化 in查询
  • 【VUE3】新版Vue3+ElementPlus全家桶开发视频项目实战
  • vxlan 手工隧道(头端复制)
  • burpsuite功能模块学习(2)
  • 后台管理-动态路由配置以及用户权限管理(vue3+element plus+koa+Sequelize )
  • android将pcm byte[]通过Librtmp进行rtmp推流
  • 【Flink-scala】DataStream编程模型之窗口计算-触发器-驱逐器
  • 深度学习:在PyTorch中进行模型验证完整流程
  • 【问题】webdriver.Chrome()设置参数executable_path报不存在
  • HDMI协议