将“softmax+交叉熵”推广到多标签分类问题

一、多分类问题的解决方法:

在模型的最后用一个全连接层输出每个类的分数,然后用softmax激活并用交叉熵作为损失函数。

二、将“softmax+交叉熵”方案推广到多标签分类场景

1.多分类问题

指的就是单标签分类问题,即从n个候选类别中选1个目标类别。假设各个类的得分分别为s1,s2,…,sn,目标类为t∈{1,2,…,n},那么所用的loss为
在这里插入图片描述
这个loss的优化方向是让目标类的得分st变为s1,s2,…,st中的最大值。

2.多标签分类问题

即从n个候选类别中选k个目标类别。
一般方法:这种情况下我们一种朴素的做法是用sigmoid激活,然后变成n个二分类问题,用二分类的交叉熵之和作为loss。
缺点:显然,当n≫k时,这种做法会面临着严重的类别不均衡问题,这时候需要一些平衡策略,比如手动调整正负样本的权重、focal loss等。训练完成之后,还需要根据验证集来进一步确定最优的阈值。

为什么“n选k”要比“n选1”多做那么多工作?

3.构建组合形式的softmax来作为单标签softmax的推广

我们会先假设k是一个固定的常数,然后再讨论一般情况下k的自动确定方案,最后确实能得到一种有效的推广形式。

3.1固定的k

我们考虑k是一个固定常数的情景,这意味着预测的时候,我们直接输出得分最高的k个类别即可。那训练的时候呢?作为softmax的自然推广,我们可以考虑用下式作为loss:
在这里插入图片描述
将“softmax+交叉熵”推广到多标签分类问题_第1张图片

3.2自动确定阈值

上述讨论的是输出数目固定的多标签分类问题,但一般的多标签分类的目标标签数是不确定的。为此,我们确定一个最大目标标签数K≥k,并添加一个0标签作为填充标签,此时loss变为
将“softmax+交叉熵”推广到多标签分类问题_第2张图片

4.更简单的方法

Circle Loss: A Unified Perspective of Pair Similarity Optimization

4.1单标签分类的交叉熵

st是softmax函数激活后的一个值
将“softmax+交叉熵”推广到多标签分类问题_第3张图片
这个loss的特点是,所有的非目标类得分{s1,⋯,st−1,st+1,⋯,sn}跟目标类得分{st}两两作差比较,它们的差的最大值都要尽可能小于零,所以实现了“目标类得分都大于每个非目标类的得分”的效果。

所以,假如是有多个目标类的多标签分类场景,我们也希望“每个目标类得分都不小于每个非目标类的得分”,所以下述形式的loss就呼之欲出了:
在这里插入图片描述
其中Ωpos,Ωneg分别是样本的正负类别集合。这个loss的形式很容易理解,就是我们希望si

4.2用于多标签分类

如果n选k的多标签分类中k是固定的话,那么直接用上式作为loss就行了,然后预测时候直接输出得分最大的k个类别。

对于k不固定的多标签分类来说,我们就需要一个阈值来确定输出哪些类。为此,我们同样引入一个额外的0类,希望目标类的分数都大于s0,非目标类的分数都小于s0,而前面已经已经提到过,“希望si 将“softmax+交叉熵”推广到多标签分类问题_第4张图片

你可能感兴趣的:(分类,深度学习,机器学习)