损失函数主要是用来衡量真值与预测值之间的偏离程度,根据其离散还是连续分为分类和回归损失函数。

1.二分类交叉熵

  • Binary Cross-Entropy Loss(BCELoss):
    L(yi,yi^)=−1m∑i=1m(yilog(yi^)+(1−yi)(1−yi^))L(y_{i}, \hat{y_{i}}) = -\frac{1}{m}\sum\limits_{i=1}^{m}(y_{i}log(\hat{y_{i}})+(1-y_{i})(1-\hat{y_{i}}))L(yi​,yi​^​)=−m1​i=1∑m​(yi​log(yi​^​)+(1−yi​)(1−yi​^​))

  • 常用于多标签分类
    多标签分类指一个对象可以属于多个类,当然BCELoss也可以用于多分类。多标签分类示例:譬如可以将人分高、富、帅三类,
    有些人可以同时属于高富不帅、高不富帅或高富帅多个类别。记:高1,不高0,富1,不富0,帅1不帅0,
    现在有三人
    A:[1,1,1]
    B:[0,1,1]
    C:[1, 0, 1]
    有个算法预测的结果分别为
    Ap[0.9,0.8,0.5]A_p[0.9, 0.8, 0.5]Ap​[0.9,0.8,0.5]
    Bp[0.6,0.48,0.95]B_p[0.6, 0.48, 0.95]Bp​[0.6,0.48,0.95]
    Cp[0.9,0.1,0.6]C_p[0.9, 0.1, 0.6]Cp​[0.9,0.1,0.6]
    BCE损失计算为:
    LA=(1∗log0.9+(1−1)∗log(1−0.9))+(1∗log0.8+(1−1)∗log(1−0.8))+(1∗log0.5+(1−1)∗log(1−0.5))3=−0.10536+0.22314+0.693153=−1.021653=−0.34055L_A=\frac{(1*log0.9+(1-1)*log(1-0.9))+(1*log0.8+(1-1)*log(1-0.8))+(1*log0.5+(1-1)*log(1-0.5))}{3}=-\frac{0.10536+0.22314+0.69315}{3}=-\frac{1.02165}{3} = -0.34055LA​=3(1∗log0.9+(1−1)∗log(1−0.9))+(1∗log0.8+(1−1)∗log(1−0.8))+(1∗log0.5+(1−1)∗log(1−0.5))​=−30.10536+0.22314+0.69315​=−31.02165​=−0.34055
    LB=(0∗log0.6+(1−0)∗log(1−0.6))+(1∗log0.48+(1−1)∗log(1−0.48))+(1∗log0.95+(1−1)∗log(1−0.95))3=−0.56718L_B=\frac{(0*log0.6+(1-0)*log(1-0.6))+(1*log0.48+(1-1)*log(1-0.48))+(1*log0.95+(1-1)*log(1-0.95))}{3}=-0.56718LB​=3(0∗log0.6+(1−0)∗log(1−0.6))+(1∗log0.48+(1−1)∗log(1−0.48))+(1∗log0.95+(1−1)∗log(1−0.95))​=−0.56718
    LC=(1∗log0.9+(1−1)∗log(1−0.9))+(0∗log0.1+(1−0)∗log(1−0.1))+(1∗log0.6+(1−1)∗log(1−0.6))3=−0.24051L_C=\frac{(1*log0.9+(1-1)*log(1-0.9))+(0*log0.1+(1-0)*log(1-0.1))+(1*log0.6+(1-1)*log(1-0.6))}{3}=-0.24051LC​=3(1∗log0.9+(1−1)∗log(1−0.9))+(0∗log0.1+(1−0)∗log(1−0.1))+(1∗log0.6+(1−1)∗log(1−0.6))​=−0.24051
    去掉负号:
    L=LA+LB+LC3=0.38275L = \frac{L_A+L_B+L_C}{3}=0.38275L=3LA​+LB​+LC​​=0.38275
    使用pytorch中的torch.nn.BCELoss函数来验证下我们计算的是否正确:

    结果基本一致(因上述计算只取了小数点后五位)。

2.多分类交叉熵损失

Log Loss:
L(yi,yi^)=−1m∑i=1myilog(yi^)L(y_{i}, \hat{y_{i}}) = -\frac{1}{m}\sum\limits_{i=1}^{m}y_{i}log(\hat{y_{i}})L(yi​,yi​^​)=−m1​i=1∑m​yi​log(yi​^​)

3.Focal Loss

L(yi,yi^)=−1m∑i=1myi(1−yi^)γlog(yi^)L(y_{i}, \hat{y_{i}}) = -\frac{1}{m}\sum\limits_{i=1}^{m}y_i(1-\hat{y_{i}})^\gamma log(\hat{y_{i}})L(yi​,yi​^​)=−m1​i=1∑m​yi​(1−yi​^​)γlog(yi​^​)
FAIR何凯明组2017年8月份提出来的损失函数,用于稠密目标检测。可用于类别不平衡问题,类比于带权重的损失函数,改善数据分布不平衡时算法的表现。论文中指出,超参γ\gammaγ默认取2

