浅聊对比学习(Contrastive Learning)

作者丨parasol@知乎 (已授权)

来源丨https://zhuanlan.zhihu.com/p/521614413

编辑丨极市平台

导读

 

本文通过解读对比学习的经典论文和综述,介绍对比学习的概念,主流方法和优势。对于不同方法的算法设计和实验结果,作者提供了他的深入思考。

什么是对比学习?

Metrics learning + self-supervised learning

对比学习在解决什么问题?

  • 如何学习representation

  • 解决数据稀疏的问题

  • 如何更好的利用没有label的数据

    • 未打标的数据远远多于打标的数据,不用简直太浪费了,但是要打标又是一个耗时耗力耗钱的事儿

  • 有监督学习的缺点:

    • 泛化能力

    • Spurious Correlations伪相关 (https://www.zhihu.com/question/409100594)

    • Adversarial Attacks对抗攻击 (https://zhuanlan.zhihu.com/p/104532285)

为什么现有的方法解决不了这个问题?

  • 有监督学习天然所带来的问题:泛化能力、过拟合、对抗攻击等等

  • 有监督学习本身就无法使用无标签的数据

现有的对比学习方法

Noise-contrastive estimation: A new estimation principle for unnormalized statistical models

论文链接:http://proceedings.mlr.press/v9/gutmann10a/gutmann10a.pdf

论文讲解(这篇论文的证明很不错,很值得学习):

  • 知乎:https://zhuanlan.zhihu.com/p/58369131

  • CSDN:https://blog.csdn.net/littlely_ll/article/details/79252064

One Sentence Summary

给现有的样本加上噪声,作为负样本,模型对原本真实的样本和新增的负样本进行区分,从而将softmax这种低效的计算转化成二分类的logloss,计算效率更高,下面公式里的  代表真实的样本,  代表加了noise后的样本。

11a14a9406b186bdadcfa26f1410da5c.jpeg

但是这里会出现一个问题,如果我们的noise分布选的不好,效果可能并不一定会好,所以在这篇paper里作者也提到了在增加noise的时候,尽量和现有的数据分布相似,这样能最大程度上提高训练的效果。

Intuitively, the noise distribution should be close to the data distribution, because otherwise, the classification problem might be too easy and would not require the system to learn much about the structure of the data. As a consequence, one could choose a noise distribution by first estimating a preliminary model of the data, and then use this preliminary model as the noise distribution.

这个方法在推荐里的应用,个人观点是可以在召回里来尝试,毕竟现在的召回面临着很大的selection bias问题(有朋友在召回里尝试过,效果一般,只能说明老paper时间比较久了,已经被现在的SOTA beat掉了,不过这篇文章的idea很有意思,数学证明也很不错,可以学习下)

Representation Learning with Contrastive Predictive Coding

论文链接:https://arxiv.org/pdf/1807.03748.pdf

论文讲解:https://zhuanlan.zhihu.com/p/317711322

One Sentence Summary

提出CPC框架,将representation的学习从一个生成模型,转换成了分类模型,用于下游的其他任务。文章优化的目标从最大化  预测  的概率  变成优化最大化  和  之间的互信息 

402 Payment Required

 ,通过最大化互信息,可以抽取出输入之间的一些共性的潜变量。

06cb257777812e49cd982ff437908b80.jpeg

由于没有办法获得到  的联合概率,因此文章通过建模两种样本的密度比的方式来绕过联合概率(两种样本:真实样本和采样出来的负样本),其中  表示  的预测和未来  的相似程度,  是将  转换到  空间,然后用内积来表示相似程度,文章也证明了

8da29058da230988093bfc237564eba6.jpeg19806a0bc11334c635970f317a23d4f1.jpeg

f_k 正比于密度比的证明

本文训练的loss

9a502c831fd7c326c1f8413cc0d21164.jpeg

  • 从而将一个生成模型  转变成了分类模型

  • 训练出来的  和  可以用于下游的任务:比如分类任务等等

  • 文章比较有意思的点:证明了互信息的下界和总样本数是有关的,N越大,互信息越大

8dc74c223bf6866f7b903eb88508f95c.jpeg9fa9756168ca653b2b9d6f7f9f1d946c.jpeg

Learning Deep Representations by Mutual Information Estimation and Maximization

论文链接:https://arxiv.org/pdf/1808.06670.pdf

论文讲解传送门:https://zhuanlan.zhihu.com/p/277660074

One Sentence Summary

加入了更细致的local feature与output的互信息,加上了先验,让先验服从一定的分布,从而能更好的具有编码空间

我对这一点有点concern,什么样的编码空间是 更好的空间呢?这个先验也只能去拍,怎么去拍,只能不断的去尝试吗,是不是可以学成一个动态的空间,如果我们的数据是多峰的,可能一个分布就不太能拟合,混合高斯分布会不会更优?感觉都是可以改进的方向)

4dfe6d833d5b5b9a888627eaccaeb965.jpeg

Global
9c31c1c4609ae807a53ba0b427d1bb92.jpeg
local

主要思想和InfoNCE差不多,多了local/prior matching,和具体场景有关,感觉更像是在bagging loss

  • global MI/local MI: 这俩没啥好介绍的,global是拿输入和全局的feature去做MI的计算,local是拿中间的feature和全局的feature去做MI的计算(多的这部分local的loss,我个人的理解其实也是换了种方式来增大样本数量,进而带来了收益)

  • Prior matching(adversarial autoencoders):拍了一个feature的先验分布,训练一个discriminator,然后让这个discriminator和模型学到的全局feature进行battle(对抗学习的min-max方式),编码器的输出更符合先验的分布,感觉这个就有点玄学了~

8baf9a475f681f2692115b5b392aa94b.jpeg

Prior matching

Loss:前面两项分别对应global和local,最后一项对应Prior matching

8702e0a8be2f4fe0b25fd0c5ab56eb27.jpeg

SimCLR-A Simple Framework for Contrasting Learning of Visual Representations

论文链接:https://arxiv.org/abs/2002.05709

One Sentence Summary

提出了一个对比学习的框架,在今天看来框架不算特别新颖,但做了非常详实的实验,来验证对比学习到底能从哪些方面受益;个人感觉更像是一篇实验总结性paper:告诉你对比学习的一些特性,提供一些实操中的调参方向

算法

  • loss就是softmax loss + temperature

  • 这里有个需要注意的点,他在学到的  后面加了一个  ,然后进行loss的计算和梯度的回传,最后真正在使用的时候用的只有  ,这里作者的猜想和实验确实很有意思,很值得借鉴。(虽然在SimCLRV2中这个结论有变的很不一样了哈哈哈,后面会讲到)

  • 框架图:模型训练的时候  和  同时训练,但是训练完后,就把  扔掉了,只保留  ,这里是我觉得这篇论文最有意思的点,一般的思路其实应该是直接用  的输出去计算对比学习的loss~

e57142ff7920edfb9a26344ba9e49bc4.jpeg

框架图

算法步骤

  •  代表data augmentation方式的集合:比如旋转,灰度,裁剪等等

  • batch_size = N,对每个batch内的每张图片,随机从  中选择两种data augmentation,得到两张图片,这两张图片就是一个正样本对,总共可以生成2N个样本,每个样本有一个样本和自己是正样本对,剩下的2N-2都是负样本,这里是用了一个softmax+temperature的loss

06c66aaa373126a2b3bb6e97ab5deaee.jpeg

SimCLR算法

实验

实验图太多就不贴了,想看detail的可以直接看我的「paper_reading记录:https://bytedance.feishu.cn/docx/doxcn0hAWqSip1niZE2ZCpyO4yb」,只对个人认为有意思的点说下

  • 实验证明对比学习可以从更大的batch size和更长的训练时间上受益

    • 作者自己在这里也说:效果的提升是来自于batch_size越大,训练时间越久,见过的负样本越多,所以效果越好,这里其实和batch_softmax也有异曲同工之妙,在推荐里其实也有类似的经验~

1f153fa2c4ca1224d59198d06523e5e6.jpeg

  • 验证在对比学习loss计算之前加入一个非线性的映射层会提高效果

    • 作者认为是g被训练的能够自动去掉data transformation的噪音,为了验证这个猜想,作者做了这个实验:用h和g(h)来区分做了哪种data transformation,从下面第二张实验结果图看出,h确实保留了data transformation的信息

0b818c1632aa5e06881cbd2a842e37d3.jpeg

Furthermore, even when nonlinear projection is used, the layer before the projection head, h, is still much better than the layer after, z = g(h), which shows that the hidden layer before the projection head is a better representation than the layer after
b3e6437736b946e6cdbd935438af1e88.jpeg
  • 其他贡献

      • 实验证明「组合不同的data augumentation」的重要性

      • 实验证明对比学习需要比有监督学习需要更强的data agumentation

      • 实验证明无监督对比学习会在更大的模型上受益

      • 实验证明了不同loss对效果的影响

SimCLRV2-Big Self-Supervised Models are Strong Semi-Supervised Learners

论文链接:https://arxiv.org/abs/2006.10029

One Sentence Summary

提出了一个基于对比学习半监督学习框架,在SimCLR后面接了一个distillation模块在做半监督学习,从而很好的提升了效果。(这篇paper很有意思的点:用了self-distillation居然会比原始的模型效果更好,这一点在组内做paper reading的时候,同事提出来了这个问题,后来调研了下,主要是说做self-distillation会让teacher模型学到不同的视图)

算法

分为三步:pre-training、fine-tuning、distillation(self-distillation)

348a36bb496d1136bd5dcd28e8e65216.jpeg

  • Pretraining:用了SimCLR,然后用了更深的projection head,同时不是直接把projection head丢了,而是用projection head的1st layer,来做后面的fine tune。(这也太trick了吧)

  • Fine-tune:用SimCLR训练出来的网络,接下游的MLP,做classification任务,进行fine-tune

  • disitill:用训好的teacher network给无label的数据打上标签,作为ground truth,送给student network训练。这个地方作者也尝试了加入有标签的(样本+标签),发现差距不大,所以就没有使用有监督样本的(样本+标签)

f8079aecb0eff7ab3b5e45595998d957.jpeg7b6eaa83731c6a8a6ede298e5e9047a1.jpeg

实验结果

实验图就不全贴了,想看detail的可以直接看我的「paper_reading记录:https://bytedance.feishu.cn/docx/doxcn9P6oMZzuwZOrYAhYc5AUUe」

看一张放在论文首页的图吧(按照李沐大神的话说,放在首页的图一定是非常牛逼的图!),确实可以看出只用1%的数据+标签,就能获得到和有监督学习用100%数据+标签的效果;用10%的数据+标签就已经超过SOTA了,确实还是挺牛逼的

5159e415ce3fad1d90a0f46c8b4f3dbc.jpeg

  • Distillation Using Unlabeled Data Improves Semi-Supervised Learning

    这个实验很有意思的点是,无论是self-distillation还是distill small model,效果都比teacher model效果好,这里的解释可以看这里:

      • 知乎:https://zhuanlan.zhihu.com/p/347890400;

      • 原文:https://arxiv.org/pdf/2012.09816.pdf

        很有趣~主要在说:distill能让student学到更多的视图,从而提升了效果~

9c4ae9ca154db7185258487c742fce93.jpeg

  • Bigger Models Are More Label-Efficient

  • Bigger/Deeper Projection Heads Improve Representation Learning

Mutual Information Neural Estimation

论文链接:https://arxiv.org/abs/1801.04062

One Sentence Summary

将互信息加入到loss function中,从理论上证明了MINE更flexible/scalable;减轻了GAN中的mode-dropping问题,同时提高了ALI的重建和推理效果。(这篇文章的理论推导很多,感兴趣的建议看原paper或者Link)

算法

  • 给定一个batch内的数据  ,其中  就是我们的训练集,batch_size = b

  • 然后从训练集中随机sample b个z,作为负样本

  • 计算loss,并回传梯度

8d64271682380a3380047a6f9fc3a3ae.jpeg

实验

实验图就不全贴了,想看detail的可以直接看我的「paper_reading记录:https://bytedance.feishu.cn/docx/doxcnMHzZBeWFV4HZV6NAU7W73o」

  • 捕获非线性的依赖的能力

3598c33a1e5507000d36a337d08614c3.jpeg

接下来看下怎么将互信息运用到GAN和Bi-GAN上。

  • GAN上的应用:

4577d322145a3d26d279cd035fde656c.jpeg

  • Bi-GAN上的应用:

763dc78525a960782582fb36ee8a7a4d.jpeg

对比学习在推荐里的应用场景

在召回阶段:

  • 负采样逻辑优化:现在很多推荐系统里的负采样都是随机采样的,虽然随机采样已经能拿到不错的效果了,但是一定还有优化空间,比如InfoNce文章中提到的增大负采样的个数能够提升互信息的下界,同时在工业界的best practice中,往往也能发现batch_softmax的效果也很不错

  • i2i召回:基于item2item召回的时候,往往是基于item1的embedding去召回与item1相似的items,这时候embedding的相似性就显得尤为重要,但是这里有个问题,如何选择构造与item1相似的item作为正样本?(用户点击过的作为item作为相似的样本也不合理,毕竟用户的兴趣是多维的,点过的每个样本不可能都属于同一个类别或者相似的,虽然通过推荐的大量数据,协同过滤可能可以在全局找到一个还不错的结果,但是直接拿用户序列作为正样本来做一定是不合理的)

一点小思考

对比学习的优势:

  • 可以比较好的单独优化representation,和下游任务无关,能够最大程度上的保留meta-information,如果一旦做有监督的学习,那抽取出来的信息就是和当前目标相关的,不排除可能学到一些噪音特征

  • 在做data augumentation,模型见到了更多的样本,记忆的东西更全,效果好也是预期之中的

  • 去噪

Reference

Gutmann M, Hyvärinen A. Noise-contrastive estimation: A new estimation principle for unnormalized statistical models[C]//Proceedings of the thirteenth international conference on artificial intelligence and statistics. JMLR Workshop and Conference Proceedings, 2010: 297-304.

Oord A, Li Y, Vinyals O. Representation learning with contrastive predictive coding[J]. arXiv preprint arXiv:1807.03748, 2018.

Hjelm R D, Fedorov A, Lavoie-Marchildon S, et al. Learning deep representations by mutual information estimation and maximization[J]. arXiv preprint arXiv:1808.06670, 2018.

Hjelm R D, Fedorov A, Lavoie-Marchildon S, et al. Learning deep representations by mutual information estimation and maximization[J]. arXiv preprint arXiv:1808.06670, 2018.

GitHub - asheeshcric/awesome-contrastive-self-supervised-learning: A comprehensive list of awesome contrastive self-supervised learning papers. (https://github.com/asheeshcric/awesome-contrastive-self-supervised-learning)

张俊林:对比学习(Contrastive Learning):研究进展精要 (https://zhuanlan.zhihu.com/p/367290573)

极市平台:深度学习三大谜团:集成、知识蒸馏和自蒸馏:https://zhuanlan.zhihu.com/p/347890400

Chen T, Kornblith S, Norouzi M, et al. A simple framework for contrastive learning of visual representations[C]//International conference on machine learning. PMLR, 2020: 1597-1607.

Chen T, Kornblith S, Swersky K, et al. Big self-supervised models are strong semi-supervised learners[J]. Advances in neural information processing systems, 2020, 33: 22243-22255.

Belghazi M I, Baratin A, Rajeshwar S, et al. Mutual information neural estimation[C]//International conference on machine learning. PMLR, 2018: 531-540.

d360f8d6be4440ab0b92ad9826948eca.png

Allen-Zhu Z, Li Y. Towards understanding ensemble, knowledge distillation and self-distillation in deep learning[J]. arXiv preprint arXiv:2012.09816, 2020

本文仅做学术分享,如有侵权,请联系删文。

干货下载与学习

后台回复:巴塞罗自治大学课件,即可下载国外大学沉淀数年3D Vison精品课件

后台回复:计算机视觉书籍,即可下载3D视觉领域经典书籍pdf

后台回复:3D视觉课程,即可学习3D视觉领域精品课程

计算机视觉工坊精品课程官网:3dcver.com

1.面向自动驾驶领域的多传感器数据融合技术

2.面向自动驾驶领域的3D点云目标检测全栈学习路线!(单模态+多模态/数据+代码)
3.彻底搞透视觉三维重建:原理剖析、代码讲解、及优化改进
4.国内首个面向工业级实战的点云处理课程
5.激光-视觉-IMU-GPS融合SLAM算法梳理和代码讲解
6.彻底搞懂视觉-惯性SLAM:基于VINS-Fusion正式开课啦
7.彻底搞懂基于LOAM框架的3D激光SLAM: 源码剖析到算法优化
8.彻底剖析室内、室外激光SLAM关键算法原理、代码和实战(cartographer+LOAM +LIO-SAM)

9.从零搭建一套结构光3D重建系统[理论+源码+实践]

10.单目深度估计方法:算法梳理与代码实现

11.自动驾驶中的深度学习模型部署实战

12.相机模型与标定(单目+双目+鱼眼)

13.重磅!四旋翼飞行器:算法与实战

14.ROS2从入门到精通:理论与实战

15.国内首个3D缺陷检测教程:理论、源码与实战

16.基于Open3D的点云处理入门与实战教程

重磅!计算机视觉工坊-学习交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有ORB-SLAM系列源码学习、3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、深度估计、学术交流、求职交流等微信群,请扫描下面微信号加群,备注:”研究方向+学校/公司+昵称“,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进去相关微信群。原创投稿也请联系。

7a968dd7e26ae466970c9bacc00897e4.jpeg

▲长按加微信群或投稿

b75e419a1d1c8de9b0c7843f76c710f1.jpeg

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的视频课程(三维重建系列三维点云系列结构光系列手眼标定相机标定激光/视觉SLAM自动驾驶等)、知识点汇总、入门进阶学习路线、最新paper分享、疑问解答五个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近4000星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

5041992ade77065eebea1b933ae8f2f5.jpeg

 圈里有高质量教程资料、答疑解惑、助你高效解决问题

觉得有用,麻烦给个赞和在看~  

自监督对比学习是一种无监督学习方法,旨在通过将数据样本与其在相同任务下的变体进行比较来进行特征学习。其核心思想是将一个样本与自身的不同变体进行对比,以推动特征的区分度增加。 在自监督对比学习中,通常使用一种转换函数对输入样本进行变换,生成多个变体。这些变换可以是图像旋转、裁剪、亮度调整等,也可以是对文本数据进行掩码、重排等操作。对于每个输入样本及其变体,模型将利用一个对比损失函数来度量它们之间的相似性。 通过自监督对比学习,模型会学习到一组鲁棒的特征表示。这些特征不仅能够区分同一样本与其变体,还能够区分不同样本之间的差异。通过不同样本之间的对比学习,模型可以学习到更加丰富的语义信息,提高数据的表征能力。 自监督对比学习计算机视觉和自然语言处理等领域得到了广泛的应用。例如,在图像领域,可以利用自监督对比学习来学习图像中的局部特征、形状和纹理等信息。而在自然语言处理领域,可以通过对文本进行掩码、重排等方式来进行自监督对比学习,以学习词语、句子和文档的语义表示。 自监督对比学习的窥探给了我们一个更好的方式,通过无监督学习方法来解决许多现实世界中的问题。它为我们提供了一种从大规模数据中学习有用表示的方式,提高了学习算法的效率和泛化性能。通过进一步的研究和发展,自监督对比学习注定将在更多的领域中发挥重要的作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值