太妙了,真是妙蛙种子到了妙妙屋!
分享一篇中稿CVPR 2021的工作,CReST: A Class-Rebalancing Self-Training Framework for Imbalanced Semi-Supervised Learning[1]
这篇文章是在组会上听到的,觉得真的是太太妙了。本文考虑的是半监督场景下的长尾分布问题,「即此时我们不仅没有足够的有标记样本,而且这些有标记样本的分布还是长尾分布的(类别不平衡的)。」
我当时心想,"好家伙,长尾分布问题和半监督问题两个这么难啃的骨头,你放在一块啃?" 接下来就来看看本文作者是如何四两拨千斤的。
自然界中收集的样本通常呈长尾分布,即收集得到的绝大多数样本都属于常见的头部类别(例如猫狗之类的),而绝大部分尾部类别却只能收集到很少量的样本(例如熊猫、老虎),这造成收集得到的数据集存在着严重的类别不平衡问题(Class-Imbalanced),从而使得训练得到的模型严重的过拟合于头部类别。
对于解决长尾分布的方法有很多,例如重采样 (Re-Sampling) 以及重加权 (Re-Weighting)。重采样简单来说可以划分为两类,
但这样naive的方法存在的缺点也显而易见,即模型对尾部类别过拟合以及对头部类别欠拟合。
重加权方法的核心思想是类别少的样本应该赋予更大的权重,类别多的样本赋予更少的权重。此外有一篇文章[1]提出样本之间存在大量的信息冗余,因此提出了一个类别「有效样本数」的概念,还挺有意思,这里就不展开了。
本文的问题设置更为复杂,考虑的是半监督场景下的长尾分布问题,「即此时我们不仅没有足够的有标记样本,而且这些有标记样本的分布还是长尾分布的(类别不平衡的)」。面对这么困难的问题,作者倒是不慌不忙,首先做了一个很有意思的实验。
作者使用 「FixMatch」 模型 (一个解决半监督问题的SOTA方法) 分别在具有长尾分布的「CIFAR10-LT」 (左边两张图) 以及 「CIFAR100-LT」 (右边两张图) 上进行了实验。其中横坐标代表长尾分布的不同类别,越小的数字代表是头部类别,越大的数字代表是尾部类别;纵坐标对应红点和蓝点分别是 Recall 和 Precision。
实验现象表明,「模型对头部类别的样本 Recall 很高,对尾部类别的 Recall 很低;模型对头部类别样本的 Precision 很低,但对尾部类别的 Precision 却很高」。这是一个很常见的类别不平衡问题里的过拟合现象,换句话来说,「模型对不确定性很高的尾部类别样本都预测成头部类别了。」
举个例子,我在训练阶段喂入模型100张猫的图片以及10张狗的图片,在测试阶段时会发现对于模型把握不准的狗的图片都会预测成猫,只有模型特别有把握的狗的图片才会预测成狗,此时会造成猫这个类别的 Recall 会非常高 Precision 却会非常低,反之狗这个类别的 Recall 会非常低但 Precision 却会非常高。
这个实验现象是符合直观的,但是怎么来运用上述这一信息呢?作者开始了他的 「白嫖计划」
作者 follow 半监督学习中 self-training 的过程:
中的每个样本打上伪标记得到新的数据集
加入到已标记集合中」
最妙的一步在第三步,「模型预测的类别属于尾部类别意味着这些样本的伪标记具有很高的置信度的(High precision),因为此时的模型是对头部类别过拟合的,此时模型还将某一样本预测为尾部类别说明该伪标记真的是该样本的 ground-truth。从另一方面,这一采样又巧妙的引入了尾部类别样本,从而缓解了类别不平衡问题。」
首先用两字总结该方法,「白嫖」。感觉啥外部信息都没有,仅仅利用了模型学习长尾分布样本表现出来的规律,「既“嫖”了未标记样本的真实标记,又“嫖”了尾部类别的样本。」
后面深度思考了一下这件事:
[1]
CReST: A Class-Rebalancing Self-Training Framework for Imbalanced Semi-Supervised Learning: https://arxiv.org/pdf/2102.09559.pdf