Focal Loss
在二分类问题中,交叉熵损失定义如下:
y
y
y 表示真实值,取值0与1,
p
p
p表示模型预测正类的概率,取值0到1。
为了表述方便,将上述公式重新表述为:
对于类别不平衡问题,我们可以为每个类别加不同的权重,使得每个类别对总损失的贡献程度有差异,如下所示,
α
t
\alpha_t
αt 表示每个类的权重值,一般可取值“类样本数的逆频数”。
与类加权的思想非常相似,Focal Loss 在交叉熵损失的基础之上,添加了一个权重调节项
(
1
−
p
)
γ
(1 - p )^\gamma
(1−p)γ。如下所示:
直观上理解,当超参数
γ
>
0
\gamma > 0
γ>0 时,易分类的样本概率值较大,则给与一个相对较低的权重;而难样本预测概率值较低,则给与一个较大的权重。因此 Focal Loss 本质是促使模型向“难样本学习”。
最终原论文采用了“结合类别加权,与难易样本调节”两种加权策略,损失函数如下:
特定数据集上,实验结果表明
γ
=
2
\gamma = 2
γ=2 ,
α
=
0.25
\alpha = 0.25
α=0.25, 通常情况下, 这两个超参数需要一起调整。
GHM Loss
还是从二分类交叉熵损失开始,损失函数定义如下:
p
∗
p^*
p∗ 表示真实值,取值0或者1,
p
p
p为模型预测的概率,取值0至1。
x
x
x 为模型的输出(未经过sigmoid激活函数),则损失对
x
x
x 的梯度为:
定义新变量
g
g
g,
g
g
g为 损失函数对
x
x
x 的梯度的一阶模长, 其含义表示该样本的难易程度:
论文给出了一个训练好的模型,对样本梯度模长,也就是
g
g
g 变量取值,的分布如下:
可以看出,易分类的样本占了绝大多数,并贡献了大部分的损失。在此情况下,虽然模型已收敛,但依然难以处理那些难样本(
g
g
g 取值0.8-1之间),这部分难样本的数量甚至比中等难度的样本数量还多,如果强行迫使模型学习这些非常难的样本(可以当做outlier——异常点),会使整个模型的效果降低。作者将上述这种分布称为“梯度模长不协调分布(disharmony gradient norm distribution)”—— 易学习样本非常多,难样本比中等难度的样本数量还多。
为解决“梯度模长不协调分布“问题,作者的思想是,促使模型多学习那些中等难度的样本,降低异常点,以及易学习样本对总损失的贡献。引入了梯度密度函数的概念:
∑
n
=
1
N
σ
ε
(
g
k
,
g
)
\sum_{n=1}^N\sigma_{\varepsilon}(g_k, g)
∑n=1Nσε(gk,g) 表示的是以变量
g
g
g 为中心,
ε
\varepsilon
ε 为范围, 如果第
k
k
k 个样本的梯度模长在此范围内,则统计量加1,否则不加。
l
ε
(
g
)
l_{\varepsilon}(g)
lε(g) 表示有效的长度, 两者相除表示单位密度。
最后定义新变量“梯度密度调和参数(gradient density harmonizing parameter)”:
将分子移到分母项,
G
D
(
g
i
)
/
N
GD(g_i)/N
GD(gi)/N 表示某部分样本占总样本的比例。如果
g
g
g是均匀分布, 则
G
D
(
g
i
)
=
N
GD(g_i)=N
GD(gi)=N, 从而
β
i
=
1
\beta_i=1
βi=1。 如果非均匀分布, 则密度较大的样本类将会赋予较低的权重,而密度较小的样本类将过得较高的权重。
由于
β
i
\beta_i
βi 是针对每一样本,那么可以将
β
i
\beta_i
βi作为权重系数,调节每一样本对总损失的贡献:
比较GHM Loss 与 Focal Loss, 可以发现两者调节损失的方式的很相似,都是“以加权形式调节单一样本对总损失的贡献”,只是GHM 机制比较不好理解。
Dice Loss
Dice Loss 来源于 Dice Coefficient(DSC),DSC 系数用于评估两个集合的相似度,取值0至1, 值越大表示越相似:
A
A
A 表示模型预测为正类的样本集合,
B
B
B 表示真实标签为正类的样本集合,根据定义,DSC 与 F1 值是相同的, 因此 Dice Loss 是直接优化F1。
TP、FP、FN 是离散值,上述DSC系数是基于离散值的。对于一个样本,可以定义连续形式(soft form)的 DSC 如下:
y
i
1
y_{i1}
yi1 表示第
i
i
i 个样本为正类的标签值,
p
i
1
p_{i1}
pi1 为模型对第
i
i
i 个样本为正类的预测概率。直观来看,如果第
i
i
i 个样本为正类, 则预测概率越高,DSC值就越高。当第
i
i
i 个样本为负类时,分子为零,为了保留负类的 DSC 系数值,添加平滑项
γ
\gamma
γ 进行处理:
DSC值越大,表示单个样本预测的越准确,转换为损失如下(分母中项可以取平方,取平方有利于模型更快收敛):
D
S
C
(
x
i
)
=
1
−
2
∗
p
i
1
∗
y
i
1
+
γ
p
i
1
+
y
i
1
+
γ
DSC(x_i) =1 - \frac{2 * p_{i1} * y_{i1} + \gamma}{p_{i1} + y_{i1} + \gamma}
DSC(xi)=1−pi1+yi1+γ2∗pi1∗yi1+γ
另外为了加强处理难样本的能力,DL也可以借助Focal Loss 中的思想,转换为如下形式:
D
S
C
(
x
i
)
=
2
∗
(
1
−
p
i
1
)
α
∗
p
i
1
∗
y
i
1
+
γ
(
1
−
p
i
1
)
α
∗
p
i
1
+
y
i
1
+
γ
DSC(x_i) = \frac{2 * (1 - p_{i1})^\alpha * p_{i1} * y_{i1} + \gamma}{(1 - p_{i1})^\alpha * p_{i1} + y_{i1} + \gamma}
DSC(xi)=(1−pi1)α∗pi1+yi1+γ2∗(1−pi1)α∗pi1∗yi1+γ
参考资料
1.《Focal Loss for Dense Object Detection》
2.《Gradient Harmonized Single-stage Detector》
3. 《Dice Loss for Data-imbalanced NLP Tasks》
4. NLP类别不均衡问题之loss大集合