focal loss for multi-class classification

Focal loss 出自何恺明团队Focal Loss for Dense Object Detection一文,用于解决分类问题中数据类别不平衡以及判别难易程度差别的问题。文章中因用于目标检测区分前景和背景的二分类问题,公式以二分类问题为例。项目需要,解决Focal loss在多分类上的实现,用此博客以记录过程中的疑惑、细节和个人理解,Keras实现代码链接放在最后。

框架:Keras(tensorflow后端)
环境:ubuntu16.04 python3.5

二分类和多分类

从初学开始就一直难以分清二分类和多分类在loss上的区别,虽然明白二分类其实是多分类的一个特殊情况,但在看Focal loss文章中的公式的时候还是不免头晕,之前不愿处理的细节如今不得不仔细从很基础的地方开始解读。

多分类Cross Entropy
H(y,y)=yilogyi H ( y , y ′ ) = − ∑ y i ′ l o g y i

二分类Cross Entropy
H(y,y)=1i=0yilogyi=(y0logy0+y1logy1)=[y0logy0+(1y0)log(1y0)] H ( y , y ′ ) = − ∑ i = 0 1 y i ′ l o g y i = − ( y 0 ′ ∗ l o g y 0 + y 1 ′ ∗ l o g y 1 ) = − [ y 0 ′ ∗ l o g y 0 + ( 1 − y 0 ′ ) ∗ l o g ( 1 − y 0 ) ]

可以看出二分类问题的交叉熵其实是多分类扩展后的变形,在FocalLoss文章中,作者用一个分段函数代表二分类问题的CE(CrossEntropy)以及用pt的一个分段函数来代表二分类中标签值为1的 yi y i 部分(此处的标签值为one-hot[0 1]或[1 0]中1所在的类别):
这里写图片描述
这里写图片描述

文章图中的p(predict或probility?)等价于多分类Cross Entropy公式的y,也即经激活函数(多分类为softmax函数,二分类为sigmoid函数)后得到的概率,而文章中的y对应的是Cross Entropy中的 y y ′ ,即label。

CE经分段函数pt作为自变量后可以转化为 CE(p,y)=CE(pt)=log(pt) C E ( p , y ) = C E ( p t ) = − l o g ( p t ) ,实际上 pt p t 所代表的就是多分类CE中的 yi y i ′ (标签值)为1对应的 yi y i 的值,只不过在二分类中 y0 y 0 y1 y 1 互斥(两者之和为1),所以可以用一个分段的变量 pt p t 来表示在i取不同值情况下的 yi y i ,我理解 pt p t 为当前样本的置信度, pt p t 越大置信度越大,交叉熵越小。总结:多分类中每个样本的pt为one-hot中label为1的index对应预测结果pred的值,用代码表达就是 max(ypredylabel,axis=1) m a x ( y p r e d ∗ y l a b e l , a x i s = − 1 )

了解 pt p t 所代表的是什么之后,接下来多分类的Focal Loss就好解决了。接下来举个三分类的例子来模拟一下流程大致就知道代码怎么写了:
假设
ypred y p r e d 为softmax之后得出的结果:
这里写图片描述
ylabel y l a b e l 为one-hot标签:
这里写图片描述
pt=ypredylabel p t = y p r e d ∗ y l a b e l :
这里写图片描述

1pt 1 − p t :
这里写图片描述
log(pt) l o g ( p t ) :(注意pt可能为0,log(x)的取值不能为0,所以加上epsilon)
这里写图片描述

Fl:
这里写图片描述
这里写图片描述

可以看到3.4538..的地方本该是0才对,原因是log函数后会得到一个很小的值,而不是0,所以应该先做log再乘y_label:
这里写图片描述

原: log(pt)=log(ylabelypred) l o g ( p t ) = l o g ( y l a b e l ∗ y p r e d )
改: log(pt)=ylabellog(ypred) l o g ( p t ) = y l a b e l ∗ l o g ( y p r e d )

顺带一提,在多分类中alpha参数是没有效果的,每个样本都乘以了同样的权重

详细信息可以看代码中的注释

代码:Keras版本

  • 14
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
AF(Association Fusion)是一种基于关联的多模态分类方法。多模态分类是指利用多种不同类型的数据(如图像、文本、音频等)进行分类任务。传统的多模态分类方法通常是将不同类型的数据分别提取特征,然后将这些特征进行融合得到最终结果。AF方法则是通过建立数据之间的关联来实现融合。 具体而言,AF方法首先将每个模态的数据进行特征提取,得到对应的特征向量。然后通过计算每个模态之间的相关度来建立模态之间的关联。这个相关度可以通过不同的方法来计算,例如互信息、皮尔逊相关系数等。 接下来,AF方法通过关联度来调整每个模态的权重。具体来说,权重与关联度成正比,关联度越高的模态将获得更大的权重。这样一来,每个模态的重要程度就会根据数据之间的关联度动态调整。 最后,AF方法通过将每个模态的特征与对应的权重进行加权融合,得到最终的特征向量。这个特征向量可以用于进行分类任务。 与传统的融合方法相比,AF方法能够更准确地捕捉到不同模态数据之间的关联信息。这样一来,融合后的特征向量能够更好地反映整个多模态数据的特征,提高分类准确率。 综上所述,AF是一种基于关联的多模态分类融合方法,通过建立数据之间的关联来动态调整每个模态的权重,从而提高多模态分类的准确率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值