Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >不平衡之钥: 重加权法知几何

不平衡之钥: 重加权法知几何

作者头像
枫桦
发布于 2022-08-02 06:22:04
发布于 2022-08-02 06:22:04
9710
举报
文章被收录于专栏:AI算法札记AI算法札记

《不平衡问题: 深度神经网络训练之殇》一文中,笔者已对缓解不平衡问题的方法进行梳理。限于篇幅原因,介绍比较笼统。在《不平衡之钥: 重采样法何其多》一文中,梳理了缓解不平衡问题的各种重采样方法。

重加权,也称为代价敏感学习,通过调整训练期间不同类别的损失值来对类别进行重新平衡,近期的研究提出了各种代价敏感学习方法来处理类别不平衡问题,包括类别级重加权和类别级re-margining,大家熟知的Focal loss、动态权重等都属于重加权方法。

1. 类别级重加权

1.1 Weighted Softmax Loss

最直觉的方法是直接使用训练样本的标签频率对损失进行重新加权,即加权softmax损失。基于样本影响[3]或模型预测和平衡参考分布之间的分布对齐[4],通过调整标签频率对损失权重的影响,可以进一步改善这种损失。除了损失值重新加权外,平衡softmax[5]提出在训练期间使用标签频率来调整模型预测,以便通过先验知识来缓解类别不平衡的偏差。随后,LADE[6]引入了标签分布分离损失,将学习的模型从不平衡训练分布中分离出来,然后在测试标签频率可用的情况下,模型可以适应任意的测试类别分布。

1.2 Class Balance Loss

类别平衡损失 (CB)[7]没有使用标签频率,而是引入了有效数的概念来近似不同类的预期样本数,有效数是训练样本数的指数函数。遵循这一概念,类别平衡损失强制使用类别平衡重加权项来解决类别不平衡问题,该加权项与类别的有效数成反比。

1.3 Focal Loss

Focal loss [8] 探索了重加权的类别预测难度。具体来说,focal loss的灵感来自于观察到类别不平衡通常会增加尾部类的预测难度,其预测概率会低于头部类的预测概率。因此,Focal loss 使用预测概率来反向对类别重加权,以便它可以为较难的尾部类分配更高的权重,而为更容易的头部类分配较低的权重。

1.4 Meta-Weight-Net

除了使用预定义的加权损失函数,也可以从数据中学习类别权重。Meta-Weight-Net [9] 在平衡的验证集指导下,更新了由一层 MLP 近似的权重函数以拟合不平衡分布,在均匀分布的测试集中获得良好的性能。

1.5 DisAlign

分布对齐 (DisAlign)[10]提出了一种自适应的校准函数来校准模型分类器,校准函数通过最小化调整的预测分布和给定的平衡参考分布之间的KL散度自适应地学习。

1.6 Distribution-balanced loss

不平衡学习中的另一个问题是负梯度过度抑制,也就是说,在 softmax 或 sigmoid 交叉熵中,一个类的每个正样本都可以被视为其他类的负样本,从而导致尾部类接收到更多的梯度抑制。为了解决这个问题,分布平衡损失[11]通过一种新的negative-tolerant regularization来缓解梯度过度抑制。同时,它还评估每个类的预期采样频率和实际采样频率之间的差距,然后使用这两个频率的商来重新计算不同类别的加权损失值。

1.7 Equalization loss

当尾部类样本作为大量头部类样本的负样本对时,Equalization loss[12]直接降低尾类样本的损失值权重。Equalization loss v2 [13] 通过将多类别检测问题建模为一组独立的子任务,其中每个子任务专注于一个类,进一步扩展了Equalization loss。更具体地说,Equalization loss v2 引入了一种新颖的梯度引导重加权机制,以动态地提高正梯度的权重并降低负梯度的权重,以便在每个子任务上进行模型训练。

1.8 Seesaw loss

