本文首发于微信大众号 CVHub,不得以任何方法转载到其它渠道,仅供学习交流,违者必究!

导语

在机器学习中,丢失函数是价值函数的一部分,而价值函数是方针函数的一种类型。

Loss function

丢失函数:用于界说单个练习样本与实在值之间的差错。

Cost function

价值函数:用于界说单个批次/整个练习集样本与实在值之间的差错。

Objective function

方针函数:泛指任意能够被优化的函数。

丢失函数是用于衡量模型所作出的猜测离实在值(Ground Truth)之间的偏离程度。 一般,咱们都会最小化方针函数,最常用的算法就是“梯度下降法”(Gradient Descent)。俗话说,任何事情必然有它的两面性,因而,并没有一种万能的丢失函数能够适用于悉数的机器学习使命,所以在这儿咱们需求知道每一种丢失函数的长处和局限性,才干更好的运用它们去处理实践的问题。丢失函数大致可分为两种:回归丢失(针对接连型变量)和分类丢失(针对离散型变量)。

一、回归丢失

CVHub | 一文看尽深度学习中的各种损失函数

L1 Loss

也称为Mean Absolute Error,即均匀绝对差错(MAE),它衡量的是猜测值与实在值之间间隔的均匀差错起伏,作用规模为0到正无量。

长处

对离群点(Outliers)或者反常值更具有鲁棒性。

缺陷

由图可知其在0点处的导数不接连,使得求解效率低下,导致收敛速度慢;而关于较小的丢失值,其梯度也同其他区间丢失值的梯度相同大,所以不利于网络的学习。

L2 Loss

也称为Mean Squred Error,即均方差MSE),它衡量的是猜测值与实在1值之间间隔的平方和,作用规模同为0到正无量。

长处

收敛速度快,能够对梯度给予适宜的赏罚权重,而不是“天公地道”,使梯度更新的方向能够愈加精确。

缺陷

对反常值十分灵敏,梯度更新的方向很简单受离群点所主导,不具备鲁棒性。

关于L1范数和L2范数,假如反常值关于实践事务十分重要,咱们能够运用MSE作为咱们的丢失函数;另一方面,假如反常值仅仅表明损坏的数据,那咱们应该挑选MAE作为丢失函数。此外,考虑到收敛速度,在大多数的卷积神经网络中(CNN)中,咱们一般会挑选L2丢失。可是,还存在这样一种情形,当你的事务数据中,存在95%的数据其实在值为1000,而剩余5%的数据其实在值为10时,假如你运用MAE去练习模型,则练习出来的模型会倾向于将悉数输入数据猜测成1000,由于MAE对离群点不灵敏,趋向于取中值。而采用MSE去练习模型时,练习出来的模型会倾向于将大多数的输入数据猜测成10,由于它对离群点反常灵敏。因而,大多数状况这两种回归丢失函数并不适用,能否有什么办法能够同时运用这两者的长处呢?

Smooth L1 Loss

即滑润的L1丢失(SLL),出自Fast RCNN。SLL经过综合L1和L2丢失的长处,在0点处邻近采用了L2丢失中的平方函数,处理了L1丢失在0点处梯度不行导的问题,使其愈加滑润易于收敛。此外,在|x|>1的区间上,它又采用了L1丢失中的线性函数,使得梯度能够快速下降。

CVHub | 一文看尽深度学习中的各种损失函数

经过对这三个丢失函数进行求导能够发现,L1丢失的导数为常数,假如不及时调整学习率,那么当值过小时,会导致模型很难收敛到一个较高的精度,而是趋向于一个固定值邻近波动。反过来,关于L2丢失来说,由于在练习初期值较大时,其导数值也会相应较大,导致练习不稳定。终究,能够发现Smooth L1在练习初期输入数值较大时能够较为稳定在某一个数值,而在后期趋向于收敛时也能够加快梯度的回传,很好的处理了前面两者所存在的问题。

CVHub | 一文看尽深度学习中的各种损失函数

IoU Loss

