1 交叉熵

信息量:当一个事件发生的概率为

,那么该事件对应的概率的信息量是

信息量的熵:信息量的期望,假设 事件

共有n种可能,发生

的概率为

,那么该事件的熵

为:

相对熵,又称KL散度,如果我们对于同一个随机变量 x 有两个单独的概率分布 P(x) 和 Q(x),我们可以使用 KL 散度(Kullback-Leibler (KL) divergence)来衡量这两个分布的差异。KL散度是用来度量使用基于Q的编码来编码来自P的样本平均所需的额外的位元数。 在机器学习中,P往往用来表示样本的真实分布,Q用来表示模型所预测的分布,那么KL散度就可以计算两个分布的差异,也就是Loss损失值。

从KL散度公式中可以看到Q的分布越接近P(Q分布越拟合P),那么散度值越小,即损失值越小。

因为对数函数是凸函数,所以KL散度的值为非负数。有时会将KL散度称为KL距离,但它并不满足距离的性质:KL散度不是对称的;

KL散度不满足三角不等式。

我们将KL散度公式进行变形:

等式的前一部分恰巧就是p的熵,等式的后一部分,就是交叉熵:

在机器学习中,我们需要评估label和predicts之间的差距,使用KL散度刚刚好,即

,由于KL散度中的前一部分−H(y)不变,故在优化过程中,只需要关注交叉熵就可以了。所以一般在机器学习中直接用用交叉熵做loss,评估模型。

2 为解决样本不平衡的改进

Ohem Cross Entropy Loss

Ohem:Online Hard Example Mining,选择一些hard example作为训练的样本从而改善网络参数效果,hard example指的是有多样性和高损失的样本

Focal Loss

对于二分类的交叉熵损失如下:

一个解决类别不均衡的方法是对类别+1引入权重参数

,则类别-1的权重为

是可以被设置类频数的倒数,或者通过交叉验证设置。以

为平衡参数的交叉熵损失如下:

在训练过程中,容易分类的负样本将占据损失的主要部分,影响梯度的回传。然而

平衡了正样本和负样本的重要性,但是无法区分容易区分的样本和不容易区分的样本。Focal loss则动态调整损失函数,以降低容易区分样本的权重并聚焦不易区分的样本,Focal loss的交叉熵损失定义如下:

为平衡参数的Focal loss的变种如下:

3 Dice Loss

Dice系数,是一种集合相似度度量函数,通常用于计算两个样本的相似度(范围为[0, 1])。

在语义分割中,X是Ground Truth分割图像 ,Y是预测的分割图像。

Dice系数差异函数(Dice loss):

Dice系数是分割效果的一个评判指标,其公式相当于预测结果区域和ground truth区域的交并比,所以它是把一个类别的所有像素作为一个整体去计算Loss的。因为Dice Loss直接把分割效果评估指标作为Loss去监督网络,而且计算交并比时还忽略了大量背景像素,解决了正负样本不均衡的问题,所以收敛速度很快。

Dice Loss和交叉熵函数的比较:

交叉熵损失函数中交叉熵值梯度计算形式类似于

,其中,

输出,

而关于 dice-coefficient 的可微形式,loss 值为

,其关于 p 的梯度形式是比较复杂的:

。极端场景下,当 p 和 t 的值都非常小时,计算得到的梯度值可能会非常大. 通常情况下,可能导致训练更加不稳定。

直接采用 dice-coefficient 或者 IoU 作为损失函数的原因,是因为分割的真实目标就是最大化 dice-coefficient 和 IoU 度量。而交叉熵仅是一种代理形式,利用其在 BP 中易于最大化优化的特点。

另外,Dice-coefficient 对于类别不均衡问题,效果可能更优。然而,类别不均衡往往可以通过简单的对于每一个类别赋予不同的 loss 因子,以使得网络能够针对性的处理某个类别出现比较频繁的情况。因此,对于 Dice-coefficient 是否真的适用于类别不均衡场景,还有待探讨。

4 Lovasz Loss

