交叉熵损失函数的进化路程

一.交叉熵损失函数(CrossEntropy Loss)

1. 公式与性质

 

交叉熵代价函数同样有两个性质:

  • 非负性:目标就是最小化代价函数
  • 克服方差代价函数更新权重过慢的问题

导数中没有σ′(z)这一项,权重的更新是受σ(z)−y这一项影响,即受误差的影响。所以当误差大的时候,权重更新就快,当误差小的时候,权重的更新就慢

2.交叉熵代价函数是如何产生的?

       以偏置b的梯度计算为例,推导出交叉熵代价函数:

交叉熵损失函数的进化路程_第1张图片

 

b的梯度公式为:

为了消掉该公式中的

我们想找到一个代价函数使得:

对两侧求积分,可得:

 3. 缺点

在分类过程中,若某类目标的样本相比其他类在数量上占据极大优势,则可以将该数据集视为不平衡的数据集。单纯的使用交叉熵训练数据将导致两个问题:

  • 训练效率低下,因为大多数样本都是简单的目标,这些样本在训练中提供给模型不太有用的信息;
  • 简单的样本数量上的极大优势会搞垮训练,使模型性能退化。

这种问题在目标检测中更为明显,尤其是base anchor的目标检测框架,由于背景的目标远远大于前景,导致模型在分类目标框的过程中极易过拟合。RetinaNet 提出了Focal loss 损失函数,在交叉熵损失函数上进行改进,有效解决了正负样本不平衡问题。

二.Focal Loss

首先在原有的基础上加了一个因子,其中gamma>0使得减少易分类样本的损失。使得更关注于困难的、错分的样本。例如gamma为2,对于正类样本而言,预测结果为0.95肯定是简单样本,所以(1-0.95)的gamma次方就会很小,这时损失函数值就变得更小。而预测概率为0.3的样本其损失相对很大。对于负类样本而言同样,预测0.1的结果应当远比预测0.7的样本损失值要小得多。对于预测概率为0.5时,损失只减少为原来的一半,所以更加关注于这种难以区分的样本。这样减少了简单样本的影响,大量预测概率很小的样本叠加起来后的效应才可能比较有效。此外,加入平衡因子alpha,用来平衡正负样本本身的比例不均:文中alpha取0.25,即正样本要比负样本占比小,这是因为负例易分。

三. Generalized Focal Loss

主要针对单阶段目标检测模型进行设计,其实主要是针对FCOS和ATSS的loss进行改进。它们基本包含了3个表示:1.分类表示2.检测框表示3. 检测框的质量估计(centerness/IoU)

1.解决的问题

  • classification score 和 IoU/centerness score 差异

在做NMS得分排序的时候,将分类得分和质量预测得分相乘用于排序,而分类和质量估计的计算是分开进行的,当两个分支的得分差异较大时,最后的得分的结果可能会扰乱正常NMS的进行。比如说一个正样本得分较高,但是它的质量估计确很低,相乘后极有可能变成一个低的分的正样本,从而在NMS的过程中被删去。

 解决办法:依然保留分类的向量,但是对应类别位置的置信度的物理含义不再是分类的score,而是改为质量预测的score

bbox regression 采用的表示不够灵活

在复杂场景中,边界框的表示具有很强的不确定性,现有的框回归本质都是建模了非常单一的狄拉克分布,非常不flexible。文章用一种general的分布去建模边界框的表示。

2. 损失函数公式

2.1 Quality Focal Loss

Focal Loss的label是0和1,这里的分类质量是0-1,所以这里进行扩展

其中y为0~1的质量标签,sigma为预测。注意QFL的全局最小解即是sigma = y。这样交叉熵部分变为完整的交叉熵,同时调节因子变为距离绝对值的幂次函数。和Focal Loss类似,我们实验中发现一般取beta = 2为最优。

2.2 Distribution Focal Loss

对于任意分布来建模框的表示,它可以用积分形式嵌入到任意已有的和框回归相关的损失函数上,果分布过于任意,网络学习的效率可能会不高,原因是一个积分目标可能对应了无穷多种分布模式。考虑到真实的分布通常不会距离标注的位置太远,所以我们又额外加了个loss,希望网络能够快速地聚焦到标注位置附近的数值,使得他们概率尽可能大。

2.3 Generalized Focal Loss

结合上面的两个损失函数得到Generalized Focal Loss:

感谢:https://zhuanlan.zhihu.com/p/147691786

你可能感兴趣的:(损失函数,计算机视觉,算法,深度学习,算法,人工智能)