即交并比丢失,出自UnitBox,由旷视科技于ACM2016初次提出。惯例的Lx丢失中,都是依据方针鸿沟中的4个坐标点信息之间别离进行回归丢失核算的。因而,这些边框信息之间是彼此独立的。然而,直观上来看,这些边框信息之间必然是存在某种相关性的。如下图(a)-(b)别离所示,绿色框代表Ground Truth,黑色框代表Prediction,能够看出,同一个Lx分数,猜测框与实在框之间的拟合/堆叠程度并不相同,明显堆叠度越高的猜测框是越合理的。IoU丢失将候选框的四个鸿沟信息作为一个全体进行回归,然后完成精确、高效的定位,具有很好的规范不变性。为了处理IoU衡量不行导的现象,引进了负Ln范数来直接核算IoU丢失。

CVHub | 一文看尽深度学习中的各种损失函数

CVHub | 一文看尽深度学习中的各种损失函数

GIoU Loss

即泛化的IoU丢失,全称为Generalized Intersection over Union,由斯坦福学者于CVPR2019年宣布的这篇论文中初次提出。上面咱们说到了IoU丢失能够处理鸿沟框坐标之间彼此独立的问题,考虑这样一种状况,当猜测框与实在框之间没有任何堆叠时,两个边框的交集(分子)为0,此刻IoU丢失为0,因而IoU无法算出两者之间的间隔(堆叠度)。另一方面,由于IoU丢失为零,意味着梯度无法有用地反向传播和更新,即呈现梯度消失的现象,致使网络无法给出一个优化的方向。此外,如下图所示,IoU对不同方向的边框对齐也是一脸懵逼的,所核算出来的值都相同。

CVHub | 一文看尽深度学习中的各种损失函数

为了处理以上的问题,如下图公式所示,GIoU经过核算任意两个形状(这儿以矩形框为例)A和B的一个最小闭合凸面C,然后再核算C中排除掉A和B后的面积占C原始面积的比值,终究再用原始的IoU减去这个比值得到泛化后的IoU值。

CVHub | 一文看尽深度学习中的各种损失函数

GIoU具有IoU所拥有的悉数特性,如对称性,三角不等式等。GIoU ≤ IoU,特别地,0 ≤ IoU(A, B) ≤ -1, 而0 ≤ GIoU(A, B) ≤ -1;当两个边框的彻底堆叠时,此刻GIoU = IoU = 1. 而当 |AUB| 与 最小闭合凸面C 的比值趋近为0时,即两个边框不相交的状况下,此刻GIoU将渐渐收敛至 -1. 相同地,咱们也能够经过一定的办法去核算出两个矩形框之间的GIoU丢失,详细核算步骤也十分简单,详情参考原论文。

DIoU Loss

即间隔IoU丢失,全称为Distance-IoU loss,由天津大学数学学院研究人员于AAAI2020所宣布的这篇论文中初次提出。上面咱们谈到GIoU经过引进最小闭合凸面来处理IoU无法对不堆叠边框的优化问题。可是,其依然存在两大局限性:边框回归还不行精确 & 收敛速度缓慢。考虑下图这种状况,当方针框彻底包括猜测框时,此刻GIoU退化为IoU。明显,咱们期望的猜测是最右边这种状况。因而,作者经过核算两个边框之间的中心点归一化间隔,然后更好的优化这种状况。

CVHub | 一文看尽深度学习中的各种损失函数

下图表明的是GIoU丢失(第一行)和DIoU丢失(第二行)的一个练习进程收敛状况。其间绿色框为方针边框,黑色框为锚框,蓝色框和红色框则别离表明运用GIoU丢失和DIoU丢失所得到的猜测框。能够发现,GIoU丢失一般会增加猜测框的巨细使其能和方针框堆叠,而DIoU丢失则直接使方针框和猜测框之间的中心点归一化间隔最小,即让猜测框的中心快速的向方针中心收敛。

CVHub | 一文看尽深度学习中的各种损失函数