dice系数 交叉熵_语义分割中的损失函数相关推荐

  1. dice系数 交叉熵_一文搞懂交叉熵损失

    本文从信息论和最大似然估计得角度推导交叉熵作为分类损失函数的依据. 从熵来看交叉熵损失 信息量 信息量来衡量一个事件的不确定性,一个事件发生的概率越大,不确定性越小,则其携带的信息量就越小. 设\(X ...

  2. dice系数 交叉熵_ACL2020 | 香侬科技提出用Dice Loss缓解数据集数据不平衡问题

    论文标题: Dice Loss for Data-imbalanced NLP Tasks 论文作者: Xiaofei Sun*, Xiaoya Li*, Yuxian Meng, Junjun Li ...

  3. randn函数加噪声_语义分割中常用的损失函数1(基础篇)

    一.L1.L2 loss (分割中不常用,主要用于回归问题) L1 Loss L1 Loss 主要用来计算 input x 和 target y 的逐元素间差值的平均绝对值. pytorch表示为: ...

  4. 来自CCNet的一种创新:语义分割中的十字交叉视觉注意力

    来自CCNet的一种创新:语义分割中的十字交叉视觉注意力 写在文章开头 看个大概 引入 CCNet之道 整体架构 十字交叉注意力 循环--RCCA 优化类别一致性损失 CCNet效果一览 写在文章末尾 ...

  5. 【损失函数合集】超详细的语义分割中的Loss大盘点

    前言 前两天介绍了一下Contrastive Loss,Triplet Loss以及Center Loss.今天正好是周六,时间充分一点我就来大概盘点一下语义分割的常见Loss,希望能为大家训练语义分 ...

  6. 语义分割中的一些模型的分类汇总

    语义分割是深度学习中的一个重要应用领域.自Unet提出到现在已经过去了8年,期间有很多创新式的语义分割模型.简单的总结了Unet++.Unet3+.HRNet.LinkNet.PSPNet.DeepL ...

  7. 语义分割-Unsupervised Domain Adaptation in Semantic Segmentation:a Review语义分割中的无监督领域自适应:综述

    Unsupervised Domain Adaptation in Semantic Segmentation:a Review语义分割中的无监督领域自适应:综述 0.摘要 1.介绍 1.1.语义分割 ...

  8. gcn语义分割_语义分割该如何走下去?

    来自 | 知乎    编辑 | 深度学习这件小事链接 | https://www.zhihu.com/question/390783647本文仅供交流,如有侵权,请联系删除   问题语义分割该如何走下 ...

  9. 图像语义分割中的上采样(Upsampling)和下采样(subsampling)

    图像语义分割中的上采样和下采样 1. 下采样(subsampled) 2. 上采样(upsampled) 2.1 线性插值 2.2 单线性插值 2.3 双线性插值 2.4 双线性插值举例 2.5 插值 ...

最新文章

  1. R使用深度学习LSTM构建时间序列预测模型
  2. 企业网络推广中用户行为到底能为企业网络推广带来多少影响?
  3. pythonurllib模块-Python urllib模块 网络资源访问安装下载
  4. oracle backup arch,一个数据库备份的例子
  5. Java集合Collection之实现原理解读(LinkedList)
  6. arduino 智能车组装步骤_Arduino智能小车硬件安装说明
  7. 以四小龙为首的CV企业占比七成,安防AI化已成产业趋势
  8. extjs 渲染之前的方法_extjs重新渲染组件
  9. openpyxl自动设置列宽
  10. XLSReadWriteII 读取EXCEL数据 动态响应字段的列编号
  11. 高并发解决方案——提升高并发量服务器性能解决思路
  12. C编译错误,运行错误以及常见问题。
  13. java读取Excel里面的内容包括(xls和xlsx)后缀文件
  14. 图片怎么格式转换成jpg?介绍几种思路
  15. ffmpeg命令详细说明
  16. Vivado® ML Editions 2022.2 最新更新(附下载链接)
  17. 【计算机·科技】互联网的黑科技来啦
  18. Gradient Accumulation 梯度累加 (Pytorch)
  19. 大数据技术Hadoop入门理论系列之一----hadoop生态圈介绍
  20. 好的口碑怎么打造?环环相扣的每一步让实在RPA来提效

热门文章

  1. 关于react diff 算法(译文)
  2. 批量导入数据到hive表中:假设我有60张主子表如何批量创建导入数据
  3. 阅读《Android 从入门到精通》(29)——四大布局
  4. 尹中立:“人造牛市”的结局可能会非常悲惨
  5. 解决Mysql复制Relay log read failure 的问题
  6. Oracle数据库进程
  7. AlertDialog显示错误 Unable to add window token null is not for an application
  8. 在Windows平台下使用安装GCC
  9. 使用PsPing测试Azure虚拟机的连通性
  10. Java基础--二维数组