通过互信息思想来缓解类别不平衡问题
By 苏剑林 | 2020-07-19 | 151493位读者 | 引用类别不平衡问题,也叫“长尾问题”,是机器学习面临的常见问题之一,尤其是来源于真实场景下的数据集,几乎都是类别不平衡的。大概在两年前,笔者也思考过这个问题,当时正好对“互信息”相关的内容颇有心得,所以构思了一种基于互信息思想的解决办法,但又想了一下,那思路似乎过于平凡,所以就没有深究。然而,前几天在arxiv上刷到Google的一篇文章《Long-tail learning via logit adjustment》,意外地发现里边包含了跟笔者当初的构思几乎一样的方法,这才意识到当初放弃的思路原来还能达到SOTA的水平~于是结合这篇论文,将笔者当初的构思过程整理于此,希望不会被读者嫌弃“马后炮”。
问题描述
这里主要关心的是单标签的多分类问题,假设有$1,2,\cdots,K$共$K$个候选类别,训练数据为$(x,y)\sim\mathcal{D}$,建模的分布为$p_{\theta}(y|x)$,那么我们的优化目标是最大似然,或者说最小化交叉熵,即
\begin{equation}\mathop{\text{argmin}}_{\theta}\,\mathbb{E}_{(x,y)\sim\mathcal{D}}[-\log p_{\theta}(y|x)]\end{equation}
再谈类别不平衡问题:调节权重与魔改Loss的对比联系
By 苏剑林 | 2020-08-31 | 76057位读者 | 引用类别不平衡问题,也称为长尾分布问题,在本博客里已经有好几次相关讨论了,比如《从loss的硬截断、软化到focal loss》、《将“Softmax+交叉熵”推广到多标签分类问题》、《通过互信息思想来缓解类别不平衡问题》。对于缓解类别不平衡,比较基本的方法就是调节样本权重,看起来“高端”一点的方法则是各种魔改loss了(比如Focal Loss、Dice Loss、Logits Adjustment等),本文希望比较系统地理解一下它们之间的联系。
从光滑准确率到交叉熵
这里的分析主要以sigmoid的2分类为主,但多数结论可以平行推广到softmax的多分类。设$x$为输入,$y\in\{0,1\}$为目标,$p_{\theta}(x) \in [0, 1]$为模型。理想情况下,当然是要评测什么指标,我们就去优化那个指标。对于分类问题来说,最朴素的指标当然就是准确率,但准确率并没有办法提供有效的梯度,所以不能直接来训练。
不成功的尝试:将多标签交叉熵推广到“n个m分类”上去
By 苏剑林 | 2022-07-15 | 23572位读者 | 引用可能有读者留意到,这次更新相对来说隔得比较久了。事实上,在上周末时就开始准备这篇文章了,然而笔者低估了这个问题的难度,几乎推导了整整一周,仍然还没得到一个完善的结果出来。目前发出来的,仍然只是一个失败的结果,希望有经验的读者可以指点指点。
在文章《将“Softmax+交叉熵”推广到多标签分类问题》中,我们提出了一个多标签分类损失函数,它能自动调节正负类的不平衡问题,后来在《多标签“Softmax+交叉熵”的软标签版本》中我们还进一步得到了它的“软标签”版本。本质上来说,多标签分类就是“$n$个2分类”问题,那么相应的,“$n$个$m$分类”的损失函数又该是怎样的呢?
这就是本文所要探讨的问题。
《自然极值》系列——3.平衡态公理
By 苏剑林 | 2010-11-28 | 18708位读者 | 引用[问题解答]木杆平衡
By 苏剑林 | 2012-01-21 | 54839位读者 | 引用关于“平衡态公理”的更正与思考
By 苏剑林 | 2013-02-03 | 20034位读者 | 引用在《自然极值》系列文章中,我引用了《数学方法论与解题研究》(张雄,李得虎编著)中提到的“平衡态公理”,并用它来解决了一些数学物理问题。平衡态公理讲的是系统的平衡状态总是在势能取极(小)值时取到,简单来讲就是自然界总向势能更低的方向发展,比如“水往低处流”。这在经典力学中本身是没有任何问题的,但在有些时候,我们在应用的时候可能会不自觉地将它想象成为“系统的平衡状态总是在总能量取极(小)值时取到”。然而,这却是不正确的。本文就是要探讨这个问题。
先来看看平衡态公理的来源。从最小作用量原理出发,考虑保守系统,每一个系统都应该对应着一个取极值的作用量S:
$$S=\int_{t_1}^{t_2} L(x,\dot{x})dt$$
很早以前我就对这个问题感兴趣了,但是一直搁置着,没有怎么研究。最近在阅读《引力与时空》的“潮汐力”那一节时重新回到了这个问题上,决定写点什么东西。在这里不深究流体静力平衡的定义,顾名思义地理解,它就是流体在某个特定的力场下所达到的平衡状态。流体静力学告诉我们:
达到流体静力平衡时,流体的面必定是一个等势面。
这是为什么呢?我们从数学的角度来简单分析一下:只考虑二维情况,假如等势面方程是$U(x,y)=C$,那么两边微分就有
$$0=dU=\frac{\partial U}{\partial x}dx+\frac{\partial U}{\partial y}dy=(\frac{\partial U}{\partial x},\frac{\partial U}{\partial y})\cdot (dx,dy)$$
这意味着向量$(\frac{\partial U}{\partial x},\frac{\partial U}{\partial y})$和向量$(dx,dy)$是垂直的,前者便是力的函数,后者就是一个切向量(三维就是一个切平面)。也就是说合外力必然和流体面垂直,这样才能提供一个相等的方向相反的内力让整个结构体系处于平衡状态!
从loss的硬截断、软化到focal loss
By 苏剑林 | 2017-12-25 | 191777位读者 | 引用前言
今天在QQ群里的讨论中看到了focal loss,经搜索它是Kaiming大神团队在他们的论文《Focal Loss for Dense Object Detection》提出来的损失函数,利用它改善了图像物体检测的效果。不过我很少做图像任务,不怎么关心图像方面的应用。本质上讲,focal loss就是一个解决分类问题中类别不平衡、分类难度差异的一个loss,总之这个工作一片好评就是了。大家还可以看知乎的讨论:
《如何评价kaiming的Focal Loss for Dense Object Detection?》
看到这个loss,开始感觉很神奇,感觉大有用途。因为在NLP中,也存在大量的类别不平衡的任务。最经典的就是序列标注任务中类别是严重不平衡的,比如在命名实体识别中,显然一句话里边实体是比非实体要少得多,这就是一个类别严重不平衡的情况。我尝试把它用在我的基于序列标注的问答模型中,也有微小提升。嗯,这的确是一个好loss。
接着我再仔细对比了一下,我发现这个loss跟我昨晚构思的一个loss具有异曲同工之理!这就促使我写这篇博文了。我将从我自己的思考角度出发,来分析这个问题,最后得到focal loss,也给出我昨晚得到的类似的loss。
最近评论