Seesaw loss [14] 使用两个重加权因子 (即减缓因子和补偿因子)重新平衡每个类别的正负梯度。为了解决梯度过度抑制问题,减缓因子根据不同类之间累积样本数的动态比率来减轻训练期间对尾类的惩罚。同时,如果观察到假阳性样本,则补偿因子会提高对相应类别的惩罚权重,以提高模型区分度。

1.9 ACSL

自适应类抑制损失 (Adaptive class suppression loss,ACSL) [15] 使用输出置信度来决定是否抑制负标签的梯度。具体来说,如果负标签的预测概率大于预定义的阈值,则应该混淆模型,因此将此类的权重设置为 1,以提高模型识别能力;否则,权重设置为 0 以避免负过度抑制。

2. 类别级Re-margining

类别级re-margining通过调整不同类别学习到的特征和模型分类器之间的最小距离来处理类别不平衡。

2.1 LDAM

label-distribution-aware margin (LDAM)[16]使用基于标签频率的类别依赖的边距,并鼓励尾部类别具有更大的边距,扩展了现有的soft margin loss。然而,仅仅使用LDAM损失在经验上不足以处理类别不平衡。因此,LDAM进一步引入了deferred re-balancing optimization schedule,在学习LDAM损失一段时间后,通过类别平衡的方式重加权LDAM损失来重新平衡类别。

2.2 Bayesian estimate

贝叶斯估计[17]发现类别预测不确定性与训练标签频率成反比,即尾部类更不确定。受此启发,贝叶斯估计提出使用估计的类级不确定性来重新调整损失的边距,使得具有较高类别不确定性的尾类将遭受更高的损失值,从而在特征和分类器之间具有更大的边距。

2.3 Domain balancing

领域平衡[18]研究了一个不平衡域问题,其中频繁出现少量域(包含多个类),而其他域较少。为了解决这个问题,这项工作引入了一种基于类间特征紧凑性的新域频率指标,并使用该指标重新划分尾域的特征空间。

2.4 LOCE

LOCE [19] 使用平均分类预测分数来监控不同类的学习状态,并将其应用于指导类级边距调整以提高尾部类的性能。

2.5 PML

渐进式边距损失 (Progressive margin loss, PML)[20] 使用两个边距项调整不平衡学习的分类边距:顺序边距 (ordinal margin)和变分边距 (variational margin)。顺序边距旨在提取判别特征并保持年龄顺序关系,变分边距试图逐步抑制头部类以处理不平衡训练样本中的类别不平衡问题。

2.6 RoBal

RoBal [21] 认为,鼓励尾部类更大边距的现有re-margining方法可能会降低头部类的特征学习。因此,RoBal 强制执行一个额外的边距项来扩大头部类的特征边距。

3. 参考文献

[1] 不平衡问题: 深度神经网络训练之殇

[2] 不平衡之钥: 重采样法何其多

[3] S. Park, J. Lim, Y. Jeon, and J. Y. Choi, “Influence-balanced loss for imbalanced visual classification,” in International Conference on Computer Vision, 2021.

[4] S. Zhang, Z. Li, S. Yan, X. He, and J. Sun, “Distribution alignment: A unified framework for long-tail visual recognition,” in Computer Vision and Pattern Recognition, 2021, pp. 2361–2370.

[5] R. Jiawei, C. Yu, X. Ma, H. Zhao, S. Yi et al., “Balanced meta-softmax for long-tailed visual recognition,” in Advances in Neural Information Processing Systems, 2020.

[6] Y. Hong, S. Han, K. Choi, S. Seo, B. Kim, and B. Chang, “Disentangling label distribution for long-tailed visual recognition,” in Computer Vision and Pattern Recognition, 2021.

[7] Y. Cui, M. Jia, T.-Y. Lin, Y. Song, and S. Belongie, “Class-balanced loss based on effective number of samples,” in Computer Vision and Pattern Recognition, 2019, pp. 9268–9277.

