对比学习(ContrastiveLearning)相关进展梳理样本函数

最近深度学习两巨头Bengio和LeCun在ICLR2020上点名Self-SupervisedLearning(SSL,自监督学习)是AI的未来,而其的代表的Framework便是ContrastiveLearning(CL,对比学习)。

另一巨头Hinton和Kaiming两尊大神也在这问题上隔空过招,MoCo、SimCLR、MoCoV2打得火热,这和BERT之后,各大公司出XL-Net、RoBerta刷榜的场景何其相似。

Motivation&Framework

很多研究者认为,深度学习的本质就是做两件事情:RepresentationLearning(表示学习)和InductiveBiasLearning(归纳偏好学习)。目前的一个趋势就是,学好了样本的表示,在一些不涉及逻辑、推理等的问题上。

1.1IllustrativeExample

▲当你被要求画一张美元,左边是没有钞票在你面前,右边是面前摆着一张钞票画出来的结果

上面这个例子来自于ContrastiveSelf-supervisedLearning[2]这篇Blog,表达的一个核心思想就是:尽管我们已经见过很多次钞票长什么样子,但我们很少能一模一样的画出钞票;虽然我们画不出栩栩如生的钞票,但我们依旧可以轻易地辨别出钞票。

1.2ContrastiveLearningFramework

既然是表示学习,那么我们的核心就是要学习一个映射函数,把样本编码成其表示,对比学习的核心就是使得这个满足下面这个式子:

这里的就是和类似的样本,就是和不相似的样本,这是一个度量样本之间相似程度的函数,一个比较典型的score函数就是就是向量内积,即优化下面这一期望:

事实上,最小化这一loss能够最大化和互信息的下界,让二者的表示更为接近。理解了这个式子其实就理解了整个对比学习的框架,后续研究的核心往往就聚焦于这个式子的两个方面:

如何定义目标函数?最简单的一种就是上面提到的内积函数,另外一中triplet的形式就是,直观上理解,就是希望正例pair和负例pair隔开至少的距离,这一函数同样可以写成另外一种形式,让正例pair和负例pair采用不同的函数,例如,,。

ContrastivePair

2.1MoCo

论文标题:MomentumContrastforUnsupervisedVisualRepresentationLearning

前面提到了,样本数量对于学习到的样本质量有很大的影响。MoCo做的事情很简单,就是把负例样本的encoder和mini-batch大小解耦。也就是说,原先在算目标函数的时候,负例样本对也会为loss产生贡献,因为也就会有梯度回传给对应的encoder,那么这样在实现的时候,样本数量必然会受到batchsize的限制,从而影响学习到表示的质量。

为此,MemoryBank提出我把所有样本的表示都存起来,然后每次随机采样,这样就可以认为我的负例样本理论上可以达到所有样本的数量,具体的做法就是每一轮来encode一次所有的变量,显然,这样很吃内存,并且得到的表示也和参数更新存在一定的滞后。

MoCo则改善了上述的两个缺点,一方面,用一个queue来维护当前的negativecandidatespool,queue有着进出的动态更新机制,一方面能够和Mini-batch解耦,queuesize可以设置的比较大,另外一方面也就不用对所有样本做类似预处理的进行编码;对于负例样本的参数,采用Momentumupdate的方式,来把正例encoder的参数copy给负例encoder:

三种方式的示意图也在这一小节的开头给出了,可以清楚的看到三种方式的区别。这种对比画图的方式对于说明问题很有帮助,可以在论文中进行尝试。

2.2SimCLR

论文标题:ASimpleFrameworkforContrastiveLearningofVisualRepresentations

MoCo刚说完样本数量对于对比学习很重要,这边SimCLR就从另外一个角度,说构建负例的方式(图像上,就是对于图像的transformation)也很重要,探究了transformation、batch-size大小等对于学习到的表示的影响,并且把这个框架用下面这张图来说明:

其中最后一个结论,和MoCo的初衷是符合的,并且作者虽说不用Memory-bank,但是SimCLR尝试的bsz也达到了令人发指的8192,用了128块TPU,又是算力党的一大胜利。

MoCov2也是利用了上面的第一点和第三点,在MoCo基础上得到了进一步的提升,然后作者还也明确的点名了SimCLR,称不需要使用那么大的batchsize也能超过它,可能这就是神仙打架吧。

2.3CPC

论文标题:RepresentationLearningwithContrastivePredictiveCoding

为了把历史的信息也加入进去,作者提出可以在上额外增加一个自递归模型,例如GRU,来在表示之中融入时序关系,得到相应的来进行对比学习。在下游任务中,既可以使用也可以使用,又或者是二者的融合,可以根据任务需要来进行灵活的选择。

Theory&Application

3.1ICML2019

论文标题:ATheoreticalAnalysisofContrastiveUnsupervisedRepresentationLearning

3.2NIPS2017

论文标题:ContrastiveLearningforImageCaptioning

作者引入对比学习,把对应的图像和标题作为正例pair,并把其中的图像随机采样得到负例pair,并且在已有的sota模型上优化,提升生成的caption的效果。

