公众号关注 “ML_NLP
设为 “星标”,重磅干货,第一时间送达!
作者:Yuzhe Yang
来源:知乎

链接:https://www.zhihu.com/question/372186043/answer/1501948720
编辑:王萌(深度学习冲鸭公众号)
著作权归作者所有,本文仅作学术分享,若侵权,请联系后台删文处理
提问
假设10000个数据,有100个1,200个2,其余全是0,这种数据如何建模,普通模型会倾向所有数据都标注成0
batch抽样学习,每次从数据中抽样,比如每次抽32个数据训练,16个0,8个1,8个2,丢到模型里面训练,这么做可以吗?
作者回答
最近刚好对类别不平衡的分类问题(也即长尾分布学习,long-tailed recognition)做了一波review,整理一下我自己的总结,可以和其他回答互补一下,为小伙伴们提供一些思路和参考。这里涵盖的大部分也都是近年深度学习框架下的工作,如有遗漏欢迎补充。目前主流的方法大致有以下几种(reference只列举出了比较有代表性的):
1. 重采样(re-sampling):
这是解决数据类别不平衡的非常简单而暴力的方法,更具体可以分为两种,对少样本的过采样[1],或是对多样本的欠采样[2]。当然,这类比较经典的方法一般效果都会欠佳,因为过采样容易overfit到minor classes,无法学到更鲁棒易泛化的特征,往往在非常不平衡的数据上泛化性能会更差;而欠采样则会直接造成major class严重的信息损失,甚至会导致欠拟合的现象发生。
2. 数据合成(synthetic samples):
若不想直接重复采样相同样本,一种解决方法是生成和少样本相似的“新”数据。一个最粗暴的方法是直接对少类样本加随机高斯噪声,做data smoothing[3]。此外,此类方法中比较经典的还有SMOTE[4],其思路简单来讲是对任意选取的一个少类的样本,用K近邻选取其相似的样本,通过对样本的线性插值得到新样本。说道这里不禁想到和mixup[5]很相似,都是在input space做数据插值;当然,对于deep model,也可以在representation上做mixup(manifold-mixup)。基于这个思路,最近也有imbalance的mixup版本出现[6]。
3. 重加权(re-weighting):
顾名思义,重加权是对不同类别(甚至不同样本)分配不同权重,主要体现在重加权不同类别的loss来解决长尾分布问题。注意这里的权重可以是自适应的。此类方法的变种有很多,有最简单的按照类别数目的倒数来做加权[7],按照“有效”样本数加权[8],根据样本数优化分类间距的loss加权[9],等等。对于max margin的这类方法,还可以用bayesian对每个样本做uncertainty估计,来refine决策边界[10]。这类方法目前应该是使用的最广泛的,就不贴更多的reference了,可以看一下这个survey paper[3]。
4. 迁移学习(transfer learning):
这类方法的基本思路是对多类样本和少类样本分别建模,将学到的多类样本的信息/表示/知识迁移给少类别使用。代表性文章有[11][12]。
5. 度量学习(metric learning):
本质上是希望能够学到更好的embedding,对少类附近的boundary/margin更好的建模。有兴趣的同学可以看看[13][14]。这里多说一句,除了采用经典的contrastive/triplet loss的思路,最近火起来的contrastive learning,即做instance-level的discrimination,是否也可以整合到不均衡学习的框架中?
6. 元学习/域自适应(meta learning/domain adaptation):
这部分因为文章较少且更新一点,就合并到一起写,最终的目的还是分别对头部和尾部的数据进行不同处理,可以去自适应的学习如何重加权[15],或是formulate成域自适应问题[16]。
7. 解耦特征和分类器(decoupling representation & classifier):
最近的研究发现将特征学习和分类器学习解耦,把不平衡学习分为两个阶段,在特征学习阶段正常采样,在分类器学习阶段平衡采样,可以带来更好的长尾学习结果[17][18]。
当然还有model ensemble等经典的方法,这里就不再赘述了。最后夹带一点私货,推荐一下我们最新的文章,从和上述方法完全不同的角度切入,验证了半监督学习和自监督学习均能显著提升不平衡长尾数据下的学习表现:
NeurIPS 2020 | 数据类别不平衡/长尾分布?不妨利用半监督或自监督学习(https://zhuanlan.zhihu.com/p/259710601)
个人感觉是两种非常简洁并且通用的框架,能够更容易的结合到更加实际任务中,提升长尾分布下的学习任务。代码也已开源:https://github.com/YyzH
参考
1. Samira Pouyanfar, et al. Dynamic sampling in convolutional neural networks for imbalanced data classification.
2. He, H. and Garcia, E. A. Learning from imbalanced data. TKDE, 2008.
3. P. Branco, L. Torgo, and R. P. Ribeiro. A survey of predictive modeling on imbalanced domains.
4. Chawla, N. V., et al. SMOTE: synthetic minority oversampling technique. JAIR, 2002.
5. mixup: Beyond Empirical Risk Minimization. ICLR 2018.
6. H. Chou et al. Remix: Rebalanced Mixup. 2020.
7. Deep Imbalanced Learning for Face Recognition and Attribute Prediction. TPAMI, 2019.
8. Yin Cui, Menglin Jia, Tsung-Yi Lin, Yang Song, and Serge Belongie. Class-balanced loss based on effective number of samples. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, pages 9268–9277, 2019.
9. Learning Imbalanced Datasets with Label-Distribution-Aware Margin Loss. NeurIPS, 2019.
10. Striking the Right Balance with Uncertainty. CVPR, 2019.
11. Large-scale long-tailed recognition in an open world. CVPR, 2019.
12. Feature transfer learning for face recognition with under-represented data. CVPR, 2019.
13. Range Loss for Deep Face Recognition with Long-Tail. CVPR, 2017.
14. Learning Deep Representation for Imbalanced Classification. CVPR, 2016.
15. Meta-Weight-Net: Learning an Explicit Mapping For Sample Weighting. NeurIPS, 2019.
16. Rethinking Class-Balanced Methods for Long-Tailed Recognition from a Domain Adaptation Perspective. CVPR, 2020.
17. Decoupling representation and classifier for long-tailed recognition. ICLR, 2020.
18. BBN: Bilateral-Branch Network with Cumulative Learning for Long-Tailed Visual Recognition. CVPR, 2020.
每天进步一丢丢
逻辑回归和线性回归
1. 线性回归和逻辑回归都是广义线性回归模型的特例
2. 线性回归只能用于回归问题,逻辑回归用于分类问题(可由二分类推广至多分类)
3. 线性回归无联系函数或不起作用,逻辑回归的联系函数是对数几率函数,属于Sigmoid函数
4. 线性回归使用最小二乘法作为参数估计方法,逻辑回归使用极大似然法作为参数估计方法5. 两者都可以使用梯度下降法
下载1:四件套
在机器学习算法与自然语言处理公众号后台回复“四件套”
即可获取学习TensorFlow,Pytorch,机器学习,深度学习四件套!
下载2:仓库地址共享
在机器学习算法与自然语言处理公众号后台回复“代码”
即可获取195篇NAACL+295篇ACL2019有代码开源的论文。开源地址如下:https://github.com/yizhen20133868/NLP-Conferences-Code
重磅!机器学习算法与自然语言处理交流群已正式成立
群内有大量资源,欢迎大家进群学习!
额外赠送福利资源!邱锡鹏深度学习与神经网络,pytorch官方中文教程,利用Python进行数据分析,机器学习学习笔记,pandas官方文档中文版,effective java(中文版)等20项福利资源
获取方式:进入群后点开群公告即可领取下载链接
注意:请大家添加时修改备注为 [学校/公司 + 姓名 + 方向]
例如 —— 哈工大+张三+对话系统。
号主,微商请自觉绕道。谢谢!
继续阅读
阅读原文