[8] T.-Y. Lin, P. Goyal, R. Girshick, K. He, and P. Doll ́ar, “Focal loss for dense object detection,” in International Conference on Computer Vision, 2017, pp. 2980–2988.

[9] J. Shu, Q. Xie, L. Yi, Q. Zhao, S. Zhou, Z. Xu, and D. Meng, “Meta-weight-net: Learning an explicit mapping for sample weighting,” Advances in Neural Information Processing Systems, 2019.

[10] S. Zhang, Z. Li, S. Yan, X. He, and J. Sun, “Distribution alignment: A unified framework for long-tail visual recognition,” in Computer Vision and Pattern Recognition, 2021, pp. 2361–2370.

[11] T. Wu, Q. Huang, Z. Liu, Y. Wang, and D. Lin, “Distribution-balanced loss for multi-label classification in long-tailed datasets,” in European Conference on Computer Vision, 2020, pp. 162–178.

[12] J. Tan, C. Wang, B. Li, Q. Li, W. Ouyang, C. Yin, and J. Yan, “Equalization loss for long-tailed object recognition,” in Computer Vision and Pattern Recognition, 2020, pp. 11 662–11 671.

[13] J. Tan, X. Lu, G. Zhang, C. Yin, and Q. Li, “Equalization loss v2: A new gradient balance approach for long-tailed object detection,” in Computer Vision and Pattern Recognition, 2021, pp. 1685–1694.

[14] J. Wang, W. Zhang, Y. Zang, Y. Cao, J. Pang, T. Gong, K. Chen, Z. Liu, C. C. Loy, and D. Lin, “Seesaw loss for long-tailed instance segmentation,” in Computer Vision and Pattern Recognition, 2021.

[15] T. Wang, Y. Zhu, C. Zhao, W. Zeng, J. Wang, and M. Tang, “Adaptive class suppression loss for long-tail object detection,” in Computer Vision and Pattern Recognition, 2021, pp. 3103–3112.

[16] K. Cao, C. Wei, A. Gaidon, N. Arechiga, and T. Ma, “Learning imbalanced datasets with label-distribution-aware margin loss,” in Advances in Neural Information Processing Systems, 2019.

[17] S. Khan, M. Hayat, S. W. Zamir, J. Shen, and L. Shao, “Striking the right balance with uncertainty,” in Computer Vision and Pattern Recognition, 2019, pp. 103–112.

[18] D. Cao, X. Zhu, X. Huang, J. Guo, and Z. Lei, “Domain balancing: Face recognition on long-tailed domains,” in Computer Vision and Pattern Recognition, 2020, pp. 5671–5679.

[19] C. Feng, Y. Zhong, and W. Huang, “Exploring classification equilibrium in long-tailed object detection,” in International Conference on Computer Vision, 2021.

[20] Z. Deng, H. Liu, Y. Wang, C. Wang, Z. Yu, and X. Sun, “Pml: Progressive margin loss for long-tailed age classification,” in Computer Vision and Pattern Recognition, 2021, pp. 10 503–10 512.

