1.有关数据不均衡
1.1 长尾分布:
实际的视觉相关问题中,数据通常存在长尾分布,少量类别占据绝大多数样本,大量的类别仅有少量的样本,如ImageNet。
1.2 长尾问题的解决思路:
重采样(re-sampling):
-
对头部类别的欠采样(under-sampling)
-
对尾部类别的过采样(over-sampling)
重加权(re-weighting):
重加权和重采样两种方法本质都是利用已知的数据集分布,在学习过程中对数据分布进行反向加权,强化尾部类别的学习,抵消长尾效应。
Learning strategy(阶段训练):
-
小样本学习方法:如:meta-learning、metric learning、transfer learing。
-
调整训练策略,将训练过程分为两步:
第一步,不区分head样本和tail样本,对模型正常训练
第二步,设置小的学习率,对第一步的模型使用各种样本平衡的策略进行finetune
2. 数据层面方案
通过数据预处理技术来处理类别不均衡问题如:重采样、数据增强、类别权重等方法,可以使得模型更加关注少数类别的训练样本,从而提高模型对少数类别的识别准确率。
具体方法:
-
-
在dataload过程中重采样:imbalanced-dataset-sampler-pytorch
-
在dataset获取过程中重采样:mmcls ClassBalancedDataset类详解_lh_lyh的博客-CSDN博客
-
2.1 欠采样
随机欠采样:
对训练集中多数类样本进行“欠采样”(undersampling) 问题:由于采样的样本集合要少于原来的样本集合,因此会造成一些信息缺失
EasyEnsemble算法:(集成学习思路)
1)从多数类中有放回的随机采样n次,每次选取与少数类数目相近的样本个数,那么可以得到n个样本集合记作 。
2)然后,将每一个多数类样本的子集与少数类样本合并并训练出一个模型,可以得到n个模型。
3)最终将这些模型组合形成一个集成学习系统,最终的模型结果是这n个模型的平均值。
BalanceCascade算法:(集成学习思路)
基于Adaboost,将Adaboost作为基分类器,核心思路是:
1)在每一轮训练时都使用多数类与少数类数量相等的训练集,训练出一个Adaboost基分类器。
2)然后使用该分类器对全体多数类进行预测,通过控制分类阈值来控制假正例率(False Positive Rate),将所有判断正确的类删除。
3)最后,进入下一轮迭代中,继续降低多数类数量。
2.2 过采样
随机过采样:
随机的复制少数类样本使数据集趋于均衡。但这造成模型训练复杂度加大和过拟合问题,因为随机过采样是简单的对初始样本进行复制采样,这就使得学习器学得的规则过于具体化,不利于学习器的泛化性能
SMOTE:
Synthetic Minority Oversampling(合成少数类过采样技术)随机过采样方法的改进算法。
基本思想:对每个少数类样本,从它的最近邻中随机选择一个样本(少数类中的一个样本),然后在
和
之间的连线上随机选择一点作为新合成的少数类样本。
1).对于 ,以欧氏距离为标准计算它到少数类样本集
中所有样本的距离,得到其k近邻。
2).根据样本不平衡比例设置一个采样比例以确定采样倍率N,对于每一个少数类样本,从其 k近邻中随机选择若干个样本,假设选择的是
。
3).对于每一个随机选出来的近邻 ,分别与
按照如下公式构建新的样本。
2.3 调整样本权重
调整样本权重和修改分类阈值在可统称为代价敏感学习
在学习中为少数类样本赋予更高的权重,比如在神经网络中,少数类产生的误差损失对网络权重更新力度更大。可以达到和随机过采样相同的效果,且不会使训练复杂度增大
如:CrossEntropyLoss中设置weight:CrossEntropyLoss — PyTorch 2.0 documentation
2.4 修改分类阈值
Thresholding的方法又称为post scaling的方法
-
即根据测试数据的不同类别样本的分布情况选取合适的阈值判断类别。 如:绘制类别置信度分布图,从中选取阈值
-
也可以根据贝叶斯公式重新调整分类器输出概率值。
(由于数据集存在类别不均衡的情况,直接训练分类器会使得模型在预测时更偏向于多数类,所以不再以0.5为分类阈值,而是针对少数类在模型仅有较小把握时就将样本归为少数类。)
3. 模型层面方案
模型角度的解决方案:通过调整深度学习模型的结构或优化算法来处理类别不均衡问题,例如使用深度残差网络(ResNet)、使用Focal Loss损失函数、使用欠采样和过采样结合的方法等,可以增强模型对少数类别的学习能力,从而提高模型的准确率和召回率。
3.1 损失函数
Focal loss是一个能较好适应类别不均衡的损失函数,Focal loss如下:
对于那些概率较大的样本趋近于0,可以降低它的loss值,而对于真实概率比较低的困难样本,
对他们的loss影响并不大,就可以通过降低简单样本loss的方法提高困难样本对梯度的贡献。
4. 集成层面方案
集成学习的解决方案:通过集成多个模型的预测结果,可以缓解类别不均衡问题。例如使用Bagging、Boosting、Stacking等方法,可以结合多个模型的预测结果来获得更好的分类结果,提高模型对少数类别的识别能力。