样本不平衡的解决办法

这篇具有很好参考价值的文章主要介绍了样本不平衡的解决办法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

Focal loss是最初由何恺明提出的,最初用于图像领域解决数据不平衡造成的模型性能问题。本文试图从交叉熵损失函数出发,分析数据不平衡问题,focal loss与交叉熵损失函数的对比,给出focal loss有效性的解释。

交叉熵损失函数

L o s s = L ( y , p ^ ) = − y l o g ( p ^ ) − ( 1 − y ) l o g ( 1 − p ^ ) Loss = L(y, \hat{p})=-ylog(\hat{p}) - (1 - y)log(1-\hat{p}) Loss=L(y,p^)=ylog(p^)(1y)log(1p^)
其中, p ^ \hat{p} p^为预测概率,y为真实label,二分类对应0、1。
对二分类中换种写法如下
L c e ( y , p ^ ) = { − l o g ( p ^ ) ,         i f    y = 1 − l o g ( 1 − p ^ ) , i f    y = 0 ( 1 ) L_{ce}(y, \hat{p}) = \left\{\begin{matrix} -log(\hat{p}), \ \ \ \ \ \ \ if \ \ y = 1&\\ -log(1-\hat{p}), if \ \ y = 0 & \end{matrix}\right. (1) Lce(y,p^)={log(p^),       if  y=1log(1p^),if  y=0(1)

样本不均衡问题

对于所有样本,损失函数为
L = 1 N ∑ i = 1 N l ( y i , p ^ i ) L=\frac{1}{N}\sum_{i=1}^{N}l(y_i, \hat{p}_i) L=N1i=1Nl(yi,p^i)
对于二分类问题,损失函数具体化为
L = 1 N ( ∑ y i = 1 m − l o g ( p ^ ) + ∑ y i = 0 n − l o g ( 1 − p ^ ) ) L=\frac{1}{N}(\sum_{y_i=1}^{m}-log(\hat{p}) + \sum_{y_i=0}^{n}-log(1-\hat{p})) L=N1(yi=1mlog(p^)+yi=0nlog(1p^))
其中m为正样本个数,n为负样本个数,N为样本总数,m+n=N。

当样本分布失衡时,在损失函数L的分布也会发生倾斜,如m<<n时,负样本就会在损失函数占据主导地位。由于损失函数的倾斜,模型训练过程中会倾向于样本多的类别,造成模型对少样本类别的性能较差。

平衡交叉熵函数(balanced cross entropy)

基于样本非平衡造成的损失函数倾斜,一个直观的做法就是在损失函数中添加权重因子,提高少数类别在损失函数中的权重,平衡损失函数的分布。如在上述二分类问题中,添加权重参数 α ∈ [ 0 , 1 ] \alpha \in [0, 1] α[0,1] 1 − α 1-\alpha 1α
L = 1 N ( ∑ y i = 1 m − α l o g ( p ^ ) + ∑ y i = 0 n − ( 1 − α ) l o g ( 1 − p ^ ) ) L=\frac{1}{N}(\sum_{y_i=1}^{m}-\alpha log(\hat{p}) + \sum_{y_i=0}^{n}-(1- \alpha)log(1-\hat{p})) L=N1(yi=1mαlog(p^)+yi=0n(1α)log(1p^))
其中 α 1 − α = n m \frac {\alpha}{1- \alpha} = \frac {n}{m} 1αα=mn,即正负样本损失权重的根据正负样本的比例分布进行设置,具体里说,成反比关系。

focal loss

focal loss也是针对样本不均衡问题,从loss角度提供的另外一种解决方法。
focal loss的具体形式为:
L f l = { − ( 1 − p ^ ) γ l o g ( p ^ )    i f   y = 1 − p ^ l o g ( 1 − p ^ )         i f   y = 0   ( 2 ) L_{fl} = \left\{\begin{matrix} -(1-\hat{p})^{\gamma}log(\hat{p}) \ \ if \ y=1 &\\ -\hat{p}log(1-\hat{p}) \ \ \ \ \ \ \ if \ y=0 & \end{matrix}\right. \ (2) Lfl={(1p^)γlog(p^)  if y=1p^log(1p^)       if y=0 (2)
p t = { p ^      i f   y = 1 1 − p ^   o t h e r w i s e p_t = \left\{\begin{matrix} \hat{p} \ \ \ \ if \ y = 1&\\ 1-\hat{p} \ otherwise & \end{matrix}\right. pt={p^    if y=11p^ otherwise
将focal loss表达式(2)统一为一个表达式:
L f l = − ( 1 − p t ) γ l o g ( p t )      ( 3 ) L_fl=-(1-p_t)^{\gamma}log(p_t) \ \ \ \ (3) Lfl=(1pt)γlog(pt)    (3)
同理可将交叉熵表达式(1)统一为一个表达式:
L c e = − l o g ( p t ) L_{ce} = -log(p_t) Lce=log(pt)
p t p_t pt 反映了与ground truth即类别 y y y 的接近程度, p t p_t pt越大说明越接近类别 y y y,即分类越准确。
γ \gamma γ 为可调节因子。

对比表达式(3)和(4), focal loss相比交叉熵多了一个modulating factor即 ( 1 − p t ) γ (1-p_t)^{\gamma} (1pt)γ。对于分类准确的样本 p t → 1 p_t \rightarrow 1 pt1,modulating factor趋近于0。对于分类不准确的样本 1 − p t → 1 1-p_t \rightarrow 1 1pt1,modulating factor趋近于1。即相比交叉熵损失,focal loss对于分类不准确的样本,损失没有改变,对于分类准确的样本,损失会变小。 整体而言,相当于增加了分类不准确样本在损失函数中的权重。

p t p_t pt也反应了分类的难易程度, p t p_t pt 越大,说明分类的置信度越高,代表样本越易分; p t p_t pt 越小,分类的置信度越低,代表样本越难分。因此focal loss相当于增加了难分样本在损失函数的权重,使得损失函数倾向于难分的样本,有助于提高难分样本的准确度。focal loss与交叉熵的对比,可见下图:
样本不平衡的解决办法

focal loss vs balanced cross entropy

focal loss相比balanced cross entropy而言,二者都是试图解决样本不平衡带来的模型训练问题,后者从样本分布角度对损失函数添加权重因子,前者从样本分类难易程度出发,使loss聚焦于难分样本。

focal loss为什么有效

focal loss从样本难易分类角度出发,解决样本非平衡带来的模型训练问题。

相信很多人会在这里有一个疑问,样本难易分类角度怎么能够解决样本非平衡的问题,直觉上来讲样本非平衡造成的问题就是样本数少的类别分类难度较高。因此从样本难易分类角度出发,使得loss聚焦于难分样本,解决了样本少的类别分类准确率不高的问题,当然难分样本不限于样本少的类别,也就是focal loss不仅仅解决了样本非平衡的问题,同样有助于模型的整体性能提高。

要想使模型训练过程中聚焦难分类样本,仅仅使得Loss倾向于难分类样本还不够,因为训练过程中模型参数更新取决于Loss的梯度。
w = w − α ∂ L ∂ w    ( 5 ) w = w - \alpha \frac{ \partial {L}}{ \partial {w}} \ \ (5) w=wαwL  (5)
如果Loss中难分类样本权重较高,但是难分类样本的Loss的梯度为0,难分类样本不会影响模型学习过程。

对于梯度问题,在focal loss的文章中,也给出了答案。如下图所示为focal loss的梯度示意图。其中 x t = y x x_t = yx xt=yx ,其中 y ∈ { 0 , 1 } y \in {\{0, 1}\} y{0,1} 为类别, p t = σ ( x t ) p_t=\sigma(x_t) pt=σ(xt) ,对于易分样本, x t > 0 x_t > 0 xt>0,即 p t > 0.5 p_t>0.5 pt>0.5 。由图中可以看出,对于focal loss而言,在 x t > 0 x_t>0 xt>0 时,导数很小,趋近于0。因此对于focal loss,导数中易是难分类样本占主导,因此学习过程更加聚焦正在难分类样本。
样本不平衡的解决办法

一点小思考

难分类样本与易分类样本其实是一个动态概念,也就是说 p t p_t pt 会随着训练过程而变化。原先易分类样本即 p t p_t pt 大的样本,可能随着训练过程变化为难训练样本即 p t p_t pt 小的样本。

上面讲到,由于Loss梯度中,难训练样本起主导作用,即参数的变化主要是朝着优化难训练样本的方向改变。当参数变化后,可能会使原先易训练的样本 p t p_t pt 发生变化,即可能变为难训练样本。当这种情况发生时,可能会造成模型收敛速度慢,正如苏剑林在他的文章中提到的那样。

为了防止难易样本的频繁变化,应当选取小的学习率。防止学习率过大,造成 w w w 变化较大从而引起 p t p_t pt 的巨大变化,造成难易样本的改变。文章来源地址https://www.toymoban.com/news/detail-473902.html

到了这里,关于样本不平衡的解决办法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 机器学习案例:运营商客户流失的数据分析 #数据去重#数据分组整合#缺失值处理#相关性分析#样本平衡#决策树、随机森林、逻辑回归

    前提: 随着业务快速发展、电信市场的竞争愈演愈烈。如何最大程度地挽留在网用户、吸取新客户,是电信企业最 关注的问题之一。 客户流失 会给企业带来一系列损失,故在发展用户每月增加的同时,如何挽留和争取更多 的用户,也是一项非常重要的工作。 能否利用大数

    2024年02月08日
    浏览(51)
  • PYQT 自带的 Pyrcc 系统的使用,PyInstaller对PYQT程序进行打包,不能打包背景图片,图标等解决办法

    使用 PyInstaller 对程序进行打包,不能打包背景图片。打包后的软件可以正常运行,但涉及到图片相关的资源(如背景图片,头像)全部不显示。 当使用Python PyInstaller对程序进行打包时,如果程序中涉及到背景图片,会出现无法打包背景图片的问题。这是由于PyInstaller默认只会

    2024年02月04日
    浏览(47)
  • 字符设备驱动开发(最初方式)

    字符设备是Linux中最基本的一类设备驱动,我们常见的点灯、按键、IIC、SPI、LCD等等都是通过字符设备驱动框架来进行开发的。字符设备驱动是通过一个一个字节流的方式来进行读写操作设备,读写数据是分先后顺序的。 通过空间划分的方式来说,Linux系统中分为用户空间和

    2024年02月17日
    浏览(38)
  • 【论文阅读】Generalized Focal Loss的解读。交叉熵、Focal Loss、Quality Focal Loss、Distribution Focal Loss

    论文链接:https://arxiv.org/pdf/2006.04388.pdf 已有方法中,单阶段密集检测器一般分为三个输出内容 : 检测框质量估计confidence: channel维度上占 1; 训练时正样本标签为当前grid_ceil对应的标签框和预测框的iou score、或者centerness score,负样本为0。 检测框box: channel维度上占4;分别

    2024年01月18日
    浏览(37)
  • arduino的包含库文件定义配合vsCode查看最初定义

    一个工程例子说明情况 这个示例工程是一个再oled显示屏上显示的arduino程序。font.h中包含的是字符和图片的 取模数组 ,也就是很多点亮led阵列的数组 下面的就是16*8点阵的字模矩阵,矩阵的值的来历可以参考资料 在arduino ide中 下图中有问题,font.h中包含的是avr/pgmspace.h,但调

    2024年02月09日
    浏览(41)
  • Elasticsearch的分片平衡问题解决

    2023年11月份在某电商系统生产中的Elasticsearch(以下简称ES)集群突然,出现了大量慢查询告警,导致请求堆积。经过几天的排查发现了ES节点主分片和副本分片分布存在不均匀的问题。当然了暂未有定论是由于分片不均衡导致了性能下降,但是主分片和副本分片分布不均匀确

    2024年02月03日
    浏览(39)
  • quality focal loss & distribute focal loss 解说(附代码)

    参见generalized focal loss paper 其中包含有 Quality Focal Loss 和 Distribution Focal Loss 。 dense detectors逐渐引领了目标检测领域的潮流。 目标框的表达方法,localization quality估计方法的改进引起了目标检测的逐渐进步。 其中,目标框表达(坐标或(l,r,t,b))目前被建模为一个简单的Dirac de

    2023年04月23日
    浏览(67)
  • 【学习笔记】元学习如何解决计算机视觉少样本学习的问题?

    目录 1 计算机视觉少样本学习 2 元学习 3 寻找最优初始参数值方法:MAML 3.1 算法步骤 3.2 代码:使用MAML 和 FO-MAML、任务增强完成Few-shot Classification 4 距离度量方法:Siamese Network,ProtoNet,RN 4.1 孪生网络(Siamese Network) 算法步骤 Siamese Network代码 4.2 原型网络(Prototypical Networks) 算

    2024年02月09日
    浏览(42)
  • 【Focal Net】NeuralPS2022 论文+代码解读 Focal Modulation Networks

    论文链接- arxiv 官方代码- github 官方博客- microsoft 该论文提出了一个Focal Modulaiton network,将自注意力机制替换成focal modulation(聚焦调制)。这种机制包括3个组件:1)通过depth-wise Conv提取分级的上下文信息,同时编码短期和长期依赖。2)门控聚合,基于每个token的内容选择性

    2024年02月07日
    浏览(72)
  • quality focal loss & distribute focal loss 详解(paper, 代码)

    参见generalized focal loss paper 其中包含有 Quality Focal Loss 和 Distribution Focal Loss 。 dense detectors逐渐引领了目标检测领域的潮流。 目标框的表达方法,localization quality估计方法的改进引起了目标检测的逐渐进步。 其中,目标框表达(坐标或(l,r,t,b))目前被建模为一个简单的Dirac de

    2024年02月06日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包