[21] T. Wu, Z. Liu, Q. Huang, Y. Wang, and D. Lin, “Adversarial robustness under long-tailed distribution,” in Computer Vision and Pattern Recognition, 2021, pp. 8659–8668.

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI算法札记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ubuntu搭建nodejs生产环境——快速部署手册
为什么不用CentOS而用Ubuntu作为生产环境的运行平台?这个我也比较好奇,公司订的只能沿用传统,从使用成本的角度来说,此举也是值得肯定的。 测试环境 腾讯云 Ubuntu 16.04 阿里云 Ubuntu 16.04 开启Root账号ssh登录 1.修改配置文件 使用命令:sudo vi /etc/ssh/sshd_config打开文件,找到配置: LoginGraceTime 120 PermitRootLogin prohibit-password 修改成: LoginGraceTi
磊哥
2018/07/04
1.8K0
如何玩转Sharelist – 学金融的文史哲小生
当显示npm和pm2命令找不到时,进入sharelist文件夹,打开install.sh文件:
哈萨克东方红
2022/12/29
1.1K0
如何玩转Sharelist – 学金融的文史哲小生
[最全操作指南] 在线六个项目全部迁移Linux
开源也两年了,没想到自己在宣传.NetCore全栈的时候,也慢慢的做出了几个产品,毕竟也是一行一行的敲出来的,也是一天一夜的改出来的,希望每个人都能在自己学习中培养自己的踏实,稳健,成熟的品性。
老张的哲学
2022/04/11
1.2K0
[最全操作指南] 在线六个项目全部迁移Linux
使用pm2部署node生产环境
一、PM2是什么 是可以用于生产环境的Nodejs的进程管理工具,并且它内置一个负载均衡。它不仅可以保证服务不会中断一直在线,并且提供0秒reload功能,还有其他一系列进程管理、监控功能。并且使用起来非常简单。 嗯嗯,最好的用处就是监控我们的生产环境下的node程序运行状态,让它给我们日以继日的处于工作状态。 pm2官方文档 ---- 二、为森么要使用pm2 原始社会的我们开发node服务端程序一般过程: 编写好node程序app.js,运行node app.js;或者写入script使用npm运行
keyWords
2019/03/20
4.1K0
PM2 进程管理快速入门
PM2 是一个守护进程管理器,可帮助您管理和保持应用程序在线。开始使用 PM2 很简单,它以简单直观的 CLI 形式提供,可通过 NPM 安装。
buzzfrog
2023/09/26
5250
进程管理:通过PM2来管理Node、PHP CLI等应用的运行
PM2.js是一个Node.js应用程序的进程管理器,可以帮助开发人员在生产环境中管理和监控Node.js应用程序或其他程序的进程。它可以自动重启应用程序,监控应用程序的资源使用情况,以及提供实时日志记录和错误处理等功能。此外,PM2.js还可以通过集成的API和CLI工具来管理和监控多个Node.js应用程序。
房东的狗丶
2023/04/06
1.7K0
Node应用的进程管理器: PM2详细介绍
这里的PM2,不是PM2.5,跟空气没有半毛钱的关系。它是NodeJs应用的进程管理器,可以利用它来简化很多Node应用管理的繁琐任务,如性能监控、自动重启、负载均衡等。
Javanx
2019/09/04
3.4K0
Node应用的进程管理器: PM2详细介绍
Pm2作为进程辅助管理器的简单使用
在控制台输入sudo npm install pm2@latest -g或sudo yarn global add pm2即可完成 Pm2 的安装。
用户1316967
2022/01/18
6400
Pm2作为进程辅助管理器的简单使用
pm2 常用命令汇总
启动 pm2 start app.js 我们可以启动各种应用比如:bash命令,script等等。 pm2 start "npm run start" pm2 start "ls -a" pm2 start app.py 显示日志 可以使用--attach参数在启动应用时显示日志 pm2 start app.js --attach 传递参数 所有跟在--后面的内容都将作为参数传给启动的应用 pm2 start app.js -- arg1 arg2 ... 配置文件 当需要管理多个应用时,可以通
terrence386
2022/07/15
5270
pm2 常用命令汇总
pm2在node中的应用
该文章介绍了pm2在node中的应用,包括其主要特性、安装使用方法和运行进程的不同方式。文章还讲解了如何通过pm2来管理node应用,包括启动、停止、监控和日志查看等功能。
用户1141560
2017/12/26
2.1K0
pm2在node中的应用
PM2实用入门指南
简介 PM2是node进程管理工具,可以利用它来简化很多node应用管理的繁琐任务,如性能监控、自动重启、负载均衡等,而且使用非常简单。 下面就对PM2进行入门性的介绍,基本涵盖了PM2的常用的功能和
IMWeb前端团队
2018/01/08
1.7K0
PM2实用入门指南
使用pm2管理go应用进程
pm2是一个进程管理工具,可以用它来管理你的node进程,并查看node进程的状态,当然也支持性能监控,进程守护,负载均衡等功能,在前端和nodejs的世界中用的很多。
杨永贞
2020/08/11
3.9K0
使用pm2管理go应用进程
Jenkins 远程启动nodejs失败,使用pm2守护Nodejs
大致意思是,如果远程执行的命令,不是守护进程。即使加了nohup,关闭ssh连接后,当前用户启动的进程会全部终止。
py3study
2020/03/07
2.6K0
进程管理器pm2使用方法
我需要在云服务器上跑我的python脚本,为了防止终端关了之后脚本停止,使用了pm2作为进程管理,守护进程不被kill。 pm2 是一个带有负载均衡功能的进程管理器.
Crayon鑫
2023/10/10
3760
进程管理器pm2使用方法
PM2 - 进程管理工具
PM2 是具有内置负载均衡器的 Node.js 应用程序的生产过程管理器。它允许您使应用程序永远保持活动状态,在不停机的情况下重新加载它们,并促进常见的系统管理任务。
崔哥
2023/10/23
4110
pm2进程监控
sofu456
2024/05/25
1360
使用 pm2 守护你的 .NET Core 应用程序
守护进程,英文名:“daemon",也有守护神的意思。守护进程是一个在后台运行并且不受任何终端控制的进程,不会随着会话结束而退出。诸如 mysql、apache 等这类程序默认就提供了守护进程或者以守护进程的方式工作,我们熟悉的 “mysqld”、"httpd" 等其中的 d 就是 daemon 的意思。比如我们在 Linux 系统上以命令 dotnet xxx.dll 运行 .NET Core 应用程序时,如果我们结束会话,那么我们的程序将会结束运行。其原因是 Linux 系统中有一个信号机制,进程可以通过一系列信号进行通信,当用户结束会话时,会向当前会话的子进程发送一个 HUP 信号,一般情况下当前会话的子进程收到HUP信号以后就会退出自己。 这时我们就需要一个守护进程来管控我们的 .NET Core 应用程序进程。
晓晨
2018/10/12
1.4K0
使用 pm2 守护你的 .NET Core 应用程序
PM2 进程管理工具使用总结
对于后台进程的管理,常用的工具是crontab,可用于两种场景:定时任务和常驻脚本。关于常驻脚本,今天介绍一款更好用的工具:pm2,基于nodejs开发的进程管理器,适用于后台常驻脚本管理,同时对node网络应用有自建负载均衡功能。官方的说法,pm2 是一个带有负载均衡功能的Node应用的进程管理器,个人认为,并不准确,因为pm2支持多种语言,只是对于除node之外的其他进程无负载均衡的能力。
波罗学
2019/07/31
2.8K0
为什么 Node 应用要用 PM2 来跑?
线上的 node 应用不只是跑起来就行了,还要做自动重启、日志、多进程、监控这些事情。
神说要有光zxg
2023/08/29
4880
为什么 Node 应用要用 PM2 来跑?
PM2实时查看Node.js项目的输出日志!
一、问题简介 只要通过PM2 启动的Node.js项目,可以非常方便的查看其输出日志。 二、解决方案 1、常用命令 # 显示所有应用的实时日志 pm2 logs # 显示 api 应用的日志 pm2 logs api # json格式显示所有应用的日志 pm2 logs --json # 显示1000行 big-api 的日志 pm2 logs big-api --lines 1000 # 用仪表盘显示所有应用 pm2 monit 2、让输出日志加上时间 pm2 start a
Learn-anything.cn
2021/11/26
3.7K0
相关推荐
ubuntu搭建nodejs生产环境——快速部署手册
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档