Long-Tailed Classification (1) 长尾(不均衡)分布下的分类问题简介

Long-Tailed Classification (1) 长尾(不均衡)分布下的分类问题简介

在传统的分类和识别任务中,训练数据的分布往往都受到了人工的均衡,即不同类别的样本数量无明显差异。一个均衡的数据集固然大大简化了对算法鲁棒性的要求,也一定程度上保障了所得模型的可靠性,但随着关注类别的逐渐增加,维持各个类别之间均衡就将带来指数增长的采集成本。举个简单的例子,如果要做一个动物分类数据集,猫狗等常见数据可以轻轻松松的采集数以百万张的图片,但是考虑到数据集的均衡,我们必须也给雪豹等罕见动物采集等量的样本,而随着类别稀有度的增加,其采集成本往往成指数增长。

雪豹

那么如果我们完全不考虑人工均衡,自然的采集所有相关数据呢?这样的数据就是本文所关注的长尾数据。在自然情况下,数据往往都会呈现如下相同的长尾分布。这种趋势同样出现在从自然科学到社会科学的各个领域各个问题中,参考Zipf's Law或者我们常说的28定律。直接利用长尾数据来训练的分类和识别系统,往往会对头部数据过拟合,从而在预测时忽略尾部的类别。如何有效的利用不均衡的长尾数据,来训练出均衡的分类器就是我们所关心的问题,从工业需求上来说,该研究也将大大地提升数据采集的速度并显著降低采集成本。

长尾分布

我打算分几个部分依次介绍近年来长尾分布相关的研究(可能会更新的比较慢):

  1. 长尾分布下分类问题简介与基本方法(本文)
  2. 长尾分布下分类问题的最新研究(已更新)
  3. 长尾分布下的物体检测和实例分割最新研究(已更新)
  4. 一种崭新的长尾分布下分类问题的通用算法 (已更新)

该系列文章主要参考19年以来在计算机视觉方面的研究和进展。早期研究或者自然语言等其他领域的文章暂不涉及,如果有知道的也欢迎告诉我让我学习一下。同时长尾效应主要体现在有监督学习里,无监督/自监督学习等因为不依赖标注,所以长尾效应体现的不明显,目前也缺少这方面的研究(但并不代表无监督/自监督学习不受长尾效应的影响,因为图片本身也有分布,常见的图案和罕见的图案也会形成这样的长尾效应,从而使模型对常见的图案更敏感)。

两种基本方法

长尾分布的最简单的两类基本方法是重采样(re-sampling)和重加权(re-weighting)。这类方法本质都是利用已知的数据集分布,在学习过程中对数据分布进行暴力的hacking,即反向加权,强化尾部类别的学习,抵消长尾效应。

(1)重采样(re-sampling):

重采样在早期研究中又包含1)对头部类别的欠采样(under-sampling)和2)对尾部类别的过采样(over-sampling)。不过他们的本质其实都是对不同类别的图片采样频率根据样本数量进行反向加权,所以在近年的研究中我们可以统称他们为重采样。其中最常用策略又叫类别均衡采样(class-balanced sampling)。类别均衡的概念主要是区别于传统学习过程中的样本均衡(instance-balanced sampling),也就是每个图片都有相同的概率被选中,不论其类别。而类别均衡采样的核心就是根据不同类别的样本数量,对每个图片的采样频率进行加权。关于采样策略,下面我主要引用Decoupling Representation (ICLR 2020)[1]的通用公式来表示:

p_j=\frac{n_j^q}{\sum_{i=1}^C n_i^q} , C 为数据集的类别数量, n_i 为类别 i 的样本总数, p_j 为从 j 类别中采样一个图片的概率。传统的样本均衡采样(instance-balanced sampling)在这个公式里就是 q=1 的情况,也就是每个图片等概率被采样,而 p_{head}>>p_{tail} ,因为其样本数 n_{head} 远远大于 n_{tail} 。而狭义的重采样(re-sampling)可以看作 q\in[0,1) 的情况,也就是尾部类别的样本图片会比头部类别的图片有更高的概率被采样到。其中类别均衡采样(class-balanced sampling)则是 q=0 的情况,即所有类别都采样相同数量的样本,当然尾部类别的图片可能会被反复重复采样,所以一般也会做一些简单的数据增强,例如反转,随机剪裁等。

总的来说,重采样就是在已有数据不均衡的情况下,人为的让模型学习时接触到的训练样本是类别均衡的,从而一定程度上减少对头部数据的过拟合。不过由于尾部的少量数据往往被反复学习,缺少足够多的样本差异,不够鲁棒,而头部拥有足够差异的大量数据又往往得不到充分学习,所以重采样也并非是个真正完美的解决方案。

(2)重加权(re-weighting):

重加权则主要体现在分类的loss上。不同于采样,因为loss计算的灵活性和方便性,很多比较复杂的任务比如物体检测和实例分割等,都更倾向于使用重加权loss来解决长尾分布问题。毕竟当一张图片上包含多个需要检测或分割的物体,采样时,对他们分别按类别作筛选远比图像层面的采样麻烦的多。而重加权的实现不仅简单,也往往更加灵活。从基于类别分布的反向加权,到不需要知道类别,直接根据分类的可信度进行的困难样本挖掘(Hard Example Mining),如focal loss。 这里我们先给个Re-weighted Cross-Entropy Loss 的通用公式:

loss=-\beta \cdot log \frac{exp(z_j)}{\sum_{i=1}^C exp(z_i)} , 其中z_i 是网络输出的logit, \beta 就是我们重加权中的权重,需要注意的是,这里的 \beta 不是一个常数,而是一个取决于具体实现的经过计算的权重,但一般来说 \beta 的趋势是,给头部类别更低的权重,给尾部类别更高的权重,从而反向抵消长尾效应。关于具体的实现,之后两期会介绍更多最新的较fancy的研究。关于最简单的重加权实现,则可以直接利用公式 \beta=g(\frac{\sum_{i=1}^C f(n_i)}{f(n_j)}) , f(\cdot),g(\cdot) 可以是任意单调递增函数,比如log或者各种幂大于0的指数函数。


总的来说,在长尾分类问题中,上述两种方法简单有效,以至于大多数最新的研究其实本质都是对他们的拓展和细化。我会在后期更新里介绍这两年长尾识别的一些最新研究里细说。


(后续)长尾分布下分类问题的最新研究

(后续)长尾分布下的物体检测和实例分割最新研究

(后续)一种崭新的长尾分布下分类问题的通用算法

[1] Kang, Bingyi, et al. "Decoupling representation and classifier for long-tailed recognition."ICLR 2020.

编辑于 09-26

文章被以下专栏收录