CNN损失函数学习(最全) | 您所在的位置:网站首页 › 什么是loss函数 › CNN损失函数学习(最全) |
损失函数的学习
一、损失函数的概念二、回归损失(Regression Loss)1.L1 Loss2.L2 Loss3.Smooth L1 Loss4.IoU Loss5.GIoU Loss6.DIoU Loss7.CIoU Loss8.F-EIoU Loss8.CDIoU Loss
三、分类损失1.Entropy2.Cross Entropy3.K-L Divergence4.Dice Loss5.Focal Loss6.Tversky loss
总结
一、损失函数的概念
在机器学习中,损失函数是代价函数的一部分,而代价函数则是目标函数的一种类型。
Loss function,即损失函数:用于定义单个训练样本与真实值之间的误差; Cost function,即代价函数:用于定义单个批次/整个训练集样本与真实值之间的误差; Objective function,即目标函数:泛指任意可以被优化的函数。 损失函数是用于衡量模型所作出的预测离真实值(Ground Truth)之间的偏离程度。 通常,我们都会最小化目标函数,最常用的算法便是“梯度下降法”(Gradient Descent)。 俗话说,任何事情必然有它的两面性,因此,并没有一种万能的损失函数能够适用于所有的机器学习任务,所以在这里我们需要知道每一种损失函数的优点和局限性,才能更好的利用它们去解决实际的问题。 损失函数大致可分为两种:回归损失(针对连续型变量)和分类损失(针对离散型变量)。 二、回归损失(Regression Loss) 1.L1 Loss也称为Mean Absolute Error,即平均绝对误差(MAE),它衡量的是预测值与真实值之间距离的平均误差幅度,作用范围为0到正无穷。 优点: 收敛速度快,能够对梯度给予合适的惩罚权重,而不是“一视同仁”,使梯度更新的方向可以更加精确。 缺点: x=0处,不可导,影响梯度下降和收敛。x值小时梯度大,很难收敛到极小值(除非在x值小时调小学习率,以较小更新幅度)。 L2 loss 对于异常值比较敏感,而 L1 loss 对于异常值比较鲁棒。L1 loss 之所以对异常值比较敏感,是因为它的梯度在异常值处不连续,即导数值会突然变化,从而使得优化算法在这个点附近难以收敛。此外,L1 loss 的另一个缺点是它的梯度在零点处不唯一,这可能导致优化算法的效率降低。 2.L2 Loss也称为Mean Squred Error,即均方差(MSE),它衡量的是预测值与真实值之间距离的平方和,作用范围同为0到正无穷。 优点: 对离群点(Outliers)或者异常值更具有鲁棒性。 缺点: 由图可知其在0点处的导数不连续,使得求解效率低下,导致收敛速度慢;而对于较小的损失值,其梯度也同其他区间损失值的梯度一样大,所以不利于网络的学习。 实际应用中: 对于L1范数和L2范数,如果异常值对于实际业务非常重要,我们可以使用MSE(L2 )作为我们的损失函数;另一方面,如果异常值仅仅表示损坏的数据,那我们应该选择MAE(L1 )作为损失函数。 此外,考虑到收敛速度,在大多数的卷积神经网络中(CNN)中,我们通常会选择L2损失。但是,还存在这样一种情形,当你的业务数据中,存在95%的数据其真实值为1000,而剩下5%的数据其真实值为10时,如果你使用MAE(L1 )去训练模型,则训练出来的模型会偏向于将所有输入数据预测成1000,因为MAE(L1 )对离群点不敏感,趋向于取中值。而采用MSE(L2 )去训练模型时,训练出来的模型会偏向于将大多数的输入数据预测成10,因为它对离群点异常敏感。因此,大多数情况这两种回归损失函数并不适用,能否有什么办法可以同时利用这两者的优点呢? 3.Smooth L1 Loss即平滑的L1损失(SLL),出自Fast RCNN 。SLL通过综合L1和L2损失的优点,在0点处附近采用了L2损失中的平方函数,解决了L1损失在0点处梯度不可导的问题,使其更加平滑易于收敛。此外,在|x|>1的区间上,它又采用了L1损失中的线性函数,使得梯度能够快速下降。 通过对这三个损失函数进行求导可以发现,L1损失的导数为常数,如果不及时调整学习率,那么当值过小时,会导致模型很难收敛到一个较高的精度,而是趋向于一个固定值附近波动。反过来,对于L2损失来说,由于在训练初期值较大时,其导数值也会相应较大,导致训练不稳定。最后,可以发现Smooth L1在训练初期输入数值较大时能够较为稳定在某一个数值,而在后期趋向于收敛时也能够加速梯度的回传,很好的解决了前面两者所存在的问题。
实际目标检测框回归任务中的损失loss为 其中, 即交并比损失,出自UnitBox,由旷视科技于ACM2016首次提出。 常规的Lx损失中,都是基于目标边界中的4个坐标点信息之间分别进行回归损失计算的。因此,这些边框信息之间是相互独立的。然而,直观上来看,这些边框信息之间必然是存在某种相关性的 基于L1和L2的距离的loss对于尺度不具有不变性。 如下图(a)-(b)分别所示,绿色框代表Ground Truth,黑色框代表Prediction,可以看出, 图(a)中的三组框具有相同的L2 Loss,但其IoU差异很大; 图(b)中的三组框具有相同的L1 Loss,但IoU 同样差异很大,说明L1,L2这些Loss用于回归任务时,不能等价于最后用于评测检测的IoU. 同一个L2/L1 Loss 分数,预测框与真实框之间的拟合/重叠程度并不相同,显然重叠度越高的预测框是越合理的。 IoU损失将候选框的四个边界信息作为一个整体进行回归,从而实现准确、高效的定位,具有很好的尺度不变性。为了解决IoU度量不可导的现象,引入了负Ln范数来间接计算IoU损失。 即泛化的IoU损失,全称为Generalized Intersection over Union,由斯坦福学者于CVPR2019年发表的这篇论文(https://arxiv.org/abs/1902.09630)中首次提出。 上面我们提到了IoU损失可以解决边界框坐标之间相互独立的问题,考虑这样一种情况, 当预测框与真实框之间没有任何重叠时,两个边框的交集(分子)为0,此时IoU损失为0,因此IoU无法算出两者之间的距离(重叠度)。 另一方面,由于IoU损失为零,意味着梯度无法有效地反向传播和更新,即出现梯度消失的现象,致使网络无法给出一个优化的方向。也就是说梯度为0,没法优化(GIOU重新定义了损失函数的公式,保证在没有相交时也会有损失函数值,能够进行反向传播) 此外,如下图所示,IoU对不同方向的边框对齐也是一脸懵逼的,所计算出来的值都一样。
GIoU具有IoU所拥有的一切特性,如对称性,三角不等式等。 GIoU ≤ IoU,特别地,0 ≤ IoU(A, B) ≤ -1, 而0 ≤ GIoU(A, B) ≤ -1; 当两个边框的完全重叠时,此时GIoU = IoU = 1. 而当 |AUB| 与 最小闭合凸面C 的比值趋近为0时,即两个边框不相交的情况下,此时GIoU将渐渐收敛至 -1. 同样地,我们也可以通过一定的方式去计算出两个矩形框之间的GIoU损失,具体计算步骤也非常简单,详情参考原论文。 即距离IoU损失,全称为Distance-IoU loss,由天津大学数学学院研究人员于AAAI2020所发表的这篇论文 (https://arxiv.org/abs/1911.08287)中首次提出。 paper:https://arxiv.org/pdf/1911.08287.pdf 提出DIOU和CIOU paper:https://arxiv.org/pdf/2005.03572.pdf 提出CIOU和应用(检测+分割) 注意,两篇paper的作者几乎是同一个团队,可以认为是一个补充或者互相印证的关系 上面我们谈到GIoU通过引入最小闭合凸面来解决IoU无法对不重叠边框的优化问题。 但是,其仍然存在两大局限性:边框回归还不够精确 & 收敛速度缓慢 。 考虑下图这种情况,当目标框完全包含预测框时,此时GIoU退化为IoU。显然,我们希望的预测是最右边这种情况。因此,作者通过计算两个边框之间的中心点归一化距离,从而更好的优化这种情况。
下图表示的是GIoU损失(第一行)和DIoU损失(第二行)的一个训练过程收敛情况。 其中绿色框为目标边框,黑色框为锚框,蓝色框和红色框则分别表示使用GIoU损失和DIoU损失所得到的预测框。 可以发现,GIoU损失一般会增加预测框的大小使其能和目标框重叠, 而DIoU损失则直接使目标框和预测框之间的中心点归一化距离最小,即让预测框的中心快速的向目标中心收敛。 下面给出这三个IoU损失所对应的计算公式。 对于DIoU来说,如下图所示,其惩罚项由两部分构成: 分子为目标框和预测框中心点之间的欧式距离;ρ代表欧氏距离 分母为两个框最小外接矩形框的两个对角线距离。(c代表能够同时覆盖预测框和gt框的最小矩形的对角线距离(就是闭包区域的对角线)) 因此, 直接优化两个点之间的距离会使得模型收敛得更快,同时又能够在两个边框不重叠的情况下给出一个优化的方向。
即完整IoU损失,全称为Complete IoU loss,与DIoU出自同一篇论文。上面我们提到GIoU存在两个缺陷,DIoU的提出解决了其实一个缺陷,即收敛速度的问题。而一个好的边框回归损失应该同时考虑三个重要的几何因素,即重叠面积(Overlap area)、中心点距离(Central point distance)和高宽比(Aspect ratio)。 GIoU考虑到了重叠面积的问题, DIoU考虑到了重叠面积和中心点距离的问题, CIoU则在此基础上进一步的考虑到了高宽比的问题。 更进一步的,边界框的长宽比的一致性也是一个重要的几何因素。因此,基于DIOU,我们通过施加长宽比的一致性来提出了CIOU-loss: CIoU的计算公式如下所示,可以看出,其在DIoU的基础上加多了一个惩罚项αv。其中α为权重为正数的重叠面积平衡因子,在回归中被赋与更高的优先级,特别是在两个边框不重叠的情况下;而v则用于测量宽高比的一致性。
Focal and Efficient IoU Loss是由华南理工大学学者最近提出的一篇关于目标检测损失函数的论文,文章主要的贡献是提升网络收敛速度和目标定位精度。目前检测任务的损失函数主要有两个缺点: (1)无法有效地描述边界框回归的目标,导致收敛速度慢以及回归结果不准确 (2)忽略了边界框回归中不平衡的问题。 F-EIou loss首先提出了一种有效的交并集(IOU)损失,它可以准确地测量边界框回归中的重叠面积、中心点和边长三个几何因素的差异:
Control Distance IoU Loss是由同济大学学者提出的,文章的主要贡献是在几乎不增强计算量的前提下有效提升了边界框回归的精准度。目前检测领域主要两大问题: (1)SOTA算法虽然有效但计算成本高 (2)边界框回归损失函数设计不够合理。
即“熵”,熵的概念最早起源于物理学,用于度量一个热力学系统的无序程度。但更常见的,在信息论里面, 熵是用于描述对不确定性的度量。所以,这个概念可以延伸到深度神经网络中,比如我们的模型在做分类时,其实也是在做一个判断一个物体到底是不是属于某个类别。因此,在正式介绍分类损失函数时,我们必须先了解熵的概念。 数字化时代,信息都是由Bits(0和1)组成的。 在通信时,有些位是**有用(useful)的信息,有些位则是冗余(redundant)的信息,有些位甚至是错误(error)**的信息,等等。当我们传达信息时,我们希望尽可能多地向接收者传递有用的信息。 传输1比特的信息意味着将接收者的不确定性降低2倍。—— 香浓 下面以一个天气预报的例子为例,形象化的讲解熵到底尤为何物?假设一个地方的天气是随机的,每天有50%的机会是晴天或雨天
总的来说:一个事件的不确定性就越大,其信息量越大,它的熵值就越高。比如:周杰伦今天宣布发新专辑了。 相反,如果一个时间的不确定性越小,其信息量越小,它的熵值就越低。比如:本文今天又增加了一个读者。 2.Cross Entropy交叉熵,它只是平均信息长度。考虑同样的例子,8种可能的天气条件,所有都是等可能的,每一种都可以用3位编码 [2^3=8]。
即KL散度。对于交叉熵损失,除了我们在这里使用预测概率的对数(log(q(i)))外,它看起来与上面熵的方程非常相似。如果我们的预测是完美的,那就是预测分布等于真实分布,此时交叉熵就等于熵。但是,如果分布不同,则交叉熵将比熵大一些位数。交叉熵超过熵的量称为相对熵,或更普遍地称为库尔贝克-莱布里埃发散度(KL Divergence)。总结如下 即骰子损失,出自V-Net,是一种用于评估两个样本之间相似性度量的函数,取值范围为0~1,值越大表示两个值的相似度越高,其基本定义(二分类)如下: 焦点损失,出自何凯明的《Focal Loss for Dense Object Detection》,出发点是解决目标检测领域中one-stage算法如YOLO系列算法准确率不高的问题。作者认为样本的类别不均衡(比如前景和背景)是导致这个问题的主要原因。. 比如在很多输入图片中,我们利用网格去划分小窗口,大多数的窗口是不包含目标的。 如此一来,如果我们直接运用原始的交叉熵损失,那么负样本所占比例会非常大,主导梯度的优化方向,即网络会偏向于将前景预测为背景。即使我们可以使用OHEM(在线困难样本挖掘)算法来处理不均衡的问题,虽然其增加了误分类样本的权重,但也容易忽略掉易分类样本。 而Focal loss则是聚焦于训练一个困难样本的稀疏集,通过直接在标准的交叉熵损失基础上做改进,引进了两个惩罚因子,来减少易分类样本的权重,使得模型在训练过程中更专注于困难样本。其基本定义如下: Tversky loss,发表于CVPR 2018上的一篇《Tversky loss function for image segmentation using 3D fully convolutional deep networks》文章,是根据Tversky 等人于1997年发表的《Features of Similarity》文章所提出的Tversky指数所改造的。Tversky系数主要用于描述两个特征(集合)之间的相似度,其定义如下: 因此,我们只需控制 α 和 β 便可以控制假阴性和假阳性之间的平衡。 比如在医学领域我们要检测肿瘤时,更多时候我们是希望Recall值(查全率,也称为灵敏度或召回率)更高,因为我们不希望说将肿瘤检测为非肿瘤,即假阴性。因此,我们可以通过增大 β 的取值,来提高网络对肿瘤检测的灵敏度。其中,α + β 的取值我们一般会令其1。 总结总的来说,损失函数的形式千变万化,但追究溯源还是万变不离其宗。其本质便是给出一个能较全面合理的描述两个特征或集合之间的相似性度量或距离度量,针对某些特定的情况,如类别不平衡等,给予适当的惩罚因子进行权重的加减。大多数的损失都是基于最原始的损失一步步改进的,或提出更一般的形式,或提出更加具体实例化的形式。 参考: https://mp.weixin.qq.com/s/Q4ryiTOSJQaJ2e5clmXjtg IOU代码: https://blog.csdn.net/lovep1/article/details/114449861 损失函数技术总结及Pytorch使用示例 : https://mp.weixin.qq.com/s/Am1oKdeMAgKPl4r-vIjFXQ |
CopyRight 2018-2019 实验室设备网 版权所有 |