3.3ICLR2020

论文标题:ContrastiveLearningofStructuredWorldModels

前面提到,表示学习能够较好的解决一些简单的任务,但是理解物体之间的关系以及建模其间的交互关系不单单需要好的表示,同样需要一个好的归纳偏好。

这里的对比学习是从TransE架构迁移而来,具体地,在TransE中,我们会希望一个三元组的能够让尽可能的小,即的表示加上relation的表示和的表示尽可能地接近,而迁移到世界模型中,就是要将entity换成物体的state,relation换成action,即经过图卷积后的得到的新的表示,通过下面的式子进行优化:

Summary

本文介绍了关于对比学习背后的动机,以及一系列在图像、文本上的一些工作,在计算机视觉领域,其习得的表示能够很好地在下游任务泛化,甚至能够超过监督学习的方法。

回过头来看,预训练模型从ImageNet开始,后来这一思想迁移到NLP,有了BERT等一系列通过自监督的预训练方法来学习表示,后来这一想法又反哺了计算机视觉领域,引出了诸如MoCo、SimCLR等工作,在一系列分割、分类任务上都取得了惊人的表现。

那么,这一思想会不会又再次和NLP结合,碰撞出新的火花呢,让我们拭目以待。

参考链接

点击以下标题查看更多往期内容:

#投稿通道#

让你的论文被更多人看到

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。

来稿标准:

稿件确系个人原创作品,来稿需注明作者个人信息(姓名+学校/工作单位+学历/职位+研究方向)

THE END
1.对比学习Python实现对比学习代码对比学习是一种通过对比正反两个例子来学习表征的自监督学习方法。对于自监督对比学习,下一个等式是对比损失: L i , j = ? log ? e x p ( z i ? z j / τ ) ∑ k = 1 , k ≠ i 2 N e x p ( z i ? z k / τ ) \mathcal{L}_{i,j} = - \log \frac{exp(\textbfhttps://blog.csdn.net/xyisv/article/details/122479808
2.NLP简单的对比学习实战代码mob649e8164659f的技术博客NLP简单的对比学习实战代码 NLP简单的对比学习实战指南 对比学习是一种自监督学习的策略,常用于提升深度学习模型在无标签数据上的表现。在自然语言处理(NLP)领域,对比学习能够帮助我们有效地从文本数据中学习有用的特征。本文将通过一个简单的实战案例来让你了解如何实现NLP中的对比学习。https://blog.51cto.com/u_16175500/11846854
3.git对比代码的算法有哪些?Worktile社区4. 基于哈希的对比算法(Hash-based Diff Algorithm):这种算法使用哈希函数来对比代码的内容。它计算每个代码块的哈希值,并将其与另一个版本进行比较。这种算法的优点是速度快,但无法处理细微的代码变化。 除了以上算法,还有一些基于统计分析、机器学习或深度学习的对比算法正在不断发展,并且在某些特定的场景下可能更适https://worktile.com/kb/ask/204884.html
4.超详细的对比学习综述腾讯云开发者社区在这里,我们将之前的想法进行抽象,用空间考虑对比学习。 最终目标: 缩小与正样本间的距离,扩大与负样本间的距离,使正样本与锚点的距离远远小于负样本与锚点的距离,(或使正样本与锚点的相似度远远大于负样本与锚点的相似度),从而达到他们间原有空间分布的真实距离。 丈量二者距离:欧几里得距离,余弦相似度,马氏距离(https://cloud.tencent.com/developer/article/2034623
5.十大经典机器学习算法详解及代码实现机器学习领域有许多经典算法,对于初学者来说,全面学习可能有些挑战。以下是十大经典机器学习算法的详细介绍,包括书籍、课件和源代码,供大家参考: 决策树 决策树是一种基于概率的决策分析方法,通过构建决策树来评估项目的风险和可行性。它是一种直观的概率分析图解法。 https://mbd.baidu.com/newspage/data/dtlandingsuper?nid=dt_4130926917743983440
6.[附代码]A*算法&Dijkstar算法对比可视化及操作哔哩哔哩关注公众号:规划与代码之旅承接复杂网络、机器学习算法、城乡规划、交通规划、物流配送等方面论文辅导,有意留意面包多, 视频播放量 1290、弹幕量 0、点赞数 37、投硬币枚数 23、收藏人数 87、转发人数 4, 视频作者 小土豆6666条, 作者简介 ,相关视频:01-零代码实现—高https://www.bilibili.com/video/BV18z421S716
7.对比研究:两篇基于强化学习算法的智能导航论文上文DQM智能导航算法涉及的源代码和用论文给定数据集训练的AI模型: DQM.py14.46KBPY5次下载 dqn.pth332.10KBPTH 学习AI算法必须要有较强的数学功底和直觉,否则只会停留在一个较低的层次。另外具体开发算法最好自己完成证明,否则算法在严谨性方面会大打折扣。 https://www.kechuang.org/t/90315