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

CV大白菜 专栏收录该内容
40 篇文章 0 订阅

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

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

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

  1. focal loss(多用于检测中二分类,不是严格意义上的长尾数据)
    这里介绍一下focal loss,他的目的在于通过减少易分类样本的权重,从而使得模型在训练时更专注于难分类的样本,他是在CE loss上做的修改。
    在这里插入图片描述假设一个二分类,样本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

下面来介绍这篇文章
在这里插入图片描述
如果对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,手推了一下
在这里插入图片描述
在这里插入图片描述
En的渐近性质表明,当N较大时,有效样本数与样本数N相同。在这种情况下,我们认为唯一原型数N较大,因此没有数据重叠,每个样本都是唯一的。在另一个极端,如果N = 1,这意味着我们相信存在一个单一的原型,所以这个类中的所有数据都可以通过这个原型通过数据扩充、转换等来表示。
现假设label y ∈ [ 1 , 2 , . . . , C ] y ∈ [1, 2, . . . , C ] y[1,2,...,C] C是类别总数,模型估计每一类的概率为: p = [ p 1 , p 2 , . . . , p C ] T p = [p_1, p_2, . . . , p_C ]^T p=[p1,p2,...,pC]T loss为 L ( p , y ) L(p, y) L(p,y),每一类的有效采样数量为
E n i = ( 1 − β i n i ) / ( 1 − β i ) E_{ni} = (1 − β_i^{ni})/(1 − β_i) Eni=(1βini)/(1βi)
β i = ( N i − 1 ) / N β_i = (N_i − 1)/N βi=(Ni1)/N
N i = N , β i = β = ( N − 1 ) / N N_i = N, β_i = β = (N − 1)/N Ni=N,βi=β=(N1)/N
我们可以用 1 / E n 1/E_n 1/En来作为loss的权重,以CEloss为例:

在这里插入图片描述
n y n_y ny是每一类的采样数量,图3说明了不同的 β , n y β,n_y β,ny下, 1 / E n 1/E_n 1/En的输出
在这里插入图片描述
β = 0:no re-weighting
β → 1:inverse class frequency
下面是作者改造的公式:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
可以看到,根据数据集不同,β是变化的。N可以解释为一个类原始样本的数量。与粗粒度数据集相比,细粒度数据集的N应该更小。例如,一个特定鸟类物种的原始样本的数量应该小于一个通用鸟类类的原始的数量。由于CIFAR-100中的类比CIFAR-10更细粒度,所以CIFAR100的N应该比CIFAR-10小。这就解释了β的影响。
在这里插入图片描述
计算权重的时候,实际是按照每个类别样本数量作为n值,得到每个权重 a i a_i ai后需要归一化然后乘以class number。
在这里插入图片描述

  • 10
    点赞
  • 2
    评论
  • 32
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值