语义分割中常用的两种损失函数

cross-entropy 交叉熵

信息量

信息量个人理解是指验证信息发生所需要的信息多少,所以一个事件发生的概率越大,它的信息量越小。例如以下事件:

  • A : 明早太阳东边升起

  • B : 明早太阳西边升起

    我们可以知道事件B直观上给我们的信息量很爆炸,我们验证B发生需要的知识,条件比较多。对于一个小概率事件,它的发生往往给人带来爆炸的信息,我们称它的信息量大。记作:
    在这里插入图片描述

熵的概念

熵是指信息量的期望,它反映的是信息量的平均取值大小。熵可以看作是按照真实分布p来衡量识别一个样本的所需要的编码长度的期望。记作:

相对熵(KL散度)

相对熵衡量的是两个分布的相似情况,为什么能衡量呢,因为它可以由极大似然估计推导出来的一个指标。例如有一个分布p(x),q(x),我们想要分析这两个分布的差异,我们可以采取下面这个公式:
语义分割中常用的两种损失函数_第1张图片
其中当p分布和q分布越接近时,D趋近于0。
关于KL散度,我们如果拆开来看:
在这里插入图片描述
第一部分是用真实分布p来识别样本所需要的平均编码长度的相反数
第二部分是用q分布来识别样本所需要的平均编码长度的相反数
二者做差可以衡量二者的差异

在机器学习中,我们用p表示真实的分布,例如热编码(1,0,0)表示是第一类别,我们的预测分布q中有相应的预测(0.5,0.3,0.2)也是属于第一类别,但是我们可以看出,虽然可以表示但是用q描述p,还是有很大的差异,需要一些额外的信息来修正q,这时的KL散度是大于0的,当q完美拟合于p的时候,Kl散度等于0。通过KL散度我们可以将随机事件或其有关随机变量的取值映射为非负实数以表示该随机事件的“风险”或“损失”,因此KL散度是可以作为损失函数的。

交叉熵 cross-entropy

上面我们说到KL散度是适合做损失函数的,为什么还要提出交叉熵呢?我们可以将KL散度的公式拆开来看:
在这里插入图片描述
很明显第一部分是我们真实分布信息的熵,当给定的训练集确定之后,这个值便是固定的了,对于我们的样本只能有一个真实的信息熵。对于分类问题,前部分的值是为0的。因此我们可以采取后半部分作为衡量标准,称为交叉熵。

交叉熵的一些问题(个人意见)

在实际应用中,是逐像素的交叉熵损失。该损失函数会分别检查每个像素,与热编码向量进行比较。由此可见,交叉熵的损失函数是评估每个像素矢量的类预测,然后对所有像素求平均值,所以我们可以认为像素是被平等的学习了。因此对类别不均衡的问题,往往效果比较差。只专注于特定的较大区域的目标提取。

Dice coefficient

从混淆矩阵说起

Dice系数作为损失函数的原因和混淆矩阵有着很大的关系,下图给出的是一个混淆矩阵:
语义分割中常用的两种损失函数_第2张图片
其中的一些关键指标如下:
语义分割中常用的两种损失函数_第3张图片
精确率表示的是预测为正且真实为正的占预测为正的比例
召回率表示的是预测为正且真实为正的占样本为正的比例
在医学图象分割的时候我们希望这两个越大越好。
由此我们引入F1score:
在这里插入图片描述
显然,F1score的值是越大越好的,并且符合损失函数的定义,我们可以把它作为损失函数来使用。但是我们经常使用的损失函数是越小越好的,我们往往使用1-F1score来作为损失函数。

Dice coefficient 的实现

这个损失函数是如何实现的呢,它与交叉熵损失函数不同,他是借助矩阵来实现的。上面的是真实图象与预测图象的交集,可以用卷积实现,下面的其实是个并集,可以求和来实现。
在这里插入图片描述

Dice coefficient 的一些个人看法

从损失函数来看,它关注点在于标签部分和预测部分的重合情况,而cross-entropy关注的是整体像素的一个拟合情况。这就使得Dice coefficient在标签不均的情况下表现的也很好。但是依然是对噪声比较敏感,忽略边界信息,造成边界分割不好的通病。

你可能感兴趣的:(机器学习)