图片引用自Focal Loss论文https://arxiv.org/abs/1708.02002

4.合页损失函数

Hinge Loss:
分类的结果与真值的差大于一定的间隔才会被判定为正。
L(yi,yi^)=−1m∑i=1m(1−yiyi^)L(y_{i}, \hat{y_{i}}) = -\frac{1}{m}\sum\limits_{i=1}^{m}(1-y_i\hat{y_i})L(yi​,yi​^​)=−m1​i=1∑m​(1−yi​yi​^​)

5.0-1损失函数

Zrero-one Loss:

L(yi,yi^)={1,yi=yi^0,yi≠yi^L(y_{i}, \hat{y_{i}}) =\left\{\begin{matrix} 1,y_{i}=\hat{y_i}\\ 0,y_i\neq\hat{y_i} \end{matrix}\right.L(yi​,yi​^​)={1,yi​=yi​^​0,yi​​=yi​^​​

感知机使用的此函数,相等条件改为相差区间。

6.L1损失函数

又称绝对值损失函数

L(yi,yi^)=∣yi−yi^∣L(y_{i}, \hat{y_{i}}) = |y_i-\hat{y_i}|L(yi​,yi​^​)=∣yi​−yi​^​∣

7.L2损失函数

又称均方误差损失函数 Mean Square Loss(MSE):

L(yi,yi^)=(yi−yi^)2L(y_{i}, \hat{y_{i}}) = (y_i-\hat{y_i})^2L(yi​,yi​^​)=(yi​−yi​^​)2

8.Smooth L1损失函数

L(yi,yi^)={0.5(yi−yi^)2/β,if ∣yi−yi^∣<β∣yi−yi^∣−0.5∗β,otherwise L(y_{i},\hat{y_{i}}) = \begin{cases} 0.5 (y_i - \hat{y_i})^2 / \beta, & \text{if } |y_i - \hat{y_i}| < \beta \\ |y_i - \hat{y_i}| - 0.5 * \beta, & \text{otherwise } \end{cases}L(yi​,yi​^​)={0.5(yi​−yi​^​)2/β,∣yi​−yi​^​∣−0.5∗β,​if ∣yi​−yi​^​∣<βotherwise ​
β\betaβ常取1.
通过如此设置,可

  • 1)相比于L2 LossSmooth L1对于离群点更加稳定,模型不易跑飞
  • 2)同时解决了L1 Loss不光滑问题,且0-1间的梯度更小,模型更稳定

2015年04月Fast RCNN论文中提出。

9. IOU Loss


LIoU=1−IoUL_{IoU} = 1 - IoULIoU​=1−IoU

图片来源于UnitBox

即交并比损失函数,2016年旷视在UnitBox提出.

  • 可解决使用L1、L2Loss时的尺度不变问题,参考5
    缺点:
  • IOU Loss无法反映距离的远近,只衡量了相交面积,如下图虽具有相同的IOU,却不能准确反映相交的好坏

图片引用自:https://bbs.cvmart.net/articles/1436(这应该是哪篇论文里的,暂未找到,有知道的感谢告知)

10.GIOU Loss

图片来源于7:https://arxiv.org/abs/1902.09630

C是包围AB的最小矩形

LGIoU=1−GIoUL_{GIoU} = 1- GIoULGIoU​=1−GIoU
2019年02月斯坦福大学的研究团队提出。
缺点:

  • 当框B在框A中时,退化成IoU,如下图

图片来源于8 https://arxiv.org/abs/1911.08287

11.DIOU Loss


LDIoU=1−DIoUL_{DIoU} = 1 - DIoULDIoU​=1−DIoU
其中,bbb、bgtb^{gt}bgt表示预测框,真实框的中心点,ρ2(b,bgt)\rho ^2(b,b^{gt})ρ2(b,bgt)表示中心点距离的平方,ccc表示能够同时包含预测框和真实框的最小闭包区域(外接矩形)的对角线距离。

这是2019年11月份天津大学提交的一份论文中的工作,参考8

12.CIoU Loss

DIoU已经考虑了真实框与预测框的重合面积,中心距离,CIoUDIoU基础上加入长宽比拟合项。
CIoU=IoU−ρ2(b,bgt)c2−αvCIoU = IoU-\frac{\rho ^2(b,b^{gt})}{c^2}-\alpha vCIoU=IoU−c2ρ2(b,bgt)​−αv
其中α\alphaα是权重参数,超参数,vvv是衡量长宽比一致性的参数,v=4π2(arctanwgthgt−arctanwh)2v = \frac{4}{\pi^2}(arctan\frac{w^{gt}}{h^{gt}}-arctan\frac{w}{h})^2v=π24​(arctanhgtwgt​−arctanhw​)2,α\alphaα通常取α=v(1−IoU)+v\alpha=\frac{v}{(1-IoU)+v}α=(1−IoU)+vv​
LCIoU=1−CIoUL_{CIoU} = 1- CIoULCIoU​=1−CIoU
这是2020年5月份天津大学提交的一份论文中的工作,参考9

可以使用不同的IoU来对预测框做非极大值抑制(NMS)。

参考

1.https://zhuanlan.zhihu.com/p/58883095
2.https://arxiv.org/abs/1708.02002
3.https://pytorch.org/docs/stable/generated/torch.nn.SmoothL1Loss.html
4.https://arxiv.org/abs/1504.08083
5.https://bbs.cvmart.net/articles/1436
6.https://zhuanlan.zhihu.com/p/94799295
7.https://arxiv.org/abs/1902.09630
8.https://arxiv.org/abs/1911.08287
9.https://arxiv.org/abs/2005.03572

机器学习常用损失函数相关推荐

  1. 【深度学习】一文读懂机器学习常用损失函数(Loss Function)

    [深度学习]一文读懂机器学习常用损失函数(Loss Function) 最近太忙已经好久没有写博客了,今天整理分享一篇关于损失函数的文章吧,以前对损失函数的理解不够深入,没有真正理解每个损失函数的特点 ...

  2. 学点基本功:机器学习常用损失函数小结

    (图片付费下载自视觉中国) 作者 | 王桂波 转载自知乎用户王桂波 [导读]机器学习中的监督学习本质上是给定一系列训练样本  ,尝试学习  的映射关系,使得给定一个 ,即便这个不在训练样本中,也能够得 ...

  3. 机器学习常用损失函数总览:基本形式、原理、特点

    来源:七月在线实验室 本文约4300字,建议阅读9分钟. 本文将介绍机器学习.深度学习中分类与回归常用的几种损失函数. 机器学习中的监督学习本质上是给定一系列训练样本  ,尝试学习 的映射关系,使得给 ...

  4. 机器学习常用损失函数小结

    作者:王桂波 转载自:https://zhuanlan.zhihu.com/p/77686118 整理:HealthAI 上一篇文章我们看到了目标函数,损失函数,和代价函数的区别.在该部分我们来看一看 ...

  5. 常用损失函数(Loss Function)

    [深度学习]一文读懂机器学习常用损失函数(Loss Function) 最近太忙已经好久没有写博客了,今天整理分享一篇关于损失函数的文章吧,以前对损失函数的理解不够深入,没有真正理解每个损失函数的特点 ...

  6. 一文看懂机器学习中的常用损失函数

    作者丨stephenDC 编辑丨zandy 来源 | 大数据与人工智能(ID: ai-big-data) 导语:损失函数虽然简单,却相当基础,可以看做是机器学习的一个组件.机器学习的其他组件,还包括激 ...

  7. 机器学习——常用算法的总结

    机器学习常用算法总结 机器学习--常用算法的总结 学习方式 一.监督式学习: 1.分类 2.回归 补充--线性回归与逻辑回归 二.非监督式学习: 三.半监督式学习: 四.强化学习: 算法类似性 一.回 ...

  8. 机器学习基础——损失函数与风险函数

    机器学习的目标是从模型的假设空间中选取最优的模型,其具体的策略有经验风险最小化和结构风险最小化.下面简单介绍损失函数和风险函数的相关概念.参考自李航<统计学习方法>. 损失函数 损失函数( ...

  9. 神经网络常用损失函数Loss Function

    深度学习神经网络常用损失函数 损失函数--Loss Function 1. MSE--均方误差损失函数 2. CEE--交叉熵误差损失函数 3. mini-batch版交叉熵误差损失函数 损失函数–L ...

最新文章

  1. 利用exif.js解决手机上传竖拍照片旋转90\180\270度问题
  2. DL之SSD:SSD算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
  3. 【SPSS】第十周-面板数据的线性回归
  4. php 高级搜索下拉框,高级搜索页面advancedsearch.php调用自定义字段
  5. keil5建立工程步骤_5个步骤建立实践社区
  6. nginx里配置跨域
  7. 2005年3月9日笔记
  8. C语言小知识---printf()函数转换符的意义
  9. 【转】numpy.random.randn()与rand()的区别
  10. 台式计算机模拟软件,仿真软件 计算机仿真模拟常用软件有那些?
  11. c4d打开没反应_野分享:一大波C4D插件的测试以及分享
  12. window xp共享文件夹
  13. ubuntu linux目录绿色高亮问题
  14. IDM+百度网盘提速下载复活版
  15. 数据挖掘神经网络算法,人工神经网络分析方法
  16. java 代码圣诞的祝福_圣诞祝福短信全集
  17. win10无线投屏_miracast投屏的未来
  18. Python列表详解(附员工管理系统小项目练习)
  19. Xamarin.Forms之AbsoluteLayout
  20. 计算机系统中CPU的利用率最高的时候,cpu使用率高怎么办

热门文章

  1. 牛客小白月赛8: I. 路灯孤影(区间DP)
  2. opencv 调整图像亮度和对比度
  3. Ubuntu虚拟机环境下安装Python3.6
  4. zynq开发系列6:创建AXI IP实现PS对PL的数据配置(步骤一)
  5. AD画封装的血泪教训:有叉的放在外侧
  6. Docker Yearning + Inception SQL审核平台搭建
  7. layui中折叠面板的使用
  8. 高效延时消息设计与实现的场景
  9. spring-mvc文件上传与下载
  10. kettle的乱码和null值无法插入