图左给出这三个IoU丢失所对应的核算公式。关于DIoU来说,如图右所示,其赏罚项由两部分构成:分子为方针框和猜测框中心点之间的欧式间隔;分母为两个框最小外接矩形框的两个对角线间隔。因而, 直接优化两个点之间的间隔会使得模型收敛得更快,同时又能够在两个边框不堆叠的状况下给出一个优化的方向。

CVHub | 一文看尽深度学习中的各种损失函数

CIoU Loss

即完好IoU丢失,全称为Complete IoU loss,与DIoU出自同一篇论文。上面咱们说到GIoU存在两个缺陷,DIoU的提出处理了其实一个缺陷,即收敛速度的问题。而一个好的边框回归丢失应该同时考虑三个重要的几许因素,即堆叠面积(Overlap area)、中心点间隔(Central point distance)和高宽比(Aspect ratio)。GIoU考虑到了堆叠面积的问题,DIoU考虑到了堆叠面积和中心点间隔的问题,CIoU则在此基础上进一步的考虑到了高宽比的问题。

CVHub | 一文看尽深度学习中的各种损失函数

CIoU的核算公式如下所示,能够看出,其在DIoU的基础上加多了一个赏罚项v。其间为权重为正数的堆叠面积平衡因子,在回归中被赋与更高的优先级,特别是在两个边框不堆叠的状况下;而v则用于丈量宽高比的一致性。

CVHub | 一文看尽深度学习中的各种损失函数

F-EIoU Loss

《Focal and Efficient IoU Loss》是由华南理工大学学者最近提出的一篇关于方针检测丢失函数的论文,文章首要的贡献是提高网络收敛速度和方针定位精度。现在检测使命的丢失函数首要有两个缺陷:(1)无法有用地描述鸿沟框回归的方针,导致收敛速度慢以及回归成果不精确(2)忽略了鸿沟框回归中不平衡的问题。

F-EIou loss首先提出了一种有用的交并集(IOU)丢失,它能够精确地丈量鸿沟框回归中的堆叠面积中心点边长三个几许因素的差异:

CVHub | 一文看尽深度学习中的各种损失函数

其次,依据对有用样本发掘问题(EEM)的讨论,提出了Focal loss的回归版本,以使回归进程中专注于高质量的锚框:

CVHub | 一文看尽深度学习中的各种损失函数

终究,将以上两个部分结合起来得到Focal-EIou Loss:

CVHub | 一文看尽深度学习中的各种损失函数

其间,经过加入每个batch的权重和来避免网络在前期练习阶段收敛慢的问题。

CDIoU Loss

《Control Distance IoU Loss》是由同济大学学者提出的,文章的首要贡献是在几乎不增强核算量的前提下有用提高了鸿沟框回归的精准度。现在检测范畴首要两大问题:(1)SOTA算法虽然有用但核算成本高(2)鸿沟框回归丢失函数设计不行合理。

CVHub | 一文看尽深度学习中的各种损失函数

文章首先提出了一种关于Region Propasl(RP)和Ground Truth(GT)之间的新评估办法,即CDIoU。能够发现,它虽然没有直接中心点间隔和长宽比,但终究的核算成果是有反应出RP和GT的差异。核算公式如下:

CVHub | 一文看尽深度学习中的各种损失函数

CVHub | 一文看尽深度学习中的各种损失函数

比照以往直接核算中心点间隔或是形状类似性的丢失函数,CDIoU能更合理地评估RP和GT的差异并且有用地下降核算成本。然后,依据上述的公式,CDIoU Loss能够界说为:

CVHub | 一文看尽深度学习中的各种损失函数

经过调查这个公式,能够直观地感受到,在权重迭代进程中,模型不断地将RP的四个极点拉向GT的四个极点,直到它们堆叠停止,如下图所示。

CVHub | 一文看尽深度学习中的各种损失函数

二、分类丢失

Entropy

即“熵”。的概念最早起源于物理学,用于衡量一个热力学系统的无序程度。但更常见的,在信息论里面, 熵是用于描述对不确定性的衡量。所以,这个概念能够延伸到深度神经网络中,比方咱们的模型在做分类时,其实也是在做一个判断一个物体究竟是不是属于某个类别。因而,在正式介绍分类丢失函数时,咱们必须先了解熵的概念。

