偏标签学习 (Partial Label Learning, PLL) 是一个经典的弱监督学习问题,它允许每个训练样本关联一个候选的标签集合,适用于许多具有标签不确定性和歧义的的现实世界数据标注场景。
然而,现存的 PLL 算法与完全监督下的方法依然存在较大差距。
针对这一现象,本期 AI Drive,浙江大学人工智能系在读博士-王皓波,解读其发表在 ICLR 2022的最新研究成果:PiCO:基于对比消歧的偏标签学习。
这项研究提出一个协同的框架,解决 PLL 中的两个关键研究挑战——表征学习和标签消歧。具体地, PiCO 由一个对比学习模块和一个新颖的基于类原型的标签消歧算法组成。PiCO 为来自同一类的样本生成紧密对齐的表示,同时促进标签消歧。从理论上讲,我们表明这两个组件能够互相促进,并且可以从期望最大化 (EM) 算法的角度得到严格证明。大量实验表明,PiCO 在 PLL 中显着优于当前最先进的PLL方法,甚至可以达到与完全监督学习相当的结果。
王皓波,浙江大学人工智能系博士在读,研究领域包括弱监督学习、多标签学习、机器学习理论等方向,专注于开发鲁棒、实用、可解释机器学习算法。曾于ICLR、TPAMI、AAAI、IJCAI等顶级会议与期刊发表多篇论文,长期担任ICLR、ICML、NeurIPS等顶会审稿人。
本次分享的具体内容有(按“数据实战派”指示回复关键词,可获得本文ppt,文末视频号看观看本期回放):
丨研究背景 丨相关工作 丨PiCO介绍 丨实验结果 丨EM视角下的PiCO 丨科研心得体会
一、研究背景
深度学习和人工智能的兴起,依赖于海量般的标注性数据,而收集这么多精准的标注性数据,实际非常地费时费力,高校与公司要落地这样的产品,需要有大量的标注人员来参与。所以现在的很多学界文章和工作都在关注弱监督学习,减少标注成本,他们实现标签学习,还有半监督学习,并以此来减少标注的数据量和标注的困难。
这篇文章是从比较独特、重要,且容易忽略的角度,去探索数据标注中的一种内生困难,也就是数据标注本身所存在的歧义和不确定性。
假设你是标注者,拿到了这样一张图片,很自然地想问其中的狗是一只什么狗?你可能会想说,这可能是一只阿拉斯加,不对,好像是一只哈士奇。
此时,如果你是一个一直养狗的人,是一个狗类专家,那么你可能一眼就辨识出来其种属。但是,如果像是这种从未养过狗,并且对其领域知识掌握不充分的人,可能就没有办法判别出。此时,若我一定要确认这只狗的种属,就不得不去查找相关文献,或者咨询专家。但是就会费功夫,那么该怎么办?比如随机选一个,但是阿拉斯加和哈士奇里面却选错了,在这种情况下,对于模型和数据,就引入了噪声的标签,实际上会对模型的准确性造成非常大的影响。
另一种方案是,鉴于这张图片标柱的困难性,选择不标注。此时的问题是虽然无法确定这张图片的准确标注到底是什么,但实际上至少能够确定是哈士奇或阿拉斯加此两种中的一种。所以,无论如何也不会把它当做是一只泰迪。我们还是一些认识,只是还不够充分,此时到底该怎么办?
于是自然而然想到,是否可以把所有可能的候选标签全都给标上呢,这便引出本文所研究的一个问题,即Partial Label Learning。
这个数据标注中,像这只狗,其实它的准确标注是阿拉斯加,但在Partial Label Learning里面,我们不再强求这个标注到底是否准确,而是只需要去提供一个标注性的集合,也就是把所有的可能标签都给它标上。在文献中也有一个别称Superset Label Learning,或Ambiguous Label Learning。
上可能这两个名称看起来更加直观一点,但因为一些历史原因,沿用了Partial Label Learning这个方案和名称。
二、相关工作
本节介绍Partial Label Learning的一些相关工作。
在设计初期,大家对这个问题的研究还不是很彻底,可能会选用一些比较naive的学习策略,此处采用 Average-based Methods,可以把所有的标签都当作是真实的标签,采用平均的方式计算其均值,比如两个标签,可以让其中一个变成0.5,另外一个标签comment也变成0.5,交给模型去学习。但这个方法,并没有去判断其真实标签到底是什么,被淹没在了所谓的候选标签里,此时它实际上引入了大量的噪声,会影响学习的过程。
这两年,我们有提到Alexnet上开始兴起了基于Self-Training的风潮。自训练方式,就是在训练过程中重新使用模型输出来更新标签的Confidence,也就是我们所识别的一个真实的标签。
所采用的那种方式基本上就是用概括性方式所定义出来的,也是Program这个方法所采用的,一般会在这个候选机里面,对模型的输出进行重做Normalization,即重新进行规划。
在我们的提出的方法之前,比如CFAR在Benchmark上也能达到sota的效果,但我们发现,这却忽略了这么一个问题,就是用模型输出去再次更新标签,以便能对模型进行训练。
但实际上由于这个标签存在不确定性,其表征圈得很不好,在这样的情况下,当表征不好时,模型输出也不会太准确,这样以来又重新影响了此表征,这就是我们称为Representation-Disambiguation Dilemma的问题。。
另外一些方法,比如基于图的方法、基于聚类的方法等,都是基于一个假设表征无需预先学习,也忽略了Representation-Disambiguation Dilemma这么一个问题。
那么该怎么去学习表征呢,此处介绍这两年非常火热的方法,即对比学习。
在自监督学习领域,对比学习实际上已经成为了一种非常标准的无监督表征学习范式。
在对比学习中,一般会通过数据增广的方式,比如说右侧有只猫,给它生成不同的 Query和 Key,Embedding,就可以把这两个增广的图像绘进同一个Encoder,获得一个Embedding。
接下来用一个对比学习即Noise Contrastive Estimation,就可以利用Ncence损失来对表征进行训练。其本质是希望把图片与其近邻样本进行拉近,而与其他的样本进行拉远。
既然对比学习在无监督上面有这么好的效果,那么能不能用到弱精度学习General Contrastive Learning上呢,于是就进入了我们这篇文章PICO的工作。
三、PiCO介绍
本节会从三个角度来分析PICO。
首先是提出了协同的 Partial Label Learning框架,利用了对比学习来增强表征学习的能力,同时赋予了它能够提升这个标签消息的能力。
这篇文章也是首次在Partial Label Learning里面引入了对比学习,以便能达到一个很好的效果。从实验的角度来看,在 PLL问题里面达到了最先进的效果,并且还发现,当某些标签歧义不是很高时,甚至能够达到一个接近监督学习的效果。
理论上,从期望最大化的角度来看,也就是以EM算法的角度来解释我们的方法,其实我们在对比学习里面证明了Aligh,也就是对齐的性质。
先介绍一下Partial Label Learning的 Setup。
我们的目标是学习分类器,它的参数分类器f,定义为 setup,数据集是在每个Tuple,每个元组里面Xi是一张图片,么Yi相比于之前,可能是一个问号,或者是一个离散的标签,在这里将其定义成了一个候选标签的集合,注意它这也是集合,而不是某一个离散的值。
这里有一个假设是 ground-truth真实标签是被引入的,它被包含在候选标签集里面,并且ground-truth标签对预测器来说,是不可见的,那么,在训练的时候会同步地进行标签消歧,所以这是一个Identification Based Method,相比于之前介绍的 Average Base Method,我们在训练时维持了这么一个伪标签si,对于每一个样本,我们使用经典的 cross HP损失来更新它。
PiCO实际上是由两个比较大的模块构成,首先是一个对比学习网络,是希望使用对比信息来提升它的表示能力,后面我们也会介绍它的另一个大模块,即标签消歧模块。
首先是 Backbone,它 follow了经典的MoCo工作。具体来说,给定一个图片以后,通过数据增广的方式生成两个View,第一个是query view,第二个是key view。将query view这两张图片放入两个Encoder,上面Encoder是主干的网络输出,它会连接上刚才提到的分类器。
另外一个部分称为projector,即投影器,它是一个多层感知机,与之相连后通过 MLP,会得到q的 embedding,它可以意识到对比学习的空间。
key view增广以后的图像放入另外的Encoder,不参与梯度的训练只是提供对比,也可以作为副样本来使用。对它也不进行梯度更新,而是要采用momentum的更新来做目标average,使得每步用Classifier这个模块,以query模块的 encoder来逐步地更新它。
同样,通过momentum更新的MLP来得到另外一个embedding,与此同时,通过key还会维护队列,维护队列的作用其实是为对比时机提供负样本。众所周知,在对比学习里面比较大的副样本池子能够让其表征学得更好。
在query和key的 embedding以后构建embedding的池子,其中包含了这个bash。
通过学习使其通过网络后得到query的embeddings,然后是Key embeddings,还有队列里面存储的Key embeddings,拿到 pull以后,引入了对比学习的损失函数。
我们的想法是这样的,既然做了一个分类任务,希望能够把同类的样本尽可能地拉近,把不同类的样本尽可能地拉远,因此,可以通过经典的对比学习损失函数来达到这个目标。具体来说,为每个样本选择一个positive的集合,里面的embedding,我们会在分子部分来拉近距离。
在分母部分,把当前样本的 query的embedding和剩下所有样本的 embedding拉远,这样就能达到之前想要实现的目标了。
有了这个目标函数以后, px要怎么去定义呢?
在MoCo里面,我们可能会有样本 query embedding和它的key embedding。比如说,它与增广样本的另一个样本互为正样本,但是实际上在Partial Label Learning里面,我们显然不能简单地这么来做。
希望能够把同一个类的样本都给拉近,到底要去怎么做?
实际上实验的过程中,我们采用了相当多不同的策略去尝试来构建更好的 Positive set,比如可能会引入过滤器,来过滤掉一些可信度可能不那么高的 positive的样本,但实际上,最后发现还是XXX策略最有用且最有效,也就是直接用分类器预测的标签来帮助去构建。
只要 class的预测这两个样本它俩的标签相同,我们就把它视作是positive。当然我们也会为预测的标签维护一个队列,它和key embedding对应的队列是同一个size,而且还帮帮助获得 positive size。最后可以同时训练 classifier和对比学习网络了,就得加权损失。
到此,对比学习网络就介绍完。
但我们还是发现了问题,就是要去构建 positive此时分类器其实是不可信的。因为标签本身存在一定的不确定性,如果非常自然地去相信分类器的结果,可能依然会陷入到不太好的结果当中。
那么,接下来就是另外的内容——怎么样去做标签消岐。
也就是怎么样能够把ground-truth标签从一个候选的标签集合里面找出来。
我们在这里提出了一个基于原型的消岐策略。具体而言,给每个类标签 c来维护原型的标签,原型的 Embedding的向量。
我们其实有一个非常简单的想法,也就是说,如果样本接近对比学习的原型,那么ground-truth label很有可能是 label了,到底要怎么样逐步地来更新它?我们会让伪标签从一开始的均匀分布,从uniform开始,由prototype定义的well-code的独热向量来逐步地进行更新。
比如说,这里可以看到伪标签可能是狗狗的标签,执行度可能是0.65,cat标签的执行度可能是0.35,那么这个时候它所显示的原型是狗。
于是,我们就会让0.65的伪标签往上提一点。可以设想一下,如果说这个样本一直都指向的是这个原型,那么,它在几步迭代以后就会逐步收敛到定义文号的标签。
最后还遗留了一个问题,就是原型到底要怎么去更新。
有一种非常简单的方法,就是我们每次在一个sep里面,或者进行epoch的时候,都需要计算每个类的均值,然后是引用 Classifier的预测,但这样以来,太过费时费力。
所以我们采用了一个Momentum的更新方式,在每一步,每一个sep里面,我们会让 query embedding去一点,每一步都让它稍微改进一下这个原型,让它往这个方向来进一步。
当然这里对应 c的选择,要看分类器的一个预测了,这样的话运行时间会大大地节省。
当然,在实验的过程中我们也发现,即使对每个epoch更新一次embedding,实际上效果也不差,当然计算成本也会更高一点。
总体来说,我们会放入一张图片,然后通过数据增广来获得两个bill,还会通过classifier来选择对比学习的positive的样本,进行对比学习。对比学习得到的embedding,我们又会通过圆形的方式来逐步地更新伪标签,它又会反过来支持这个分类器的学习。
值得注意的是,这里的两大模块实际上是有一种协同的作用。
首先,我们会在后面进行理论上的推导,以证明对比学习实际上是有聚类的效果,那么它可以很大程度上来帮助标签进行消歧,这实际上也能够反哺对比学习,从而有利于更好地来建立positive set。
四、实验结果
首先是主要结果,可以看到在θ10和θ100上,我们都获得了θ的结果,并且发现在q = 0.1和0.01情况中,我们的效果跟全监督是非常接近。
我们也可视化了一下表征,可以看到,Baseline的表征可能就没有那么好辨认,像 PRODEN终究是一些簇,而且会有一些边界感不是很清楚,相比之下,PiCO的每个类别都有一个非常紧的簇,这也证明了PiCO之于对比学习,它有一个剧烈的性质。
还有 Ablation study,即消融实验,我们发现,实际上标签消岐和对比学习模块都受到了很大的影响。每消熵一个,都会造成较大的性质损失。
接下来我们会想问,为什么对比学习还有PiCO,能够提升 Partial Label Learning的效果?
五、EM视角下的PiCO
本节从对比学习还有聚类的效果说起,给出一个基于期望最大化的理论视角解读。
首先,对对比学习的损失进行一个分解,这里面我们采用了一篇sml,它是2020年一篇文章中的经典分解。在这里面,一般把a称为alignment项,把b称为uniformity项,b项实际上跟熵是有关系的,还与一些互信息是有比较大的关系,能够很大程度地保留信息,并促进表征学习。
本文其实主要是围绕 a项进行的探讨,做一个简单的、比较理想化的情况说明,每一步迭代的时候,都能获取到整个数据集和它的增广样本。有了这样的数据以后,就可以把所有的样本都可以根据分类器的输出来进行分成c的子集。
此时经过简单推导以后,发现 A lambda项实际上等价于这个目标,大家可能对此不是很熟悉,它是很经典的k means算法,并且与其目标一模一样,也就是说,对比学习里面的alignment项,它在本质上最小化了类内的一个方差。
有了预备知识后,就可以进入EM视角了。我们的目标是去最大化似然,为此还有一个小工作要做。因为其实并不知道真实的标签到底是什么,所以便引入了一个假设,它也是来自于next的一篇比较经典的文章,可以把似然进行简单地变化,有了这一步工作后,我们就可以从 EM视角来进行分析了。
首先可以定义一组辅助性分布,这也是 em算法里很常见的一个策略。们定义了这么一个π(ij),其概率是分布在候选标签集里面的。
通过 Jason不等式,可以得到不等式等号成立的条件,也就是经典Jason不等式成立的条件是π(i-yi)需要满足这么一个等式。其实会发现,它后面的概率是分类器。有了这样的知识以后,就知道了PiCO里面的 E-step就是expectation steps,这对应的是对比学习里面所构建的 positive sets过程,这就是我们的E-step。
在M-step里面,就需要最大化似然了。假设了对比学习embedding是服从地缘的M-step的分布。由此可以证明,最小化对比学习的损失函数时,特别是alighnment这一项,其实也最大化了似然函数的下界,并且通过对表征进行可视化发现,它的确是能够让上界有很好的效果。
以上是我们的总结,首先提出了PiCO协同框架,在对比学习中,首将其利用在了Partial Label Learning这个问题上,我们还得到了sota效果。
在理论上,个人觉得这篇文章有意思的地方是,我们证明了对比学习实际上是有聚类的性质,并且从这个视角出发,把PiCO解释成了一个期望最大化的算法。
相关资料列示如图,可以进行进一步的阅读。
六、科研心得和体会
第一,针对一些比较Junior的同学,有很多刚进入研究生阶段的同学,可能会把自己对科研的方向还有学习很大程度寄托在导师的身上。但实际上就你开始研究的课题而言,导师无法帮你来解决任何事情,因为你研究的课题肯定不是你导师研究过的。
所以说,一定要做好自己学习和攻坚的准备,不要太过依赖导师。当然有很多导师能够给我们大家提供很多帮助,这样肯定最好。在大多数情况下,要尽早脱离依赖别人的习惯。因此,我觉得我们要更积极地和同辈,还有一些活跃在一线的科研工作者去交流。
进入研究生阶段,其实没有必要那么害羞和内向了,应该跟同学们多交流,多去了解,看他们对这些科学问题的认知,要大胆发邮件、加微信,你能够获取到别人的经验,这是最快的途径,这是一个非常重要的问题。因为我发现,其实大部分刚进入研一,或者说刚开始科研阶段的同学,可能都存在这样的一个问题。
其次,在平时的科研中要有一个比较好的科研习惯。基础的入门肯定是必备的,不管看论文也好,还是看知乎、微信公众号也好我都会看,相对碎片化的学习方式,很难帮助你构建起很好的课题认知。 如果仅限于机器学习的话,我可能会给出这样一个科研入门的路径:首先打好机器学习的基础,然后阅读一些稍微进阶的基本学习理论,或者像贝叶斯这样的一些书籍。然后深学习像CS231这样的一些课程。
此外,一定要多看书,多看网课,其实这些资源都非常好。此外,平时大量地阅读论文,每天刷课本,这是基本的。另外,很重要的一点就是要突破舒适圈。
觉得coding不好,那就要多复现论文,数学不好,那就要多补数学,不要一直在自己的舒适圈打转,如果一直在自己的舒适圈打转的话,你肯定做不好一件事情。
因为,其实科研需要相对比较全方位地来构建自己的能力,包括沟通能力、写作能力、阅读能力、检索能力,可能都需要打好基础。
最后,可能有些同学也会比较着急,例如觉得自己的一篇文章经常被拒。实际上,我觉得大家也不用太着急,还是要等待机会,不是说一两篇文章就能评判一个人的能力大小。这些PPT本来是在写这篇文章时候的科研心得,但实际上我可以很负责任地告诉大家,它也是灵光一闪的一个idea。
这篇文章能够做出来,一定也是有我一直以来的一些积累,但是总的来说,我们还是要有耐心来积极地去做好工作。
|