首页 > 其他分享 >[ICML2022]Open-Sampling Exploring Out-of-Distribution Data for Re-balancing Long-tailed Datasets

[ICML2022]Open-Sampling Exploring Out-of-Distribution Data for Re-balancing Long-tailed Datasets

时间:2024-06-07 17:34:00浏览次数:15  
标签:Exploring boldsymbol Datasets 开集 标签 样本 widetilde Data Gamma

引入开集样本训练模型有点像dropout,“破坏”某些模型参数防止尾部类的过拟合

Motivation

长尾学习中的训练数据集分布不平衡的问题,解决方法之一是重采样。重采样主要对于尾部类重复采用,但这种做法往往会导致尾部类的过拟合。

为了缓解过拟合[2](Rethinking the value of labels for improving class-imbalanced learning)引入了无标签的闭集类样本(闭集类指数据的label属于训练集label),再用半监督的方式对于无标签附加伪标签。但还是需要较多成本收集闭集样本。

这篇论文作者受此启发,希望引入开集样本平衡长尾数据集。作者先基于一个理论:均匀得为开集样本赋予闭集噪声标签,即开集样本有1/K概率成为j类(K为闭集类种类,j为任意一个闭集类),不会影响分类器。从贝叶斯定理的角度证明如下:

\(P_\mathbf{s}\)表示训练集,样本数为N;\(P_\mathbf{out}\)表示开集数据集,样本数为M,它的标签为均匀分配的噪声标签;\(P_\mathbf{mix}\)为两者混合的数据集。

简单来说,由于\(P_\mathbf{out}\)标签均匀赋予,因此先验\(P_\mathbf{out}(y)\)为常数1/K,最后的预测结果取最大值,常数部分可忽略,因此混合数据集和原来的闭集数据集上的贝叶斯预测结果相同。

Method

开集样本标签的分配

均匀加入开集噪声后的\(P_\mathbf{mix}\)依然是不平衡的,但如果简单的把开集样本label赋予尾部类“9”会导致性能下降。

为了保持开集噪声样本不会降低性能,且平衡长尾数据集,作者提出补偿分布(Complementary Distribution),用于衡量开集样本上各个标签的分布,表示为\(\Gamma\)。引入尽可能少的开集样本的补偿分布称为Minimum Complementary Distribution (MCD),表示为\(\Gamma^m\),其实两者可以当成一回事。

补偿采样率(Complementary Sampling Rate):每个开集样本被赋予标签j的概率:\(\Gamma_j=\frac{\alpha-\beta_j}{K\cdot\alpha-1},\ \beta_j=\frac{n_j}{\sum^K_{i=1}n_i}\),不难看出补偿采样率:

  • \(\sum_{i=1}^K\Gamma_i=1\)
  • \(\lim_{\alpha\to\infty}\Gamma_j=\frac{1}{K}\)

以及定义\(\Gamma=\Gamma^{m}, \alpha=\max(\beta_j)\),此时开集样本不会被赋予j=0类标签。

整体训练伪代码如下,值得注意的是,每一个epoch都会重新赋予开集样本噪声标签。

引入对应的损失函数正则化项

为了防止开集噪声占用太多模型参数,导致无法收敛,特别是M>>N时,提出了正则化项专门处理开集噪声样本:

\[\mathcal{L}_{\mathrm{reg}}=\mathbb{E}_{\widetilde{\boldsymbol{x}}\sim P_{\mathrm{out}}(X)}\left[\omega_{\widetilde{y}}\cdot\ell\left(f(\widetilde{\boldsymbol{x}};\boldsymbol{\theta}),\widetilde{y}\right)\right] \]

\(\omega_{\widetilde{y}}\)为对应类的损失权重\(\omega_{\widetilde{y}}=\Gamma_{\widetilde{y}}\cdot K.\),标签$\widetilde{y}\sim\Gamma $。原来的闭集样本使用自身标签训练,整体的损失函数为:

\[\begin{aligned}\mathcal{L}_{\mathrm{total}}&=\mathbb{E}_{((\boldsymbol{x},y)\thicksim P_\mathrm{s}(X,Y))}\left[\ell\left(f(\boldsymbol{x};\boldsymbol{\theta}),y\right)\right]\\&+\eta\cdot\mathbb{E}_{(\widetilde{\boldsymbol{x}})\thicksim P_{\mathrm{out}}(X)}\left[\omega_{\widetilde{y}}\cdot\ell\left(f(\widetilde{\boldsymbol{x}};\boldsymbol{\theta}),\widetilde{y}\right)\right],\end{aligned} \]

上式可简写,其中\(\mathcal{L}_{\mathrm{imb}}\)可替换为其他基于损失函数的方法:

\[\mathcal{L}_{\mathrm{total}}=\mathcal{L}_{\mathrm{imb}}+\eta\cdot\mathcal{L}_{\mathrm{reg}}. \]

