神经网络之loss总结学习

         影响一个网络性能的因素很多,网络结构,参数优化,loss约束等,这里就常见的几种loss进行比较总结。其中(1)(2)(3)为回归损失,(4)(5)(6)为分类损失。


(1)MSE(均方误差)

均方误差(MSE)是回归损失函数中最常用的误差,也常被称为L2 loss,它是预测值与目标值之间差值的平方和,其公式如下所示:

å¨è¿éæå¥å¾çæè¿°,有时也写成这样å¨è¿éæå¥å¾çæè¿°

优点:各点都连续光滑,方便求导,具有较为稳定的解

缺点:不是特别的稳健,因为当函数的输入值距离中心值较远的时候,使用梯度下降法求解的时候梯度很大,可能导致梯度爆炸

(2)平均绝对误差

平均绝对误差(MAE)是另一种常用的回归损失函数,也常被称为L1 loss,它是目标值与预测值之差绝对值的和,表示了预测值的平均误差幅度,而不需要考虑误差的方向,范围是0到∞,其公式如下所示:

å¨è¿éæå¥å¾çæè¿°  , 有时也写成这样  å¨è¿éæå¥å¾çæè¿°

优点:无论对于什么样的输入值,都有着稳定的梯度,不会导致梯度爆炸问题,具有较为稳健性的解。
缺点:在中心点是折点,不能求导,不方便求解。

(3)smooth L1 loss

smooth L1说的是光滑之后的L1,前面说过了L1损失的缺点就是有折点,不光滑,导致不稳定,那如何让其变得光滑呢?smooth L1损失函数为:

smooth l1 loss对于离群点更加鲁棒,根据fast rcnn的说法,"...... L1 loss that is less sensitive to outliers than the L2 loss used in R-CNN and SPPnet." 也就是smooth L1 loss让loss对于离群点更加鲁棒,相比于L2损失函数,其对离群点、异常值(outlier)不敏感,梯度变化相对更小,训练时不容易跑飞。


补:在机器学习中,正规化是防止过拟合的一种重要技巧。从数学上讲,它会增加一个正则项,防止系数拟合得过好以至于过拟合。L1与L2的区别只在于,L2是权重的平方和,而L1就是权重的和。

L1正则化表达式:lasso regression

L2正则化表达式:ridge regression

下面是L1正则化和L2正则化的作用,

  • L1正则化可以产生稀疏权值矩阵,即产生一个稀疏模型,可以用于特征选择
  • L2正则化可以防止模型过拟合(overfitting);一定程度上,L1也可以防止过拟合
L2正则化 L1正则化
计算效率高(因为有解析解) 在非稀疏情形下计算效率低
非稀疏输出 稀疏输出
无特征选择 内置特征选择

(4)逻辑回归

逻辑回归一般用在二分类问题上,有时也被称为二值交叉熵,其算法表达式为

其中 y∈{0,1} 是真实标签,ŷ 是预测值。当然,对于二分类我们几乎都是用 sigmoid 函数激活 ŷ =σ(x),1- ŷ =σ(-x)。

(5)交叉熵、center loss

至于多分类损失,一般选用交叉熵,其算法公式如下,  ,其中q(x)表示的是x样本出现的概率,一般经过Softmax回归处理之后的得到: 

这样就把神经网络的输出也变成了一个概率分布,从而可以通过交叉熵来计算预测的概率分布和真实答案的概率分布之间的距离了。在分类任务时,仅仅使用softmax作为监督信号的输出处理只能做到seperable而不是discriminative,这时就有大佬在softmax的基础上弄了center loss,目的就是为了使得学习的特征类内距离更小。(有点像后面的metric learning loss增加类间距离,减少类内距离)。具体的计算方式如下,参考链接https://blog.csdn.net/Lucifer_zzq/article/details/81236174

è¿éåå¾çæè¿°

λ用于平衡softmax loss与center loss,越大则区分度越大。m是mini-batch、n是class。在Lc公式中有一个缺陷,就是Cyi是i这个样本对应的类别yi所属于的类中心C∈ Rd,d代表d维。理想情况下,Cyi需要随着学到的feature变化而实时更新,也就是要在每一次迭代中用整个数据集的feature来算每个类的中心。但这显然不现实,做以下两个修改:

1、由整个训练集更新center改为mini-batch更改center

2、避免错误分类的样本的干扰,使用scalar α 来控制center的学习率

因此求算梯度的公式如下:

具体算法流程


补:交叉熵这个概念来自信息学,用来描述两个事物之间的相似程度,具体了解可参考https://zhuanlan.zhihu.com/p/74075915

下面补充几个简单的概念,

熵:是表示随机变量不确定的度量,计算公式为H(x)=-\sum_{x}^{n} P(x)log(P(x))

 以下几个都是用来衡量概率分布之间差异性的指标,

KL散度:

JS散度:

交叉熵:

推土机距离(Wasserstein距离):

 

 

Wasserstein距离相比KL散度、JS散度的优越性在于,即便两个分布没有重叠,Wasserstein距离仍然能够反映它们的远近,在WGAN中应用比较广。


(6)focal loss

Focal Loss的引入主要是为了解决难易样本数量不平衡(注意,有区别于正负样本数量不平衡)的问题,使用的范围非常广泛。

单阶段的目标检测器通常会产生高达100k的候选目标,只有极少数是正样本,正负样本数量非常不平衡。我们在计算分类的时候常用的损失——交叉熵的公式如下:

