腾讯优图:带噪学习和协作学习,不完美场景下的神经网络优化策略

神经网络的成功建立在大量的干净数据和很深的网络模型基础上。但是在现实场景中数据和模型往往不会特别理想,比如数据层面有误标记的情况,像小狗被标注成狼,而且实际的业务场景讲究时效性,神经网络的层数不能特别深。

腾讯优图不断迭代数据和模型缺陷情况下神经网络的有效训练方法,通过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 Networks with 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)是基于信息论设计的loss function,Deterministic information loss。它的Motivation是想寻找一个信息测度(information measure)I。假设在I下任意存在两个分类器f、f’,如果在噪音数据集下,通过I, f比f’表现得更好,那么在干净数据集下,f比f’表现得也好,也就是说它在噪音数据集和干净数据集上满足一致性。如果在噪音数据集下它表现得好,通过一致性,在干净数据集下表现得也一定很好。

把时间往前推进一下,讲一些目前正在审稿中的文章(Peer Loss Functions: Learning from Noisy Labels without Knowing Noise Rates (under review)
;Loss with Paired Samples: A Robust Learning Approach that Adapts to Label Noise (under review),关于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理解成CE loss。所以我们理论证明了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表现得特别明显。

以上讲的方法主要是设计loss function的思路,让网络能够抵抗noisy label。但其实还有很多其他方法,比如samples selection和label correction,这两个方法是通过选择样本和对样本进行纠正来进行带噪学习训练。发表在NeurlPS 2018上的这篇论文(Co-teaching: Robust Training of Deep Neural Networks with 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,这两个不同源,所以用非对称的思想去解决noise label的问题。

具体来说,首先有很多 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.com/subeeshvasu/Awesome-Learning-with-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 with co-training,非常古老,是1998年的,但是它的引用量已经好几千,它其实是解决了半监督的问题。

发表在CVPR 2018年的一篇论文deep mutual learning。它的思想极其简单,我们都知道蒸馏的时候teacher是fixed,然后对于学生进行监督,这篇文章的思想就是在蒸馏的过程中老师并不保持fixed,也进行迭代的训练操作,也就是说老师教学生,学生也教老师。

时间再拉近一点,这是今年腾讯优图中稿CVPR 2020年的一篇文章(Filter Grafting for Deep Neural Networks)。这篇文章的motivation是什么呢?我们知道训练好的神经网络存在很多无效的filter, filter pruning技术主要对无效的滤波器进行移除使网络的推理速度增加。

与pruning相反,在这篇文章中,我们提出滤波器嫁接(filter grafting)技术。我们并不是移除网络的无效滤波器,而是将其他网络的有效滤波器的参数嫁接到无效滤波器上,通过引入外部信息的方法来激活无效滤波器,让它们重新变得有价值起来,来进一步提高网络的表达能力。

这篇文章有一个非常重要的发现是什么呢?我们训练的神经网络如果在初始化的时候不一样,在训练完之后,无效filter的位置是统计无关的。整个我们可以并行训练多个网络,多个网络之间互相进行这种操作,结束训练之后每个神经网络都会有更好的特征表达,而且测试的时候准确率性能也会更好。

可以看一下这个结果,对于在CIFAR-10、CIFAR-100上进行的实验,与mutual learning、传统的distillation、还有RePr相比较,Filter Grafting效果还是不错的,对于一些大网络,特别是对于CIFAR-100有两个点的提升。

Grafting是可以有效提高无效filter,但是可能有效filter的信息量会减少。这篇还在审稿中的文章DGD: Densifying the Knowledge of Neural Networks with Filter Grafting and Knowledge Distillation是关于我们的新发现,就是传统的蒸馏可以解决这个问题,这是这篇文章的贡献。

我们在做grafting加权的时候,比如说M1和M2进行加权,M1的layer1加到M2的layer1上面,虽然填补了M2中无效filter的空虚,但是M2有效filter可能也会受到影响。因为M1它本身也有无效filter,它直接加到M2上,M2的有效filter的信息量可能会减少,所以说我们就做了这样一个DGD framework。

看一下DGD framework的结果。我们对比了传统的filter grafting,还有knowledge 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对自动标注数据还是有业务价值的。

Q:grafting对于小型network的效果如何?
A:其实我们在做很多实验的过程中发现,grafting对小型网络的提升是没有对于大型网络的提升高。因为无效filter的数量很可能出现在大型网络上的比较多,小型网络无效filter的数量比较少,我们的实验结果可以看到grafting是在大的数据网络上效果是比较明显的。

posted on 2020-05-15 14:37  云计算头条  阅读(264)  评论(0编辑  收藏

统计