自学内容网 自学内容网

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))=iNpi(x)log(qi(x)pi(x))=iNpi(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)=iNpi(x)logqi(x)

如何计算交叉熵?

以二分类为例:这里有1个样本, y y y表示真实值, y ^ \hat{y} y^表示预测为1的概率值,

y y y y ^ \hat{y} y^
sample 100.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=(0log(10.1)+1log(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(10.1)+log(10.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)=iNα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)=iNαi(1pi(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)!