如果解决长尾数据(样本不均衡)

最近突然高产,苦逼的秋招开始了,哭哭
有几种已经常用的方法:

  1. 过采样和重采样
  2. 每个Batch对每类样本设置比例,保证在一个Batch里是相对均衡的

以上这些的缺点很明显:对于大样本采样过少,会导致某张图片只训练了一次,这样使得大样本训练不好,导致整体的正确率都会下降,并且小样本会过拟合。

  1. focal loss(多用于检测中二分类,不是严格意义上的长尾数据)
    这里介绍一下focal loss,他的目的在于通过减少易分类样本的权重,从而使得模型在训练时更专注于难分类的样本,他是在CE loss上做的修改。
    如果解决长尾数据(样本不均衡)_第1张图片假设一个二分类,样本x1属于类别1的pt=0.9,样本x2属于类别1的pt=0.6,显然前者更可能是类别1,假设γ=1,那么对于pt=0.9,调制系数则为0.1;对于pt=0.6,调制系数则为0.4,这个调制系数就是这个样本对loss的贡献程度,也就是权重,所以难分的样本(pt=0.6)的权重更大。Figure1中γ=0的蓝色曲线就是标准的交叉熵损失。
    在这里插入图片描述
    一般而言当 γ γ γ增加的时候,a需要减小一点(实验中 γ γ γ=2,a=0.25的效果最好)
    但是这里有坑一定要多注意: focal loss多用于检测,在正样本和负样本比例1:1000的情况下比较有效,对于一般的样本不均衡其实效果不大,对于 easy sample dominant有作用,这两个问题并不等价。用这个loss预测出得概率都会比较低一点。若 γ γ γ过大时,可以理解其实对小样本过于over fit,这样效果也不好,所以这是为什么在机器学习里,对于小样本尽可能使用插值法构建新样本,也不会用小样本反复训练。
  2. loss reweight 一篇新出的CVPR,目前实验表示有效:Class-Balanced Loss Based on Effective Number of Samples

下面来介绍这篇文章
如果解决长尾数据(样本不均衡)_第2张图片
如果对loss不加约束的话,大样本数据占主导,影响小样本,如果加约束的话,则会大大压缩大样本数据的训练,所以要找到一个中和的约束方法。这个模型想要可以区别major class和minor class,他的操作是在loss里面添加了一个和有效样本数量成反比的类平衡加权项。论文有两点贡献:

  1. 提供一种可以学习有效样本数量的方案来设计模型
  2. 提供了如何在sigmoid CE loss,softmax CE loss,focal loss上进行修改,并且通过实验验证提升

他引申出每个类都存在一个容量为 N N N的特征空间 S S S,那么每一群数量为 n n n的样例都存在一个有效样本数量 E n E_n En,手推了一下
如果解决长尾数据(样本不均衡)_第3张图片

你可能感兴趣的:(CV大白菜,解决长尾数据)