Focal Loss
Focal Loss
Kullback-Leibler Divergence(相对熵)
KL散度(Kullback-Leibler Divergence
,也称相对熵)用来衡量两个分布之间的偏差,其可以用下面数学公式描述:
D
K
L
(
p
(
x
)
,
q
(
x
)
)
=
∑
i
N
p
i
(
x
)
l
o
g
(
p
i
(
x
)
q
i
(
x
)
)
=
∑
i
N
p
i
(
x
)
l
o
g
p
i
(
x
)
−
p
i
(
x
)
l
o
g
q
i
(
x
)
=
−
H
(
p
)
+
H
(
p
,
q
)
\begin{align} D_{KL}(p(x),q(x)) &= \sum_i^N p_i(x) \mathrm{log} \left(\frac{p_i(x)}{q_i(x)}\right)\\ &=\sum_i^N p_i(x) \mathrm{log}{p_i(x)}-p_i(x) \mathrm{log}{q_i(x)}\\ &= -H(p)+H(p,q) \end{align}
DKL(p(x),q(x))=i∑Npi(x)log(qi(x)pi(x))=i∑Npi(x)logpi(x)−pi(x)logqi(x)=−H(p)+H(p,q)
NLL Loss
Cross Entropy Loss
上面公式中的
C
E
(
p
,
q
)
CE(p,q)
CE(p,q) 即为交叉熵 (Cross-Entropy)
函数,通常在机器学习中,
p
(
x
)
p(x)
p(x) 表示为目标分布(可以理解为label
),
q
(
x
)
q(x)
q(x) 表示模型输出分布(可以理解为prediction
),监督学习的目标是尽可能使得
q
(
x
)
q(x)
q(x) 接近
p
(
x
)
p(x)
p(x) 从而达到最佳性能,即
q
(
x
)
q(x)
q(x) 和
p
(
x
)
p(x)
p(x) 偏差越大,KL散度值越大,当两者分布相等时,KL散度为零,同时目标分布确定时
p
(
x
)
p(x)
p(x) 分布的熵
H
(
p
)
H(p)
H(p) 也是确定的,因此通过KL散度进行优化等价于通过交叉熵进行优化。
C
E
_
l
o
s
s
(
p
,
q
)
=
−
∑
i
N
p
i
(
x
)
l
o
g
q
i
(
x
)
CE\_loss(p,q)=- \sum_i^N p_i(x) \mathrm{log}{q_i(x)}
CE_loss(p,q)=−i∑Npi(x)logqi(x)
如何计算交叉熵?
以二分类为例:这里有1个样本, y y y表示真实值, y ^ \hat{y} y^表示预测为1的概率值,
y y y | y ^ \hat{y} y^ | |
---|---|---|
sample 1 | 0 | 0.1 |
C
E
l
o
s
s
=
−
(
0
∗
l
o
g
(
1
−
0.1
)
+
1
∗
l
o
g
(
0.1
)
)
=
2.3025
\begin{align} CE_{loss} &= -\left(0*\mathrm{log}(1-0.1) +1*\mathrm{log}(0.1) \right)\\ &= 2.3025 \end{align}
CEloss=−(0∗log(1−0.1)+1∗log(0.1))=2.3025
使用代码验证如下:
import torch
import math
print(-(0*math.log(0.9)+1*math.log(0.1)))
BCE_loss = torch.nn.BCELoss()
target = torch.tensor([0]).float()
output = torch.tensor([0.9]).float()
print(BCE_loss(output, target))
同理,接入对于一个三分类(多分类)任务,一个样本的预测值为
(
0.1
,
0.3
,
0.6
)
(0.1, 0.3,0.6)
(0.1,0.3,0.6),其对应的 gt 为 (0, 0, 1),则其交叉熵损失为:
−
(
l
o
g
(
1
−
0.1
)
+
l
o
g
(
1
−
0.3
)
+
l
o
g
(
0.6
)
)
-(log(1-0.1)+log(1-0.3)+log(0.6))
−(log(1−0.1)+log(1−0.3)+log(0.6)),但torch.nn.CrossEntropyLoss()
的计算方式略显不同(它是 softmax+log+NLLLoss的合体)。
Balanced Cross Entropy Loss
在多类别数据中,如果某类别之间分布不均衡,直接训练会导致模型过多关注样本比例较多的类别,而在样本比例较少的类别上分类性能不足,因此Balanced Cross Entropy Loss提出是为了缓解这个问题,其根据每个类别在数据中的分布比例进行加权,数学表达式如下:
B
a
l
n
a
c
e
d
C
E
_
l
o
s
s
(
p
,
q
)
=
−
∑
i
N
α
i
p
i
(
x
)
l
o
g
q
i
(
x
)
BalnacedCE\_loss(p,q)=-\sum_i^N \alpha_i p_i(x) \mathrm{log}{q_i(x)}
BalnacedCE_loss(p,q)=−i∑Nαipi(x)logqi(x)
Focal Loss
尽管引入Balanced Cross Entropy Loss缓解了类别分布不均衡的问题,但模型对每种类别的分类能力往往是不同的,因此训练模型的时候就需要模型重点关注难分样本的特征,其数学表达式为:
F
o
c
a
l
_
l
o
s
s
(
p
,
q
)
=
−
∑
i
N
α
i
(
1
−
p
i
(
x
)
)
γ
l
o
g
q
i
(
x
)
Focal\_loss(p,q)=-\sum_i^N \alpha_i(1- p_i(x))^{\gamma} \mathrm{log}{q_i(x)}
Focal_loss(p,q)=−i∑Nαi(1−pi(x))γlogqi(x)
其中
α
i
\alpha_i
αi 是类别均衡系数,
γ
>
0
\gamma>0
γ>0,从公式中可以看到,当
p
i
(
x
)
⟶
1
p_i(x) \longrightarrow 1
pi(x)⟶1 表明该样本被分类正确的概率越大,易区分样本,则其对应的loss所占的权重更低,反之则是难分类样本其loss权重更大。
应用场景:
1、车道检测与分类
原文地址:https://blog.csdn.net/weixin_50232758/article/details/142992153
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!