from cleanlab.classification import LearningWithNoisyLabelsfrom sklearn.linear_model import LogisticRegression# 其实可以封装任意一个你自定义的模型.lnl = LearningWithNoisyLabels(clf=LogisticRegression()) lnl.fit(X=X_train_data, s=train_noisy_labels) # 对真实世界进行验证.predicted_test_labels = lnl.predict(X_test) 笔者注:上面虽然只给出了CV领域的例子,但置信学习也适用于NLP啊~此外,cleanlab可以封装任意一个你自定义的模型,以下机器学习框架都适用:scikit-learn, PyTorch, TensorFlow, FastText。
3、置信学习的3个步骤
置信学习开源工具cleanlab操作起来比较容易,但置信学习背后也是有着充分的理论支持的。事实上,一个完整的置信学习框架,需要完成以下三个步骤(如图1所示):
Count:估计噪声标签和真实标签的联合分布;
Clean:找出并过滤掉错误样本;
Re-Training:过滤错误样本后,重新调整样本类别权重,重新训练;
图1 置信学习框架
下面对上述3个步骤进行详细阐述:
3.1 Count:估计噪声标签和真实标签的联合分布
我们定义噪声标签为 ,即经过初始标注(也许是人工标注)、但可能存在错误的样本;定义真实标签为 ,但事实上我们并不会获得真实标签,通常可通过交叉验证对真实标签进行估计。此外,定义样本总数为 ,类别总数为 。
为了估计联合分布,共需要4步:
首先需要通过对数据集集进行交叉验证计算第 样本在第 个类别下的概率 ;
然后计算每个人工标定类别 下的平均概率 作为置信度阈值;
最后对于样本 ,其真实标签 为 个类别中的最大概率 ,并且 ;
step 2: 计算计数矩阵 (类似于混淆矩阵),如图1中的意味着,人工标记为dog但实际为fox的样本为40个。具体的操作流程如图2所示:
图2 计数矩阵C计算流程
step 3 : 标定计数矩阵:目的就是为了让计数总和与人工标记的样本总数相同。计算公式如下面所示,其中 为人工标记标签 的样本总个数:
公式1
step 4 : 估计噪声标签和真实标签的联合分布,可通过下式求得:
公式2
看到这里,也许你会问为什么要估计这个联合分布呢?其实这主要是为了下一步方便我们去clean噪声数据。此外,这个联合分布其实能充分反映真实世界中噪声(错误)标签和真实标签的分布,随着数据规模的扩大,这种估计方法与真实分布越接近(原论文中有着严谨的证明,由于公式推导繁杂这里不再赘述,有兴趣的同学可以详细阅读原文~,后文的图7也有相关实验进行证明)。
看到这里,也许你还感觉公式好麻烦,那下面我们通过一个具体的例子来展示上述计算过程:
step 1 : 通过交叉验证获取第 样本在第 个类别下的概率 ;为说明问题,这里假设共10个样本、2个类别,每个类别有5个样本。经过计算每个人工标签类别 下的平均概率 分别为: .
图3 P[j]和t[j]计算
step2: 根据图2的计算流程,我们得到计数矩阵 为:
图4 计数矩阵C计算
step3: 标定后的计数矩阵 为(计数总和与人工标记的样本总数相同),将原来的样本总数进行加权即可,以 为例,根据公式1,其计算为 )::
step4:联合分布 为:(根据公式2直接进行概率归一化即可)
图5 联合分布Q计算
3.2 Clean:找出并过滤掉错误样本
在得到噪声标签和真实标签的联合分布 ,论文共提出了5种方法过滤错误样本。
Method 1: ,选取 的样本进行过滤,即选取 最大概率对应的下标 与人工标签不一致的样本。
Method 2: ,选取构造计数矩阵 过程中、进入非对角单元的样本进行过滤。
Method 3: Prune by Class (PBC) ,即对于人工标记的每一个类别 ,选取 个样本过滤,并按照最低概率 排序。
Method 4: Prune by Noise Rate (PBNR) ,对于计数矩阵 的非对角单元,选取 个样本进行过滤,并按照最大间隔 排序。
Method 5: C+NR,同时采用Method 3和Method 4.
我们仍然以图3给出的示例进行说明:
Method 1:过滤掉i=2,3,4,8,9共5个样本;
Method 2:进入到计数矩阵非对角单元的样本分别为i=3,4,9,将这3个样本过滤;
Method 3:对于类别0,选取 个样本过滤,按照最低概率排序,选取i=2,3,4;对于类别1,选取 个样本过滤,按照最低概率排序选取i=9;综上,共过滤i=2,3,4,9共4个样本;
Method 4:对于非对角单元 选取i=2,3,4过滤,对 选取i=9过滤。
上述这些过滤样本的方法在cleanlab也有提供,我们只要提供2个输入、1行code即可clean错误样本:
import cleanlab# 输入# s:噪声标签# psx: n x m 的预测概率概率,通过交叉验证获得# Method 3:Prune by Class (PBC)baseline_cl_pbc = cleanlab.pruning.get_noise_indices(s, psx, prune_method='prune_by_class',n_jobs=1)# Method 4:Prune by Noise Rate (PBNR)baseline_cl_pbnr = cleanlab.pruning.get_noise_indices(s, psx, prune_method='prune_by_noise_rate',n_jobs=1)# Method 5:C+NRbaseline_cl_both = cleanlab.pruning.get_noise_indices(s, psx, prune_method='both',n_jobs=1)
3.3 Re-Training:过滤错误样本后,重新训练
在过滤掉错误样本后,根据联合分布 将每个类别i下的损失权重修正为: ,
其中 .然后采取Co-Teaching[2]框架进行。
图6 Co-teaching
如图6所示,Co-teaching的基本假设是认为noisy label的loss要比clean label的要大,于是它并行地训练了两个神经网络A和B,在每一个Mini-batch训练的过程中,每一个神经网络把它认为loss比较小的样本,送给它其另外一个网络,这样不断进行迭代训练。
4、实验结果
上面我们介绍完成置信学习的3个步骤,本小节我们来看看这种置信学习框架在实践中效果如何?在正式介绍之前,我们首先对稀疏率进行定义:稀疏率为联合分布矩阵、非对角单元中0所占的比率,这意味着真实世界中,总有一些样本不会被轻易错标为某些类别,如「老虎」图片不会被轻易错标为「汽车」。
图7 真实联合分布和估计联合分布
图7给出了CIFAR-10中,噪声率为40%和稀疏率为60%情况下,真实联合分布和估计联合分布之间的比较,可以看出二者之间很接近,可见论文提出的置信学习框架用来估计联合分布的有效性。
图8 不同置信学习方法的比较
上图给出了CIFAR-10中不同噪声情况和稀疏性情况下,置信学习与其他SOTA方法的比较。例如在40%的噪声率下,置信学习比之前SOTA方法Mentornet的准确率平均提高34%。
图9 置信学习发现的 ImageNet标签问题
论文还将提出置信学习框架应用于真实世界的ImageNet数据集,利用CL:PBNR找出的TOP32标签问题如图9所示,置信学习除了可以找出标注错误的样本(红色部分),也可以发现多标签问题(蓝色部分,图像可以有多个标签),以及本体论问题:绿色部分,包括“是”(比如:将浴缸标记为桶)或 “有”(比如:示波器标记为CRT屏幕)两种关系。
图10 不同置信学习方法和随机去除的对比
图10给出了分别去除20%,40%…,100%估计错误标注的样本后训练的准确性,最多移除200K个样本。可以看出,当移除小于100K个训练样本时,置信学习框架使得准确率明显提升,并优于随机去除。
总结
本文介绍了一种用来刻画noisy label、找出错误标注样本的方法——置信学习,是弱监督学习和带噪学习的一个分支。
置信学习直接估计噪声标签和真实标签的联合分布,而不是修复噪声标签或者修改损失权重。
置信学习开源包cleanlab可以很快速的帮你找出那些错误样本!可在分钟级别之内找出错误标注的样本。
接下来,让我们尝试将置信学习应用于自己的项目,找出那些“可恶”的数据噪声吧~
Reference
[1] Confident Learning: Estimating Uncertainty in Dataset Labels
[2]Co-teaching: Robust Training of Deep Neural Networks with Extremely Noisy Labels
推荐阅读
我们真的需要那么多标注数据吗?半监督学习技术近年发展历程典型算法框架演进
GPU端打败RegNet、EfficientNet的强悍担当:GENet
从CVPR2020可以看出哪些人工智能的研究热点和未来趋势?
添加极市小助手微信(ID : cv-mart),备注:研究方向-姓名-学校/公司-城市(如:目标检测-小极-北大-深圳),即可申请加入极市技术交流群,更有每月大咖直播分享、真实项目需求对接、求职内推、算法竞赛、干货资讯汇总、行业技术交流,一起来让思想之光照的更远吧~ △长按添加极市小助手
△长按关注极市平台,获取最新CV干货
觉得有用麻烦给个在看啦~
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!