数字化时代,信息都是由Bits(0和1)组成的。在通讯时,有些位是有用(useful)的信息,有些位则是冗余(redundant)的信息,有些位乃至是错误(error)的信息,等等。当咱们传达信息时,咱们期望尽或许多地向接收者传递有用的信息。

传输1比特的信息意味着将接收者的不确定性下降2倍——香农。

下面以一个气候预报的比方为例,形象化的讲解熵究竟尤为何物?假定一个地方的气候是随机的,每天有**50%**的机会是晴天或雨天。

CVHub | 一文看尽深度学习中的各种损失函数

现在,假如气象站告知您明日即将下雨,那么他们将不确定性下降了2倍。起初,有两种相同或许的或许性,可是在收到气象站的更新信息后,咱们只要一种 。 在这儿,气象站向咱们发送了一点有用的信息,不管他们怎么编码这些信息,这都是事实。即便发送的音讯是雨天的,每个字符占一个字节,音讯的总巨细为40位,但它们依然只通讯1位的有用信息。现在,咱们假定气候有8种或许状态,且都是等或许的。

CVHub | 一文看尽深度学习中的各种损失函数

那么,当气象站为您提供第二天的气候时,它们会将您的不确定性下降了8倍。由于每个事情的产生几率为1/8,因而下降因子为8。但假如这些或许性不是等概率的呢?比方,75%的机会是晴天,25%的机会是雨天。

CVHub | 一文看尽深度学习中的各种损失函数

现在,假如气象台说第二天会下雨,那么你的不确定性就下降了4倍,也就是2比特的信息。不确定性的削减就是事情概率的倒数。在这种状况下,25%的倒数是4,log(4)以2为底得到2。因而,咱们得到了2位有用的信息

CVHub | 一文看尽深度学习中的各种损失函数

假如气象站说第二天是晴天,那么咱们得到0.41比特的有用信息。那么,咱们均匀能从气象站得到多少信息呢?明日是晴天的概率是75%这就给了你0.41比特的信息而明日是雨天的概率是25%这就给了你2比特的信息,这就对应咱们均匀每天从气象站得到0.81比特的信息。

CVHub | 一文看尽深度学习中的各种损失函数

咱们刚刚所核算出来的就叫做熵,它能够很好地描述事情的不确定性。它是由以下公式给出:

CVHub | 一文看尽深度学习中的各种损失函数

它衡量的是你每天了解气候状况时所得到的均匀信息量。一般来说,它给出了给定概率散布p中样本值的均匀信息量它告知咱们概率散布有多不行猜测。假如咱们住在沙漠中央,那里每天都是阳光灿烂的,均匀来说,咱们不会每天从气象站得到很多信息。熵会挨近于零。另一方面,假如气候改变很大,熵就会大得多。

总的来说:一个事情的不确定性就越大,其信息量越大,它的熵值就越高。比方CVHub今日宣布上市。相反,假如一个时间的不确定性越小,其信息量越小,它的熵值就越低。比方CVHub今天又增加了一个粉丝。

Cross Entropy

现在,让咱们讨论一下穿插熵。它仅仅均匀信息长度。考虑相同的比方,8种或许的气候条件,悉数都是等或许的,每一种都能够用3位编码 [2^3=8]。

CVHub | 一文看尽深度学习中的各种损失函数

这儿的均匀信息长度是3,这就是穿插熵。可是现在,假定你住在一个阳光充足的区域,那里的气候概率散布是这样的:

CVHub | 一文看尽深度学习中的各种损失函数

即每天有35%的机会呈现晴天,只要1%的机会呈现雷雨。咱们能够核算这个概率散布的熵,咱们得到2.23比特的熵,详细核算公式如下:

CVHub | 一文看尽深度学习中的各种损失函数

所以,均匀来说,气象站发送了3个比特,但接收者只得到2.23个比特有用的信息。可是,咱们能够做得更好。例如,让咱们像这样更改编码办法:

