机器学习常用损失函数
损失函数主要是用来衡量真值与预测值之间的偏离程度,根据其离散还是连续分为分类和回归损失函数。
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^)=−m1i=1∑m(yilog(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^)=−m1i=1∑myilog(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^)=−m1i=1∑myi(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^)=−m1i=1∑m(1−yiyi^)
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 Loss
,Smooth 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、L2
Loss时的尺度不变问题,参考5
缺点: IOU Loss
无法反映距离的远近,只衡量了相交面积,如下图虽具有相同的IOU
,却不能准确反映相交的好坏
图片引用自:https://bbs.cvmart.net/articles/1436(这应该是哪篇论文里的,暂未找到,有知道的感谢告知)
10.GIOU Loss
图片来源于7:https://arxiv.org/abs/1902.09630
C
是包围A
和B
的最小矩形
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
已经考虑了真实框与预测框的重合面积,中心距离,CIoU
在DIoU
基础上加入长宽比拟合项。
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
机器学习常用损失函数相关推荐
- 【深度学习】一文读懂机器学习常用损失函数(Loss Function)
[深度学习]一文读懂机器学习常用损失函数(Loss Function) 最近太忙已经好久没有写博客了,今天整理分享一篇关于损失函数的文章吧,以前对损失函数的理解不够深入,没有真正理解每个损失函数的特点 ...
- 学点基本功:机器学习常用损失函数小结
(图片付费下载自视觉中国) 作者 | 王桂波 转载自知乎用户王桂波 [导读]机器学习中的监督学习本质上是给定一系列训练样本 ,尝试学习 的映射关系,使得给定一个 ,即便这个不在训练样本中,也能够得 ...
- 机器学习常用损失函数总览:基本形式、原理、特点
来源:七月在线实验室 本文约4300字,建议阅读9分钟. 本文将介绍机器学习.深度学习中分类与回归常用的几种损失函数. 机器学习中的监督学习本质上是给定一系列训练样本 ,尝试学习 的映射关系,使得给 ...
- 机器学习常用损失函数小结
作者:王桂波 转载自:https://zhuanlan.zhihu.com/p/77686118 整理:HealthAI 上一篇文章我们看到了目标函数,损失函数,和代价函数的区别.在该部分我们来看一看 ...
- 常用损失函数(Loss Function)
[深度学习]一文读懂机器学习常用损失函数(Loss Function) 最近太忙已经好久没有写博客了,今天整理分享一篇关于损失函数的文章吧,以前对损失函数的理解不够深入,没有真正理解每个损失函数的特点 ...
- 一文看懂机器学习中的常用损失函数
作者丨stephenDC 编辑丨zandy 来源 | 大数据与人工智能(ID: ai-big-data) 导语:损失函数虽然简单,却相当基础,可以看做是机器学习的一个组件.机器学习的其他组件,还包括激 ...
- 机器学习——常用算法的总结
机器学习常用算法总结 机器学习--常用算法的总结 学习方式 一.监督式学习: 1.分类 2.回归 补充--线性回归与逻辑回归 二.非监督式学习: 三.半监督式学习: 四.强化学习: 算法类似性 一.回 ...
- 机器学习基础——损失函数与风险函数
机器学习的目标是从模型的假设空间中选取最优的模型,其具体的策略有经验风险最小化和结构风险最小化.下面简单介绍损失函数和风险函数的相关概念.参考自李航<统计学习方法>. 损失函数 损失函数( ...
- 神经网络常用损失函数Loss Function
深度学习神经网络常用损失函数 损失函数--Loss Function 1. MSE--均方误差损失函数 2. CEE--交叉熵误差损失函数 3. mini-batch版交叉熵误差损失函数 损失函数–L ...
最新文章
- 利用exif.js解决手机上传竖拍照片旋转90\180\270度问题
- DL之SSD:SSD算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
- 【SPSS】第十周-面板数据的线性回归
- php 高级搜索下拉框,高级搜索页面advancedsearch.php调用自定义字段
- keil5建立工程步骤_5个步骤建立实践社区
- nginx里配置跨域
- 2005年3月9日笔记
- C语言小知识---printf()函数转换符的意义
- 【转】numpy.random.randn()与rand()的区别
- 台式计算机模拟软件,仿真软件 计算机仿真模拟常用软件有那些?
- c4d打开没反应_野分享:一大波C4D插件的测试以及分享
- window xp共享文件夹
- ubuntu linux目录绿色高亮问题
- IDM+百度网盘提速下载复活版
- 数据挖掘神经网络算法,人工神经网络分析方法
- java 代码圣诞的祝福_圣诞祝福短信全集
- win10无线投屏_miracast投屏的未来
- Python列表详解(附员工管理系统小项目练习)
- Xamarin.Forms之AbsoluteLayout
- 计算机系统中CPU的利用率最高的时候,cpu使用率高怎么办