Experiments

open-sampling(作者的方法)和不同的sample策略,以及附加在baseline上的提高的比较:

作者还测试了测试集上的OOD检测性能;超参\(\alpha,\ \eta\)的设置;测试了开集样本数据集的选择对性能表现有影响;开集样本的多样性对性能没有太大影响;用t-sne可视化表征分布,表明引入开集样本能促进表征学习

参考文献

  1. Wei, Hongxin, et al. "Open-sampling: Exploring out-of-distribution data for re-balancing long-tailed datasets." International Conference on Machine Learning. PMLR, 2022.
  2. Yang, Yuzhe, and Zhi Xu. "Rethinking the value of labels for improving class-imbalanced learning." Advances in neural information processing systems 33 (2020): 19290-19301.

标签:Exploring,boldsymbol,Datasets,开集,标签,样本,widetilde,Data,Gamma
From: https://www.cnblogs.com/zh-jp/p/18237592

相关文章

  • 【源码】Spring Data JPA原理解析之事务注册原理
     SpringDataJPA系列1、SpringBoot集成JPA及基本使用2、SpringDataJPACriteria查询、部分字段查询3、SpringDataJPA数据批量插入、批量更新真的用对了吗4、SpringDataJPA的一对一、LazyInitializationException异常、一对多、多对多操作5、SpringDataJPA自定义......
  • MainWindows移动View文件夹和使用Window.DataContext单例绑定需要修改的地方
    项目结构移动文件夹后需要修改的三个地方1、App.xaml2、MainWindow.xaml3、MainWindow.xaml.cs单例绑定需要修改的地方MainWindow.xaml ......
  • Vue的data中对象新增属性后,页面却不渲染(未渲染)
    前提背景:在data中定义了一个数组 usableList:[],给数组中的每个对象添加checked属性(用来查看数据的勾选状态) 问题:勾选后,数组的数据已经改变了,但是未渲染到页面中 问题原因:在于在Vue实例创建时,对象新增的属性并未声明,因此就没有被Vue转换为响应式的属性,自然就不会触发视......
  • 一文搞懂DevOps、DataOps、MLOps、AIOps:所有“Ops”的比较
    引言近年来,“Ops”一词在IT运维领域的使用迅速增加。IT运维正在向自动化过程转变,以改善客户交付。传统的应用程序开发采用DevOps实施持续集成(CI)和持续部署(CD)。但对于数据密集型的机器学习和人工智能(AI)应用,精确的交付和部署过程可能并不适用。本文将定义不同的“Ops”并解释......
  • Pandas碎碎念1 - Dataframe 合并之 join,concat,merge,append
    最近做的几个项目都要经常使用pandas操作excel,中间也遇到了不少坑,简单记录一下吧。套用骁哥的一句话,让自己变得更强!Pandas中有几种常见的合并dataframe的方法,join,concat,merge,append。下面来尝试一下:首先来做一些测试数据data1={'Src':[1,2,3,4],'Mid'......
  • python --数据分析-numpy-pandas-series对象和dataframe对象
    Python作为当下最为流行的编程语言之一,可以独立完成数据分析的各种任务功能强大,在数据分析领域里有海量开源库,并持续更新是当下热点——机器学习/深度学习领域最热门的编程语言除数据分析领域外,在爬虫,Web开发等领域均有应用常用Python数据分析开源库介绍NumPyNumP......
  • wpf datagrid绑定行选中状态
    样式如下<DataGridMargin="0,6,0,0"HeadersVisibility="All"RowHeaderWidth="60"HorizontalScrollBarVisibility="Visible"AutoGenerateColumns="False"ItemsSource="{BindingDispl......
  • Postman 拷贝 curl 不识别 --data-raw
    postman:请求路径:   拷贝出来的curl:curl--location--requestPOST'http://xxxxxxxxxxxxx/xxx/xxx'\--header'Content-Type:application/json'\--data-raw'{"query":{"bool":{"must":[......
  • 心诺安 x TapData:快速搭建云中数仓,助力电商企业实施“以用户为中心的”精细化运营
    使用TapData,化繁为简,摆脱手动搭建、维护数据管道的诸多烦扰,轻量代替OGG、DSG等同步工具,「CDC+流处理+数据集成」组合拳,加速仓内数据流转,帮助企业将真正具有业务价值的数据作用到实处,将“实时数仓”方法论落进现实。TapData持续迭代产品能力,优化用户体验的同时,也在不断探......
  • python 标准库 dataclasses 使用指南
    简单使用dataclasses可以用来快速的定义数据类,并能够简单明了的指明该类所具有的属性和类型,比如,要定义一个名为Person的类,常规的写法如下:classPerson:def__int__(self,id:int,first_name:str,last_name:str,eye_color:str):self.id=idse......