CVHub | 一文看尽深度学习中的各种损失函数

现在,咱们只运用2位用于表明晴天或部分晴天,运用3位用于多云和大部分多云,运用4位用于表明中雨和小雨,运用5位用于大雨和雷暴。气候的编码办法是清晰的,并且假如你链接多条音讯,则只要一种办法能够解说位的顺序。 例如,01100只能表明部分晴天(01),然后是小雨(100)。 因而,假如咱们核算该站每天发送的均匀比特数,则能够得出,

CVHub | 一文看尽深度学习中的各种损失函数

这是咱们新的改进的穿插熵比之前的3比特(即悉数用3位表明的方法)更好。现在,假定咱们在不同的位置运用相同的编码,那里的气候是倒置的,并且大部分是下雨的。

CVHub | 一文看尽深度学习中的各种损失函数

此刻,假如咱们核算它的穿插熵:

CVHub | 一文看尽深度学习中的各种损失函数

咱们将得到4.58位。大约是熵的两倍。 均匀而言,该站发送4.58位,但只要2.23位对接收者有用。 每条音讯发送的信息量是必要信息的两倍。 这是由于咱们运用的编码对气候散布做出了一些隐含的假定。 例如,当咱们在晴天运用2位音讯时,咱们隐式地猜测晴天的概率为25%。以相同的办法,咱们核算悉数气候状况。

CVHub | 一文看尽深度学习中的各种损失函数

分母中2的幂对应于用于传输音讯的比特数。很明显,猜测散布q和实在散布p有很大不同。现在咱们能够把穿插熵表明成实在概率散布p的函数和猜测概率散布q的函数:

CVHub | 一文看尽深度学习中的各种损失函数

K-L Divergence

即KL散度。关于穿插熵丢失,除了咱们在这儿运用猜测概率的对数(log(q(i)))外,它看起来与上面的方程十分类似。假如咱们的猜测是完美的,那就是猜测散布等于实在散布,此刻穿插熵就等于熵。 可是,假如散布不同,则穿插熵将比熵大一些位数穿插熵超越熵的量称为相对熵,或更普遍地称为库尔贝克-莱布里埃发散度(KL Divergence)。总结如下:

CVHub | 一文看尽深度学习中的各种损失函数

接上面的比方,咱们便能够趁便算出:KL散度 = 穿插熵 – 熵 = 4.58 – 2.23 = 2.35(Bits)

一般来说,一般分类丢失最常用的丢失函数之一就是穿插熵丢失。假定咱们当时做一个3个类别的图画分类使命,如猫、狗、猪。给定一张输入图片其实在类别是猫,模型经过练习用Softmax分类后的输出成果为:{”cat”: 0.3, “dog”: 0.45, “pig”: 0.25},那么此刻穿插熵为:-1 * log(0.3) = 1.203。当输出成果为:{”cat”: 0.5, “dog”: 0.3, “pig”: 0.2}时,穿插熵为:-1 * log(0.5) = 0.301。能够发现,当实在类别的猜测概率挨近于0时,丢失会变得十分大。可是当猜测值挨近实在值时,丢失将挨近0。

Dice Loss

CVHub | 一文看尽深度学习中的各种损失函数

即骰子丢失,出自V-Net [3],是一种用于评估两个样本之间类似性衡量的函数,取值规模为0~1,值越大表明两个值的类似度越高,其基本界说(二分类)如下:

CVHub | 一文看尽深度学习中的各种损失函数

其间,|X∩Y|表明X和Y之间的交集,|X|和|Y|别离表明调集X和Y中像素点的个数,分子乘于2确保域值规模在0~1之间,由于分母相加时会核算多一次堆叠区间,如下图:

CVHub | 一文看尽深度学习中的各种损失函数

