Dice Loss
Dice系数是一种集合相似度度量函数,取值范围在[0,1]: s = 2 ∣ X ∩ Y ∣ ∣ X ∣ + ∣ Y ∣ s=\frac{2|X\cap Y|}{|X|+|Y|} s=∣X∣+∣Y∣2∣X∩Y∣其中, ∣ X ∩ Y ∣ |X\cap Y| ∣X∩Y∣是 X X X和 Y Y Y之间的交集元素个数, ∣ X ∣ , ∣ Y ∣ |X|,|Y| ∣X∣,∣Y∣分别是 X X X和 Y Y Y的元素个数。
Dice Loss为:
L
d
i
c
e
=
1
−
2
∣
X
∩
Y
∣
+
1
∣
X
∣
+
∣
Y
∣
+
1
L_{dice}=1-\frac{2|X\cap Y|+1}{|X|+|Y|+1}
Ldice=1−∣X∣+∣Y∣+12∣X∩Y∣+1Dice Loss常用于语义分割,我们将
∣
X
∩
Y
∣
|X\cap Y|
∣X∩Y∣近似为预测tensor与GT tensor的element-wise乘积,再将乘积后的矩阵求和(令
X
X
X是pred,
Y
Y
Y是GT):
逐个元素求和:
对于
∣
X
∣
|X|
∣X∣和
∣
Y
∣
|Y|
∣Y∣的计算,直接对pred和GT tensor求和得到。
dice loss 比较适用于样本极度不均的情况,一般的情况下,使用 dice loss 会对反向传播造成不利的影响,容易使训练变得不稳定。因为CE的梯度形式是加法,而Dice Loss的梯度形式是乘法,这导致梯度会很小或者很大,训练过程难以收敛。
balanced cross entropy
基于样本非平衡造成的损失函数倾斜,一个直观的做法就是在损失函数中添加权重因子,提高少数类别在损失函数中的权重,平衡损失函数的分布。权重的大小根据正负样本的比例进行设置。
比如对于二分类问题,BCE为: L = − y l o g ( p ^ ) − ( 1 − y ) l o g ( 1 − p ^ ) L=-ylog(\widehat{p})-(1-y)log(1-\widehat{p}) L=−ylog(p )−(1−y)log(1−p )其中, p ^ \widehat{p} p 为预测是正样本的概率, y y y为label(0负样本或1正样本)
当考虑正负样本比例后,BCE为: L = − α l o g ( p ^ ) − ( 1 − α ) l o g ( 1 − p ^ ) L=-\alpha log(\widehat{p})-(1-\alpha)log(1-\widehat{p}) L=−αlog(p )−(1−α)log(1−p )其中, α 1 − α = n m \frac{\alpha}{1-\alpha}=\frac{n}{m} 1−αα=mn, m m m为正样本数, n n n为负样本数。
Focal Loss
本质上,focal loss是针对样本难分类问题而设计的,focal loss的具体形式为:
将二分类拓展到多分类任务,我们令
p
t
p_{t}
pt为样本真实类别上对应的预测概率,由于目前只有两类,并且前面规定类别1对应概率
p
^
\widehat{p}
p
,所以我们写成:
则focal loss表示为:
L
f
l
=
−
(
1
−
p
t
)
γ
l
o
g
(
p
t
)
L_{fl}=-(1-p_{t})^{\gamma}log(p_{t})
Lfl=−(1−pt)γlog(pt)同理可将CE表示为:
L
c
e
=
−
l
o
g
(
p
t
)
L_{ce}=-log(p_{t})
Lce=−log(pt)在focal loss中,
γ
>
0
\gamma>0
γ>0为可调节因子,对于分类准确的样本,
p
t
p_{t}
pt接近1,则
(
1
−
p
t
)
γ
(1-p_{t})^{\gamma}
(1−pt)γ接近0,对于分类不准确的样本,
p
t
p_{t}
pt接近0,则
(
1
−
p
t
)
γ
(1-p_{t})^{\gamma}
(1−pt)γ接近1。
即相比交叉熵损失,focal loss对于分类不准确的样本,损失没有改变,对于分类准确的样本,损失会变小。 整体而言,相当于增加了分类不准确样本在损失函数中的权重。换言之,focal loss有助于提高难分类样本的分类性能。
样本不平衡问题是样本难分类问题的一个体现,balanced cross entropy是一种hard的方式,而Focal loss是随训练过程动态决定样本分类难易程度的方式。