前言
长尾分布
在分类任务中会提到这个名,这是因为长尾分布这个现象问题会导致在训练过程中会出现出错率高的问题,影响了实验结果。
这里要说的是,长尾分布是一种现象,有的地方说是一种理论或定律,我感觉这样说不太确切,因为长尾分布并非是一种普遍现象,不能将所有的数据分布或者现象都强加于长尾分布这个概念上。
这个概念是对于IT行业来说比较常见的,比如电商的销售现象——常见的产业巨头能够在实体产业上独树一帜,但是电商的发展,导致了很多小众或者说不太常见的商品的销售量很可能大于或者等于原来产业巨头的销售产量,这就是在IT产业上的长尾分布的现象。
在机器学习和视觉识别的实际应用过程中,长尾分布在某种程度上可以说是比正态分布更加广泛存在的一种自然分布,现实中主要表现在少量个体做出大量贡献(少量类别的样本数占据大量样本比例),人们经常提到的“二八定律”(Pareto法则)就是长尾分布的形象概括。
对于长尾分布这个现象在图像或者视觉等任务中是经常遇到的。
现在也出现了NLP的领域,这里我想提一下我看到的一个名次——齐夫定律(Zipf's Law)
.这个是应用在自然语言处理当中的,主要是讲到了:在自然语言的语料库里,一个单词出现的频率与它在频率表里的排名成反比。所以,频率最高的单词出现的频率大约是出现频率第二位的单词的2倍,而出现频率第二位的单词则是出现频率第四位的单词的2倍。这个定律被作为任何与幂定律概率分布有关的事物的参考。
之所以提到这个齐夫定律是因为它和长尾分布一样,都是关于幂定律概率分布
的一种分布,在自然语言处理中,也说明了经常出现的词或者字也很容易对模型产生我们不想要的结果。
在Brown语料库中,“the”、“of”、“and”是出现频率最前的三个单词,其出现的频数分别为69971次、36411次、28852次,大约占整个语料库100万个单词中的7%、3.6%、2.9%,其比例约为6:3:2。大约占整个语料库的7%(100万单词中出现69971次)。满足齐夫定律中的描述。仅仅前135个字汇就占了Brown语料库的一半。
至此,可以看出,对数据做一下平衡处理,是机器学习中需要考虑的一个问题了。
处理方法(相关工作)
下面的词汇和处理方法的划分来自于这篇文章:【Bag of Tricks for Long-Tailed Visual Recognition with Deep Convolutional Neural Networks】,其中里面说到的方法都是在CV方面上的应用,不过我认为这种现象也是可以迁移到其他的研究方向上的。
先说一下一些相关的词汇:
-
CE——交叉熵;
-
Imbalance factor——定义为数据集中数据量最大的类与数据量最小的类的比值;
-
CAM—— tailored for two-stage training and generates discriminative images by transferring foregrounds while keeping backgrounds unchanged.
-
These fine-tuning methods (Cao et al. 2019) can be divided into two sections:
deferred re-balancing by re-sampling (DRS) and by re-weighting (DRW).DRS和DRW其实是两种训练方法,DRS是第一阶段使用 vanilla training schedule来训练,第二阶段使用re-sample来微调;而DRW在第二阶段使用re-weight来微调。
经典机器学习处理的方法
重采样法(Re-Sampling)
这里又分为两种方法——Over-Sampling和Under-Sampling
- Over-Sampling,在训练的过程中多次采样数据集中数据量占比量较小的数据,使得这些数据在训练时被多次用到,从而缓解长尾数据分布的问题。
- Under-Sampling,在训练中抛弃数据量占比较高的数据,从而达到各个类别数据量的平衡,以缓解长尾数据分布的问题。
【Bag of Tricks for Long-Tailed Visual Recognition with Deep Convolutional Neural Networks】一文中总结了一些方法:Class-balanced sampling、Random under-sampling、Progressively-balanced sampling等,本质上是修改了选择样本的概率P。
损失重加权(Re-Weight)
在训练模型的过程中,增加损失中长尾数据的权重,即是根据样本隶属类别“稀疏程度”来对该样本的损失进行加权,包含越多样本的类别通常会被分配更低的权重,从而平衡不同类别样本对损失函数的贡献。但该方法无法处理实际生活中的数据,一旦长尾数据分布很严重,该方法还容易引起优化的问题。
重新分配权重是根据不同类别的不同样本数决定其损失值的惩罚系数大小,比如对于少数样本类,其损失惩罚应该更大,通常的做法是为交叉熵损失加上各个类别的权重系数,该系数通常定义为类别样本数的倒数。
【Bag of Tricks for Long-Tailed Visual Recognition with Deep Convolutional Neural Networks】总结了相关的算法,本质上是通过修改了loss来达到平衡的效果。
为什么说上述两种方法有一定的效果呢?
在《BBN: Bilateral-Branch Network with Cumulative Learning for Long-Tailed Visual Recognition》一文中提到这样的常见方法虽然在分类效果上很好,但是在表征能力上就不是很好,原文内容如下:
We firstly discover that these rebalancing methods achieving satisfactory recognition accuracy owe to fifier learning of deep networks. However, at the same time,they will unexpectedly damage the representative ability of the learned deep features to some extent.
这也就是说这样的平衡方法在一定程度上是损失了数据的特征,也即表示特征的能力下降了:
In this paper,we reveal that the mechanism of these strategies is to signifificantly promote classififier learning but will unexpectedly damage the representative ability of the learned deep features to some extent.
具体来说的效果如下图:
从图中可以看出,在平衡之后的数据特征开始分散了。
进一步的实验分析得到了下图的数据:
两个图代表了两个数据集,这里就以左图为例子说一下这两张图说明了什么:
- 首先,作者为了方便证明,将训练的方法分为了两个阶段:
- representation learing,也就是特征提取器的训练过程(FP和BP阶段,不包含全联接层);
- classifer learning,也就是分类器的训练阶段(最后的全联接层);
- 分了三种训练方法——plain training(就是用交叉验证,这是分类常用的方法,PS:我认为这个交叉验证的作用就是充当了对照实验,也就是说不做任何技术处理的前提下来看得到的的训练结果)、re-sampling和re-weight;
- 只看其中一列(固定其中一列,在representation learning一定的前提下),RS的分类效果最好;
- 只看其中一行(同理),交叉验证CE的表示效果最好;
存在的问题
re-balance方法还是存在问题的,在文中提到:
- re-sampling
- 前提:在数据extreme不平衡的前提下;
- over-sampling:存在过过拟合现象;
- under-sampling: 存在欠拟合现象;
- re-weight
- 打乱原始数据的分布情况;
深度学习方法
两阶段微调策略
下面的BBN只是其中的一种模型,所谓的两阶段微调策略(Two-stage fifine-tuning strategies),所谓的两阶段是分为:1)不平衡的训练;2)平衡的微调;两个部分。
BBN
这个方法将训练分为两个阶段。第一阶段像往常一样正常训练用于提取表征,第二个阶段使用较小的学习率以Re-balancing的方式微调网络。
这里我提一个我看到过的今年刚提出的一种Two-stage方法实现处理长尾分布的框架。
在《BBN: Bilateral-Branch Network with Cumulative Learning for Long-Tailed Visual Recognition》一文中就提出了BBN网络用于更好地处理长尾分布。
如上图所示,在文中,作者将整个自己设计的BNN模型设计成为三个模块:
- conventional learning branch
- re-balancing branch
- cumulative learning(根据训练epochs的增加来不断修改参数 α \alpha α,通过这个参数来整合上述两个branch)
当然还有其他的方法很好的在长尾分布上效果很好的分类模型——LDAM和CB-Focal。
Mixup方法
【Bag of Tricks for Long-Tailed Visual Recognition with Deep Convolutional Neural Networks】一文中提出了两种Minxup方法,其中一种是已经存在的Mixup方法:
- Input Mixup
- Maninfold Mixup
另一种就是作者提出的“fine-tuning after mixup training“的方法,其实就是分成了两个阶段,第一个阶段是mixup,第二阶段就是微调模型训练(至于是怎么实现的,文中没说明)。
文本分类中的长尾分布问题
上述的解决方法都是针对图像或CV领域来解决的,但是在NLP中也有长尾分布的问题,比如在【Balancing Methods for Multi-label Text Classification with Long-Tailed Class Distribution】一文中提出了在多标签的文本分类问题的结局方法——提出新的Loss函数: