如何解决样本不平衡问题?

1 背景

在解决实际问题的过程中,样本不均衡的问题十分常见,如类别不平衡、来自不同分布的数据不均衡等。这里解释下“来自不同分布的数据不均衡”,比如猫狗分类的例子,大部份样本是真实拍摄的猫狗图片,少部分样本是绘画的猫狗卡通图片。

如果直接把类别不平衡的样本丢给模型学习,显然模型会在major classes的样本上的学习效果更好,而在minor classes上泛化效果差,因为其看到的major classes的样本远远多于minor classes;同理,对不同分布不均衡的数据也是如此,以上述猫狗分类的例子, 模型在猫狗拍摄图片上的分类效果更好,但在猫狗卡通图片上的泛化效果较差。

2 解决方案

针对样本不平衡的问题,结合自己的尝试及了解,主要有以下策略:

  • 欠采样

    对占比较大的数据进行欠采样。具体的,在每个epoch中,随机对较多的数据进行采样,可以让模型见到更多的数据。欠采样一般有明显的提升效果,但大多数时候不如过采样,需要实际对比。原因可能还是丢弃了部分数据,容易欠拟合,尤其是占比少的数据数量较小时。我在实践的过程中,处理不同分布的数据不平衡时,采用欠采样也取得了不错的效果。

  • 过采样

    对占比较小的数据进行过采样。除了直接重复采样外,也可以生成新的数据,如SMOTE、ADASYN、数据增强等。过采样容易造成过拟合,一般需要正则化降低过拟合的程度。过采样的效果较好,实现简单,可以作为baseline。

  • 过采样+欠采样

    一个比较成熟的算法就是用SMOTE过采样,再利用Tomek's link再控制新的样本空间, 用法见文档:[Compare sampler combining over- and under-sampling — Version 0.10.1 (imbalanced-learn.org)] 其他用法也可参考imbalance-learn。

  • 半监督学习

    首先在原始的不平衡数据集 DL 上正常训练获得一个中间步骤分类器 fθ^ ,并将其应用于生成未标记数据 DU 的伪标签 y^ ;通过结合两部分数据,最小化损失函数 L(DL,θ)+ωL(DU,θ) 以学习最终模型 fθ^f 。[NeurIPS 2020 | 数据类别不平衡/长尾分布?不妨利用半监督或自监督学习 - 知乎 (zhihu.com)]使用半监督的方式有以下几点需要注意:

    (1)需要先在原始不平衡的数据集上训练一个效果还不错的模型,这样伪标签的正确率才会更高;

    (2)无标签的数据需要和原始不平衡数据集有较大的相关性

    (3)加入的无标签数据尽可能分布均衡

  • 自监督学习

    解耦特征和分类器(decoupling representation & classifier):最近的研究发现将特征学习和分类器学习解耦,把不平衡学习分为两个阶段,在特征学习阶段正常采样,在分类器学习阶段平衡采样,可以带来更好的长尾学习结果。这也是目前的最优长尾分类算法。

    首先先放弃标签信息,并进行自监督预训练,可以采用对比学习(MoCo、SimCLR、BYOL)、图像掩码建模(BeiT、MAE、CAE)等方式。此过程旨在从不平衡数据集中学到更好的、与标签无关的初始化特征信息。在此阶段后,我们可以使用任何标准的训练方法,去训练得到最终的模型。由于预训练与正常训练阶段所采用的学习方法无关,因此这种策略可与任何现有的不平衡学习算法兼容。一旦自监督产生良好的初始化,网络就可以从预训练任务中受益,并最终学习到更通用的表示形式。

3 引申

上述的半监督学习和自监督学习也可以应用到少数样本学习。标注样本不够也是实际应用过程中经常面临的情况。另外可以结合主动学习,选择更加有效的样本进行标注。

猜你喜欢

转载自blog.csdn.net/j_river6666/article/details/128580663