为了解决正负样本不平衡的问题,我们通常会在交叉熵损失的前面加上一个参数 \alpha ,即:

尽管 \alpha 平衡了正负样本,但对难易样本的不平衡没有任何帮助。而实际上,目标检测中大量的候选目标都是像下图一样的易分样本。何凯明大神认为易分样本(即,置信度高的样本)对模型的提升效果非常小,模型应该主要关注与那些难分样本这个假设是有问题的,是GHM的主要改进对象),于是结合上面的思想得到focal loss,

实验表明\gamma 取2, \alpha取0.25的时候效果最佳。

补:

GHM是基于focal loss进行改进的,由于focal loss使模型过多关注那些特别难分的样本,当样本中有离群点(outliers),可能模型已经收敛了但是这些离群点还是会被判断错误,其次\gamma 和\alpha的取值会相互影响,需要联合起来一起实验才行。

Focal Loss是从置信度p的角度入手衰减loss,而GHM是一定范围置信度p的样本数量的角度衰减loss。在GHM中先定义了一个梯度模长g

同时定义了一个变量来衡量出一定梯度范围内的样本数量,即梯度密度 GD(g)

于是用于分类的GHM损失:

用于回归的GHM损失:


补充:

GIOU Loss(论文原文:https://arxiv.org/abs/1902.09630)

这是2019年CVPR论文《Generalized Intersection over Union: A Metric and A Loss for Bounding Box Regression》所提出,针对目前Anchor-Based的目标检测算法,如yolo,SSD,faster rcnn等,其的定位Loss普遍采用bbox和ground truth bbox的L1范数,L2范数来计算,但是在评测的时候却使用IOU(交并比)去判断是否检测到目标。显然这两者并不是完全等价的,而且直接将IOU作为Loss来优化任务,但这存在两个问题:

  • 预测框bbox和ground truth bbox如果没有重叠,IOU就始终为0并且无法优化。也就是说损失函数失去了可导的性质。

  • IOU无法分辨不同方式的对齐。

GIOU指的是假设现在有两个任意的bbox A和B,我们要找到一个最小的封闭形状C,让C可以将A和B包围在里面,然后我们计算C中没有覆盖A和B的面积占C总面积的比例,然后用A和B的IOU值减去这个比值,具体过程用下面的算法1来表示:

GIoU相比于IoU有如下性质:

  • 和IoU类似,GIoU也可以作为一个距离,然后损失可以用下面的公式来计算: L_{GIOU}=1-GIOU

  • 和原始的IoU类似,GIoU对物体的尺度大小不敏感(因为比值的原因),并且GIoU<=Iou。

  • 由于GIoU引入了包含A,B两个框的C,所以当A,B不重合时也同样可以计算。

整个算法的流程如下:

DIOU Loss(论文原文:https://arxiv.org/pdf/1911.08287.pdf

最新的AAAI 2020的论文《Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression》提出了DIOU Loss,相对于IOU loss与Giou loss,IoU Loss可以表示为:,从IoU的角度来解决回归损失,但它的缺点是当两个框不想交时,IOU-Loss始终为1,无法给出优化方向。因此GIoU来了,GIoU可以用下面的公式表示: ,可以看到GIoU在IoU的基础上添加了一项,其中表示包含两个框的最小矩形,这样就可以优化两个框不相交的情况。但GIoU仍然存在一个问题是,当两个框相交时,GIoU损失退化为了IoU损失。导致在预测框bbox和ground truth bbox包含的时候优化变得非常困难,特别是在水平和垂直方向收敛难。这里一个猜想是在水平和垂直方向,值的增长没有在其他方向快,因此对这两个方向的惩罚力度不够,导致放慢了收敛速度。

Diou具体计算公式如下:

DIoU Loss的优点如下:

  • 和GIoU Loss类似,DIoU Loss在和目标框不重叠时,仍然可以为边界框提供移动方向。

  • DIoU Loss可以直接最小化两个目标框的距离,因此比GIoU Loss收敛快得多。

  • 对于包含两个框在水平方向和垂直方向上这种情况,DIoU Loss可以使回归Loss 下降非常快,而GIoU Loss几乎退化为IoU Loss。

同时为了使目标框有重叠甚至有包含关系时更准确更快收敛,论文还提出了ciou loss。一个好的目标框回归损失应该考虑三个重要的几何因素:重叠面积,中心点距离,长宽比。GIoU为了归一化座标尺度,利用IOU并初步解决了IoU为0无法优化的问题。然后DIoU损失在GIoU Loss的基础上考虑了边界框的重叠面积和中心点距离。所以还有最后一个点上面的Loss没有考虑到,即Anchor的长宽比和目标框之间的长宽比的一致性。基于这一点,论文提出了CIoU Loss。

从上面的损失可以看到,CIoU比DIoU多了\alpha\upsilon这两个参数。其中\alpha是用来平衡比例的系数,\upsilon是用来衡量Anchor框和目标框之间的比例一致性。它们的公式如下:

                

具体的可参考大神的公众号https://mp.weixin.qq.com/s/u41W31IEg5xuX9jtRyVGmQ


参考链接:

https://zhuanlan.zhihu.com/p/80594704(5分钟理解Focal Loss与GHM——解决样本不平衡利器)

https://blog.csdn.net/weixin_41940752/article/details/93159710(L1、L2、smooth L1三类损失函数)

https://blog.csdn.net/qq_14845119/article/details/80787753(损失函数loss大大总结)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章