PLC:自动纠正数据集噪声,来洗洗数据集吧 | ICLR 2021 Spotlight
论文提出了更通用的特征相关噪声类别PMD,基于此类噪声构建了数据校准策略PLC来帮助模型更好地收敛,在生成数据集和真实数据集上的实验证明了其算法的有效性。论文提出的方案理论证明完备,应用起来十分简单,值得尝试
来源:晓飞的算法工程笔记 公众号
论文: Learning with Feature-Dependent Label Noise: A Progressive Approach
Introduction
在大型数据集中,由于标签的歧义以及标注者的大意,错误的标注是不可避免的。由于噪声对有监督训练的影响很大,所以在实际应用中研究如何处理错误的标注是至关重要的。
一些经典方法对噪声进行独立同分布(i.i.d.)的假设,认为噪声与数据特征无关,有其自身的规律。这些方法要么直接预测噪声分布来分辨噪声,要么引入额外的正则项/损失项来分辨噪声。而另外一些方法则证明,常用的损失项本身就能够抵抗这些独立同分布的噪声,不需要关心。
这些方法虽然有理论保证,但实际中表现都不佳,因为独立同分布的噪声假设是不真实的。这意味着,数据集的噪声是多样的,而且与数据特征相关,比如外表模糊的猫有可能被误认为狗。在光线不足或遮挡的情况下,图片失去了重要的视觉分辨线索,很容易被误标注。为了应对这个现实中的挑战,应对噪声的处理方法不仅需要有效,其通用性也是十分必要的。
SOTA方法多数采用数据重新校准(data-recalibrating)的策略来适应各种各样的数据噪声,该策略逐步确认可信的数据或逐步校正标签,然后使用这些数据进行训练。随着数据集更加准确,模型的准确率也会逐渐提高,最终收敛到高准确率。该策略很好地利用了深度网络的学习能力,在实践中获得不错的效果。
但目前这些策略的内在机制都没有完备的理论证明,解释为何这些策略可以使得模型收敛到理想的状态。这意味着这些策略都是case by case的,需要很小心地调整超参数,难以通用。
基于上面的分析,论文定义了更为常见的PMD噪声族(Polynomial Margin Dimishing Noise Family),包含除了显而易见的错误之外的任意类型噪声,更符合现实场景。基于PMD噪声族,论文提出了有理论保证的数据校准方法,根据噪声分类器的置信度逐步校准数据的标签。流程如图1所示,先从高置信度的数据开始,使用噪声分类器的预测结果校准这些数据,然后使用校准后的数据提升模型,交替进行标签校准和模型提升直到模型收敛。
Method
先定义一些数学符号,这里以二分类任务为例:
- 定义特征空间\(\mathcal{X}\),数据\((x,y)\)均从分布\(D=\mathcal{X}\times\{0,1\}\)采样而来。
- 定义\(\eta(x)=\mathbb{P}[y=1|x]\)为后验概率,值越大代表正标签越明显,而值越小则代表负标签越明显。
- 定义噪声函数\(\tau_{0,1}(x)=\mathbb{P}=[\tilde{y}=1 | y=0, x]\)和\(\tau_{1,0}(x)=\mathbb{P}=[\tilde{y}=0 | y=1, x]\),其中\(\tilde{y}\)为错误标签。假设数据\(x\)的真实标签为\(y=0\),则有\(\tau_{0,1}(x)\)概率错误地标注为1。
- 定义\(\tilde{\eta}(x)=\mathbb{P}[\tilde{y}=1|x]\)为噪声后验概率。
- 定义\(\eta^{*}(x)=\mathbb{I}_{\eta(x)\ge\frac{1}{2}}\)为贝叶斯最优分类器,当A为真时\(\mathbb{I}_A=1\),否则为0。
- 定义\(f(x):\mathcal{X}\to [0,1]\)为分类器打分函数,一般是网络的softmax输出。
Poly-Margin Diminishing Noise
PMD噪声只将噪声函数\(\tau\)约束在特定的\(\eta(x)\)中间区域,区域内的噪声函数\(\tau\)的值多大都无所谓。这样的形式不仅能够覆盖特征无关的场景,也能泛化到之前的一些噪声研究的特定场景中。
PMD噪声的定义如上所示,\(t_0\)可认为是左右两边的间隔(margin)。PMD条件只要求\(\tau\)的上界是多项式的并且在贝叶斯分类器置信的区域单调递减,而\(\tau_{0,1}(x)\)和\(\tau_{1,0}(x)\)在\(\{ x:|\eta(x)-\frac{1}{2}| < t_0 \}\)区域内可为任意值。
前面的PMD噪声描述可能比较抽象,论文提供了可视化图片来帮助大家理解:
- 图a是贝叶斯最优分类器的结果,即正确标签。从下面的\(\eta(x)\)曲线可以看出,两边数据的二分类概率差别较大,是容易区分的。而中间的数据的二分类概率比较接近,有较大的误标注的可能,也是我们需要重点关注的。
- 图b是均匀噪声,该噪声认为误分概率与特征无关,每个数据点都有相同的概率被误分。上图中黑色的是被认为是正确的数据,红色则是被认为属于噪声的数据,可以看到,经过均匀噪声处理后,数据分布比较乱。
- 图c是BCN噪声,噪声值随着\(\eta^{*}(x)\)的置信而下降。从上图可以看出,处理后的噪声数据基本都落在中间区域,也就是容易误识别的地方。但由于BCN噪声的边界与\(\eta^{*}(x)\)高度相关,而实践中一般要用模型的输出来近似\(\eta^{*}(x)\),在噪声程度较大的场景显然会有较大的出入。
- 图d是PMD噪声,约束噪声在\(\eta^{*}(x)\)的中间区域,区域内的噪声值随意。这样做的好处在于,可以通过调控区域大小来应对不同的噪声程度,只要不是显而易见的错误都可以(即在\(\eta\)较高和较低的地方标注错误)适用。从上图可以看出,处理后的干净数据基本都分布在两边,也就是比较置信的地方。
The Progressive Correction Algorithm
基于PMD噪声,论文提出逐步训练和纠正标签的PLC(Progressive Label Correction)算法。该算法首先使用原数据集进行warm-up阶段的训练,得到一个尚未拟合噪声的初步网络。接着,使用warm-up得到的初步网络对高置信度的数据进行标签的纠正,论文认为(也理论证明了)噪声分类器\(f\)的高置信度预测能与贝叶斯最优分类器\(\eta^{*}\)保持一致。
纠正标签时,先选择一个高阈值\(\theta\)。如果\(f\)预测标签跟标注标签\(\tilde{y}\)不同且预测置信度高于阈值,即\(|f(x)-1/2|>\theta\),则将\(\tilde{y}\)纠正为\(f\)的预测标签。重复进行标签的纠正以及用纠正的数据集进行模型的重新训练,直到没有标签被纠正为止。
接着,稍微降低阈值\(\theta\),使用降低的阈值进重复上述的步骤,直到模型收敛。为了方便后面的理论分析,论文定义了一个连续递增阈值\(T\),让\(\theta=1/2-T\),具体逻辑如算法1所示。
Generalizing to the multi-class scenario
上面的描述都是二分类的场景,在多分类场景中,先定义\(f_i(x)\)为分类器对标签\(i\)的预测概率,\(h_x=argmax_if_i(x)\)为分类器预测的标签。将\(|f(x)-\frac{1}{2}|\)的判断修改为|\(f_{h_x}(x)-f_{\tilde{y}}(x)|\),当结果大于阈值\(\theta\)时,将标签\(\tilde{y}\)修改为标签\(h_x\)。在实践过程中,将差值判断加上对数会更加鲁棒。
Analysis
这一块是论文的核心,主要从理论的角度验证论文提出方法的通用性和正确性。这里我们就不继续讲解了,有兴趣的可以去看看原文,我们只需要知道这个算法的用法就够了。
Experiment
数据集噪声问题目前还没有公开的数据集,所以需要生成数据集进行实验,论文主要在CIFAR-10和CIFAR-100上进行数据生成和实验。先在原数据上训练一个网络,用该网络的预测概率近似真实的后验概率\(\eta\)。基于\(\eta\)重新采样数据\(x\)的标签\(y_x\sim\eta(x)\)作为干净数据集,前面训练得到的网络作为贝叶斯最优分类器\(\eta^{*}:\mathcal{X}\to\{1,\cdots,C\}\),其中\(C\)为类别数。需要注意的是,多类别场景中,\(\eta(x)\)输出为向量,\(\eta_i(x)\)对应向量的第\(i\)个元素。
对于噪声的生成,有特征相关噪声和独立同分布噪声(i.d.d)两种:
- 对于特征相关噪声,为了增加噪声的挑战难度,每个数据\(x\)根据噪声函数均可能从最高置信分类\(u_x\)变为第二置信分类\(s_x\),其中噪声函数与\(\eta(x)\)的概率相关。\(s_x\)对于\(\eta^{*}(x)\)是混淆度最高的类别,最能影响模型的性能。另外,由于\(y_x\)是从\(\eta(x)\)采样而来的,是置信度最高的类别,所以可认为\(y_x\)就是\(u_x\)。总体而言,对于数据\(x\),生成数据时要么变为\(s_x\),要么保持\(u_x\)。特征相关噪声有以下三种PMD噪声族内的噪声函数:
由于\(\eta(x)\)是无法修改的,为了能够控制噪声程度,唯一能做的就是为噪声函数\(\tau_{u_x,s_x}\)加上常量因子,使得最终的噪声比例符合预期。对于PMD噪声,35%和70%的噪声程度即代表35%和70%的干净数据被修改成噪声。 - 独立同分布噪声通过构建噪声转换矩阵\(T\)来进行标签的修改,其中\(T_{ij}=P(\tilde{y}=j|y=i)=\tau_{ij}\)为真实标签\(y=i\)转换为标签\(j\)的概率。对于标签为\(i\)的数据,将其标签修改为从矩阵\(T\)的第\(i\)行的概率分布采样而来的标签。论文采用了常见两种独立同分布噪声:1)均匀噪声(Uniform noise),真实标签\(i\)转换成其它标签的概率相同,即\(T_{ij}=\tau/(C-1)\),其中\(i\ne j\),\(T_{ii}=1-\tau\),\(\tau\)为噪声程度。2)非对称噪声(Asymmetric noise),真实标签\(i\)有概率\(T_{ij}=\tau\)概率转换成标签\(j\),或\(T_{ii}=1-\tau\)概率保持不变。
在实验的时候,部分实验会组合特征相关噪声和独立同分布噪声进行噪声数据集生成和实验,最后的验证标准取模型在验证集上的准确率。训练时,采用128 batch size、0.01学习率和SGD优化器,共训练180周期保证收敛,重复3次取均值和标准差。
PMD噪声测试,在35%和70%噪声程度下的性能对比。
混合噪声测试,在50%-70%噪声程度下的性能对比。
超参数对比实验。
在真实数据集上的性能对比。
Conclusion
论文提出了更通用的特征相关噪声类别PMD,基于此类噪声构建了数据校准策略PLC来帮助模型更好地收敛,在生成数据集和真实数据集上的实验证明了其算法的有效性。论文提出的方案理论证明完备,应用起来十分简单,值得尝试。
如果本文对你有帮助,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】
PLC:自动纠正数据集噪声,来洗洗数据集吧 | ICLR 2021 Spotlight的更多相关文章
- 人工智能大数据,公开的海量数据集下载,ImageNet数据集下载,数据挖掘机器学习数据集下载
人工智能大数据,公开的海量数据集下载,ImageNet数据集下载,数据挖掘机器学习数据集下载 ImageNet挑战赛中超越人类的计算机视觉系统微软亚洲研究院视觉计算组基于深度卷积神经网络(CNN)的计 ...
- 关闭 Mac 拼写自动纠正与横线转换
如果你是个程序员, 如果你恰好用 mac 自带的 notes 来做笔记, 很大可能性, 你会在里面贴代码, 但是, Mac 的拼写检查和自动纠正功能,会把代码变成你不想要的样子, 比如, 它会为你首字 ...
- TensorFlow数据集(一)——数据集的基本使用方法
参考书 <TensorFlow:实战Google深度学习框架>(第2版) 例子:从一个张量创建一个数据集,遍历这个数据集,并对每个输入输出y = x^2 的值. #!/usr/bin/en ...
- 安利一个github上面的一个神级库thefuck,Linux命令敲错了,没关系,自动纠正你的命令
没错就是这么神奇,名字相当噶性,thefuck.当你命令输入错误不要怕,直接来一句fuck,自动纠正你输入的命令. 在你输入错误的命令的时候,忍俊不禁的想来一句fuck,没错你不仅可以嘴上说,命令里面 ...
- ReLabel:自动将ImageNet转化成多标签数据集,更准确地有监督训练 | 2021新文
人工标注数据集中普遍存在噪声,ReLabel能够自动且低成本地将原本的单标签数据集转化为多标签数据集,并且提出配合random crop使用的高效LabelPooling方法,能够更准确地指导分类网络 ...
- TensorFlow数据集(二)——数据集的高层操作
参考书 <TensorFlow:实战Google深度学习框架>(第2版) 一个使用数据集进行训练和测试的完整例子. #!/usr/bin/env python # -*- coding: ...
- 【猫狗数据集】谷歌colab之使用pytorch读取自己数据集(猫狗数据集)
之前在:https://www.cnblogs.com/xiximayou/p/12398285.html创建好了数据集,将它上传到谷歌colab 在colab上的目录如下: 在utils中的rdat ...
- Java读取图片exif信息实现图片方向自动纠正
起因 一个对试卷进行OCR识别需求,需要实现一个功能,一个章节下的题目图片需要上下拼接合成一张大图,起初写了一个工具实现图片的合并,程序一直很稳定的运行着,有一反馈合成的图片方向不对,起初怀疑是本身图 ...
- voc数据集坐标,coco数据集坐标
voc,如上图 x1 ,y1 ,x4, y4 bbox的坐标格式是,x,y的最大最小值,也就是box的左上角和右下角的坐标 coco x,y,w,h box左上角的坐标以及宽.高 图 ...
- 深度学习与自动驾驶领域的数据集(KITTI,Oxford,Cityscape,Comma.ai,BDDV,TORCS,Udacity,GTA,CARLA,Carcraft)
http://blog.csdn.net/solomon1558/article/details/70173223 Torontocity HCI middlebury caltech 行人检测数据集 ...
随机推荐
- np.newaxis的用法
1 前言 np.newaxis的意思是给数组新增一个维度."python中矩阵切片维数微秒变化"中介绍了矩阵切片有时候会降低矩阵维度,为保证维度不变,可以用np.newaxis新增 ...
- SVG与foreignObject元素
SVG与foreignObject元素 可缩放矢量图形Scalable Vector Graphics - SVG基于XML标记语言,用于描述二维的矢量图形.作为一个基于文本的开放网络标准,SVG能够 ...
- pt-table-checksum对比数据测试(dsns方式)
1.1.工作原理 pt-table-checksum会对校验的表数据进行数据块(数据块大小根据服务负载情况调整)划分,并对数据块数据进行checksun处理:存储在建立的表中.在主库中执行基于stat ...
- linux中cron表达式指南
Cron是什么? 简单来讲,cron是基于Unix的系统上的一个实用程序.它使用户能够安排任务在指定的[日期/时间]定期运行.它自然是一个伟大的工具,可以自动运行大量流程,否则需要人工干预. Cron ...
- oracle authid current_user详解
在编写PLSQL程序时,对于授权的考虑很重要.ORACLE PLSQL中提供两种授权选择: --AUTHID DEFINER (定义者权限):指编译存储对象的所有者.也是默认权限模式. --AUTHI ...
- 使用base标签解决Thymeleaf页面获取项目路径问题
问题说明 写博客页面在发表博客后我想跳转到博客详情页.这里面我用到了:window.location.href="localhost:8080/post/detail/123"; ...
- 以二进制文件安装K8S之环境准备
为了k8s集群能正常运行,需要先完成4项准备工作: 1.关闭防火墙 2.禁用SeLinux 3.关闭Swap 4.安装Docker 关闭防火墙 # 查看防火墙状态 getenforce #关闭防火墙, ...
- linux基本知识汇总2(系统编程) 60000字汇总
/////////////进程/任务 -- task任何启动并运行程序的行为,都是由操作系统帮助我们将程序转换成进程 -- 进程:完成特定的任务 进程控制块:PCB(win) / task_struc ...
- Java 重写小练习
1 package com.bytezero.inherit3; 2 3 public class CylinderTest 4 { 5 public static void main(String[ ...
- snipaste 替换 微信截图快捷键 F3贴图功能实在是太帅了 - 软件推荐
snipaste 替换 微信截图快捷键 这个软件很久之前就知道,一直也没觉得可以替换微信的截图功能,毕竟能懒就懒. 今天同事又推荐 用了下,觉得确实ok. https://zh.snipaste.co ...