从右边公式也能够看出,其实Dice系数是等价于F1分数的,优化Dice等价于优化F1值。此外,为了避免分母项为0,一般咱们会在分子和分母处同时加入一个很小的数作为滑润系数,也称为拉普拉斯滑润项。Dice丢失由以下两个首要特性:

  • 有益于正负样本不均衡的状况,侧重于对远景的发掘;
  • 练习进程中,在有较多小方针的状况下简单呈现振动;
  • 极点状况下会呈现梯度饱满的状况。

所以一般来说,咱们都会结合穿插熵丢失或者其他分类丢失一同进行优化。

Focal Loss

焦点丢失,出自何凯明的《Focal Loss for Dense Object Detection》,出发点是处理方针检测范畴中one-stage算法如YOLO系列算法精确率不高的问题。作者认为样本的类别不均衡(比方远景和布景)是导致这个问题的首要原因。比方在很多输入图片中,咱们运用网格去划分小窗口,大多数的窗口是不包括方针的。如此一来,假如咱们直接运用原始的穿插熵丢失,那么负样本所占份额会十分大,主导梯度的优化方向,即网络会倾向于将远景猜测为布景。即便咱们能够运用OHEM(在线困难样本发掘)算法来处理不均衡的问题,虽然其增加了误分类样本的权重,但也简单忽略掉易分类样本。而Focal loss则是聚集于练习一个困难样本的稀少集,经过直接在规范的穿插熵丢失基础上做改进,引进了两个赏罚因子,来削减易分类样本的权重,使得模型在练习进程中更专注于困难样本。其基本界说如下:

CVHub | 一文看尽深度学习中的各种损失函数

其间:

  • 参数和(1-)别离用于操控正/负样本的份额,其取值规模为[0, 1]。的取值一般可经过穿插验证来挑选适宜的值。
  • 参数称为聚集参数,其取值规模为[0, +∞),意图是经过削减易分类样本的权重,然后使模型在练习时更专注于困难样本。当 = 0 时,Focal Loss就退化为穿插熵丢失, 越大,对易分类样本的赏罚力度就越大。

实验中,作者取(=0.25,=0.2)的作用最好,详细还需求依据使命的状况调整。由此可见,使用Focal-loss也会引进多了两个超参数需求调整,而一般来说很需求经验才干调好。

Tversky loss

Tversky loss,宣布于CVPR 2018上的一篇《Tversky loss function for image segmentation using 3D fully convolutional deep networks》文章,是依据Tversky 等人于1997年宣布的《Features of Similarity》文章 所提出的Tversky指数所改造的。Tversky系数首要用于描述两个特征(调集)之间的类似度,其界说如下:

CVHub | 一文看尽深度学习中的各种损失函数

由上可知,它是结合了Dice系数(F1-score)以及Jaccard系数(IoU)的一种广义方法,如:

  • 当 = = 0.5时,此刻Tversky loss便退化为Dice系数(分子分母同乘于2)
  • 当 = = 1时,此刻Tversky loss便退化为Jaccard系数(交并比)

因而,咱们只需操控 和 便能够操控假阴性假阳性之间的平衡。比方在医学范畴咱们要检测肿瘤时,更多时候咱们是期望Recall值(查全率,也称为灵敏度或召回率)更高,由于咱们不期望说将肿瘤检测为非肿瘤,即假阴性。因而,咱们能够经过增大 的取值,来提高网络对肿瘤检测的灵敏度。其间, + 的取值咱们一般会令其1。

总结

总的来说,丢失函数的方法千变万化,但追查溯源还是万变不离其宗。其本质就是给出一个能较全面合理的描述两个特征或调集之间的类似性衡量或间隔衡量,针对某些特定的状况,如类别不平衡等,给予恰当的赏罚因子进行权重的加减。大多数的丢失都是依据最原始的丢失一步步改进的,或提出更一般的方法,或提出愈加详细实例化的方法。

写在终究

假如您也对人工智能和核算机视觉全栈范畴感兴趣,强烈推荐您重视有料、有趣、有爱的大众号『CVHub』,每日为大家带来精品原创、多范畴、有深度的前沿科技论文解读及工业成熟处理方案!欢迎扫码与我交流,一起讨论更多有趣的话题!