腾讯优图:带噪学习和协作学习,不完美场景下
优图不断迭代数据和模型缺陷情况下的有效训练方法,通过noisy label learning和collaborative learning技术,实现用比较浅的网络解决noisy dataset问题。相关技术已经在的众多业务场景上(行人重识别,内容审核等)落地。本文整理自优图和机器之心联合主办的「CVPR2020线上分享」,分享嘉宾为优图实验室高级研究员Louis。
刻画noisy label与任务目标
一般来讲,noisy label是可以通过一个噪音转移矩阵T来刻画,也就是noise transition matrix T。人为设计一个噪音转移矩阵T,之后如果我们知道这个数据集中 clean label的分布,将这个分布乘以T就可以得到noisy label的分布。有了noisy label分布和对应的数据集之后,就可以进行很多带噪方法的验证。
接下来用数学描述来刻画一下我们带噪学习的目标。对于一个分类任务,我们的目标可以写成下面的形式,x和y代表样本和对应的label, 在今天的语境下F是。我们的任务目标是在数据集下优化一个loss function,使得在noisy label下训练得到的解,在性能上接近在clean label下训练得到的解,那么数学表达就是,f 是f的一个子集。
各显神通,主要带噪学习方法探索
关于带噪学习,近些年有一些重要论文。
NeurlPS 2018上的一篇论文(Generalized Cross Entropy Loss Training Deep Neural Netorks ith Noisy Labels)提出GCE loss(Generalized Cross Entropy loss)。它的背景是,MAE以均等分配的方式处理各个sample,而CE(cross entropy)会向识别困难的sample倾斜,针对noisy label,MAE比CE更加鲁棒,CE的准确度更高,拟合也更快。于是这篇文章提出GCE loss,结合MAE与CE二者的优势。
还有的论文(LDMI: A Novel Information-theoretic Loss Function for Training Deep Nets Robust to Label Noise, NeurlPS 2019)是基于信息论设计的lossfunction,Deterministic information loss。它的Motivation是想寻找一个信息测度(information measure)I。假设在I下任意存在两个分类器f、f’,如果在噪音数据集下,通过I, f比f’表现得更好,那么在干净数据集下,f比f’表现得也好,也就是说它在噪音数据集和干净数据集上满足一致性。如果在噪音数据集下它表现得好,通过一致性,在干净数据集下表现得也一定很好。
把时间往前推进一下,讲一些目前正在审稿中的文章(Peer Loss Functions: Learning from Noisy Labels ithout Knoing Noise Rates (under revie)
;Loss ith Paired Samples: A Robust Learning Approach that Adapts to Label Noise (under revie),关于Peer loss。Peer loss是由两个loss function的加权得到的,比如l1, l2。α是一个超参数,衡量两个loss的权重大校l1、l2可以是任何分类导向的loss function,比如CE、MSE、MAE都行。Loss的构造主要是在于样本的构造上,我们看l1的样本,Xi对应就是数据集中原始的样本和对应的label。
为什么peer loss可以很好地解决noisy label问题?为了方便,这里先把l1、l2都定义成CE loss,那么在第一项,它表现的像positive learning,因为它就是一个传统的CE function,而在第二项,它像 negative learning,也就是在标记错的时候,比如把狗标成汽车,如果用positive learning进行学习的话那就出现问题了,它是随机从一个label中进行抽取,希望让模型学到它不是一个鸟,狗不是一个鸟,它的语义关系是成立的,是正确的,这样一来,第二项对模型也能起到一个积极的导向作用。
更加有意思的是,单独训练第一项和单独训练第二项都不可能使模型达到理论上的最优,因为模型存在noisy label。我们证明了它们两项联合训练,在统计上是可以让模型达到最优。
文章提出了一个主要定理,就是noise鲁棒性,我们证明了存在一个最优的超参数α,用peer loss在noisy label下进行优化,它得出的的解等价于用l1在clean label下进行优化,可以把l1理解成CEloss。所以我们理论证明了peer loss的最优性。
看一下peer loss在数值方面的结果,这里使用的数据集是CIFAR-10,存在着40%的uniform noise,就是symmetric noise。图中的蓝色代表clean label分布,橘黄色代表noisy label分布。通过peer loss优化后,我们画一下clean label和noisy label的分布,可以看到我们的网络把这两个完全分开了,证明peer loss是非常有效的。
接下来,在各个数据集上衡量peer loss的表现,我们在MNIST、Fashion MNIST、CIFAR-10上进行了实验,可以看到MNIST和Fashion MNIST上,用peer loss优化的结果超过了一些其他的结果,包括DMI的结果三四十个点,这是非常大的进步。在CIFAR-10上也超过将近5个点,四个多点左右这样的一个结果。而且,我们发现peer loss尤其对Sparse,High这种noise type表现得特别明显。
以上讲的方法主要是设计lossfunction的思路,让网络能够抵抗noisy label。但其实还有很多其他方法,比如samples selection和label correction,这两个方法是通过选择样本和对样本进行纠正来进行带噪学习训练。发表在NeurlPS 2018上的这篇论文(Co-teaching: Robust Training of Deep Neural Netorks ith Extremely Noisy Labels)就是关于Co-teaching的。它的基本假设是认为noisy label的loss要比clean label的要大,于是它并行地训练了两个A和B,在每一个Mini-batch训练的过程中,每一个把它认为loss比较小的样本,送给它其一个网络,这样不断进行迭代训练。
接下来介绍优图在2019年底发表的一篇文章(Asymmetric Co-Teaching for Unsupervised Cross-Domain Person Re-Identification),解决一类特殊的label noise。这类label noise不是人为标注产生的,而是在训练中产生,在模型的聚类过程中产生的。比如说有这样一批没有标记的样本,然后通过一个聚类算法得到inliers和outliers,outliers是聚类算法中认为这一点是孤立点或者是噪音点,它没法归到聚类算法的ID里面,就叫做outliers,inliers是聚类算法对这些样本进行聚类后得到一个个cluster,但每一个cluster里面可能存在noise。
优图提出了一个框架,叫Asymmetric Co-teaching。因为聚类中存在inlier和outliers,这两个不同源,所以用非对称的思想去解决noiselabel的问题。
具体来说,有很多 Target Data,经过模型聚类得到Inliers和Outliers。然后通过k近邻将outliers进行label。下面一步是比较关键的,和Co-teaching一样,我们也并行训练两个C和M,我们往C和M送到的样本是非同源的,一个inlier一个outliers。然后C和M互相发送他们认为loss比较小的样本进行迭代训练。每次训练之后,再进行聚类。不断重复这种迭代过程,我们发现outliers越来越少,Inlier也是越来越多,Inlier每个ID的noise也是越来越少。
Asymmetric Co-teaching的结果不错,我们主要是在行人重识别这个问题上衡量方法的有效性,也就是ReID。可以看我们这个clustering-based的方法在Market和Duke数据集中有不错的表现,比之前的一些方法也多了五六个点。
一下,关于noise label前面主要介绍了七个方法,这些方法可以归为Feature independent noise和Feature dependent noise。值得注意的是,并不是一个方法去解决Feature independent noise就无法解决Feature dependent noise,只是说一个方法它更适用于解决哪个问题。标线框的这两个是我们优图的工作。
我的介绍非常有限,如果你感兴趣希望读更多的研究,可以访问这个网址,里面有更多关于noisy label learining的文章
https://github./subeeshvasu/Aesome-Learning-ith-Label-Noise
激活无效滤波器,提升性能
关于协作学习其实学术界没有统一的定义,一般来讲只要是多个模型互相协作,去解决一个或者多个任务,那就可以把这种学习范式叫做协作学习。
按照任务分,协作学习可以分成两个一个是解决多个任务,有dual learning和cooperative learning;一个是多个模型一起协作解决一个任务。因为dual learning和cooperative learning主要是解决的问题,涉及到比如说中文翻译成英文,英文翻译成中文,这是一个两个任务,是多个任务。我们这里主要是讲CV方面,所以说我们主要讲解决一个任务,接下来会介绍co-training、deep mutual learning、filter grafting和DGD这几个工作。
关于 Co-training的这篇文章Combining labeled and unlabeled data ith co-training,非常古老,是1998年的,它的引用量已经好几千,它其实是解决了半监督的问题。
发表在CVPR 2018年的一篇论文deep mutual learning。它的思想极其简单,我们都知道蒸馏的时候teacher是fixed,然后对于学生进行监督,这篇文章的思想就是在蒸馏的过程中老师并不保持fixed,也进行迭代的训练操作,也就是说老师教学生,学生也教老师。
时间再拉近一点,这是今年优图中稿CVPR 2020年的一篇文章(Filter Grafting for Deep Neural Netorks)。这篇文章的motivation是什么呢?我们知道训练好的存在很多无效的filter, filterpruning技术主要对无效的滤波器进行移除使网络的推理速度增加。
与pruning相反,在这篇文章中,我们提出滤波器嫁接(filter grafting)技术。我们并不是移除网络的无效滤波器,而是将其他网络的有效滤波器的参数嫁接到无效滤波器上,通过引入外部信息的方法来激活无效滤波器,让它们重新变得有价值起来,来进一步提高网络的表达能力。
这篇文章有一个非常重要的发现是什么呢?我们训练的如果在初始化的时候不一样,在训练完之后,无效filter的位置是统计无关的。整个我们可以并行训练多个网络,多个网络之间互相进行这种操作,结束训练之后每个都会有更好的特征表达,而且测试的时候准确率性能也会更好。
可以看一下这个结果,对于在CIFAR-10、CIFAR-100上进行的实验,与mutual learning、传统的distillation、还有RePr相比较,Filter Grafting效果还是不错的,对于一些大网络,特别是对于CIFAR-100有两个点的提升。
Grafting是可以有效提高无效filter,可能有效filter的信息量会减少。这篇还在审稿中的文章DGD: Densifying the Knoledge of Neural Netorks ith Filter Grafting and Knoledge Distillation是关于我们的新发现,就是传统的蒸馏可以解决这个问题,这是这篇文章的贡献。
我们在做grafting加权的时候,比如说M1和M2进行加权,M1的layer1加到M2的layer1上面,虽然填补了M2中无效filter的空虚,M2有效filter可能也会受到影响。因为M1它本身也有无效filter,它直接加到M2上,M2的有效filter的信息量可能会减少,所以说我们就做了这样一个DGD frameork。
看一下DGD frameork的结果。我们对比了传统的filter grafting,还有knoledge distillation,发现比grafting distillation都有不错的提升,比如在CIFAR-100上,各个网络基本都会比baseline提升两到三个点。
待解难题如何进行更有效的滤波器嫁接
前面讲的是noise label learning和collaborative leaning,那么基于这两个可以做什么呢?
第一个是设计一些feature dependent noise的loss形式。 因为我认为现在对于noisy label learning领域,feature independent noise可能解决得差不多了,准确率都很高了,接下来一个主要的点就是设计一些loss方式来解决feature dependent问题。而且,这个问题是真实的业务场景、真实的数据集上的noise type形式。
第二个是,我们知道grafting的motivation是来自于pruning,那么我们是否可以用grafting的一些思想去指导来进行更有效的pruning,这是一些未来大家有兴趣可以探索的一个点。
Q&A
Q:主动学习和noisy label learning都涉及到选择数据,两者的区别是什么?
A:的确两者都涉及选择数据,关键在于要选择什么样的数据,选择数据的评价标准可能不太一样。noisy label learning想选择干净的数据,而主动学习是想选择对解决的问题有效的数据。
这些选择方式和数据的分布息息相关的,也就是说我们讲各种算法的要了解数据的分布,抛开数据的分布去研究算法有时候是没有任何价值的。对于主动学习来讲,在数据集的分布不均匀的时候,要选择loss比较大的样本,这和noisy label learning有点相反,noisy label learning是要选择loss比较小的样本。
Q: noisy label对自动标注数据有用吗?
A这个是有用的,包括现在一些业务场景,我们用一些方法筛选出来哪些数据是值得标的,或者说我们通过noisy label的一些方法将noisy label的样本先检测出来,之后再进行有效的中心标注,所以noisy label对自动标注数据还是有业务价值的。
Qgrafting对于小型ork的效果如何?
A其实我们在做很多实验的过程中发现,grafting对小型网络的提升是没有对于大型网络的提升高。因为无效filter的数量很可能出现在大型网络上的比较多,小型网络无效filter的数量比较少,我们的实验结果可以看到grafting是在大的数据网络上效果是比较明显的。
机器人工业设计
- 工业机器人技术专业方向 工业机器人技术专业方
- 国际上第一台工业机器人产品诞生于 世界上第一
- 工业机器人编程属于什么专业 工业机器人编程属
- 工业机器人编程是学的什么专业课程
- 工业机器人技术需要学什么 工业机器人技术需要
- 工业机器人编程是学的什么内容 工业机器人编程
- 工业机器人发展趋势 工业机器人未来的发展趋势
- 国内工业机器人企业排名 2024年国内工业机器人企
- 工业机器人学起来难不难 工业机器人好不好学
- 工业机器人就业形势了解 工业机器人就业现状
- 工业机器人编程及操作的阅读内容 工业机器人编
- 工业机器人编程难不难 工业机器人编程难不难学
- 工业机器人入门实用教程 工业机器人入门应该学
- 工业机器人编程基本思路是什么 工业机器人编程
- 工业机器人难学吗 工业机器人学起来难不难
- 工业机器人岗位介绍 工业机器人岗位说明