前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >拉开你和别人的距离,只差 Contrastive Learning 这一步

拉开你和别人的距离,只差 Contrastive Learning 这一步

作者头像
OpenMMLab 官方账号
发布于 2022-04-08 10:08:43
发布于 2022-04-08 10:08:43
9050
举报
文章被收录于专栏:OpenMMLabOpenMMLab

前言

上一篇自监督学习文章中,我们介绍了基于代理任务 (pretext task) 的自监督学习算法,各类任务均取得了一定的效果,然而并没有相对统一且效果令人满意的自监督学习范式。随着 MoCo 横空出世,视觉自监督领域掀起了一股对比学习的浪潮。

简单来说,对比学习的思路就是:一张图片,经过不同的数据增强,被神经网络所提取的特征,仍应具有高度的一致性。本篇文章我们将分析 7 篇主流论文,带大家一起梳理对比学习的发展脉络。

MoCo v1

论文链接:

https://arxiv.org/abs/1911.05722

其实 MoCo 并不是第一篇提出对比学习概念的文章,在 MoCo 之前也有一些算法是基于某种形式的对比损失函数,例如 NPID、CPC、CMC 等,但是 MoCo 这篇论文则将之前的对比学习总结成字典查找的框架,再基于此提出 MoCo。

作者提出了 Momentum Contrast 的概念,另外为无监督对比损失函数构建了足够大且具有高度一致性的字典,并通过队列 (queue) 的数据结构进行维护,下图即为 MoCo 论文思路的示意图,动量编码器以及通过队列存储特征向量,便是该文章两大最主要的特点了。

结合上图,在前向计算时,对每个 batch 数据施加两组不同的数据增强,从而得到两组数据,作为模型的输入,其中一组为 x_query,通过 q_encoder 获得对应的特征向量 q;另一组为 x_key ,通过 k_encoder (即上图的 momentum encoder) 获得对应的特征向量 k。这两组 q,k 则作为正样本对进行损失函数的计算。而之前存在 queue 中的所有特征向量 k 和本次计算所得的 q 则作为负样本对进行损失函数计算,两者结合便是 MoCo 算法训练所需要的损失函数。在前向计算最后,需要将本次计算的 k 送入队列,若队列已满,则最旧的特征向量出列。

在反向计算时,q_encoder 通过梯度反向传播进行更新,但 k_encoder 则是根据 q_encoder 采用动量更新参数的模式进行更新,以此来保证模型一致性,这也就是动量编码器命名的由来,公式如下:

其中 theta_q 和 theta_k 代表模型 q_encoder 和 k_encoder 的参数,m 为动量参数。

另外,MoCo 通过队列储存特征向量的方式,避免在训练过程中输入大 batch size,减少了硬件资源的需求和训练时间。而且由于队列的长度为 65536(算法默认设置),可以提供大量的负样本进行对比学习;且队列 First Input First Output 的原则,可以及时更新特征向量,删除过于老旧的特征向量,一定程度上保证队列的一致性和训练的稳定性。这也是一个非常巧妙的设计。

MoCo 在自监督领域中取得了 SOTA 的结果,视觉自监督领域也随之火爆了起来。

SimCLR

论文链接:

https://arxiv.org/abs/2002.05709

在 MoCo 论文发布之后,很多研究者都投入到了对比学习的研究当中来,其中 Google 的 SimCLR 采用非常简单的 End-to-End 的训练框架取得了 SOTA 的结果。下图(上)为算法逻辑结构图,下图(下)为监督学习和各类自监督算法在 ImageNet-1k 上的结果比较。

SimCLR 提出四大结论:

  • 对比学习中,强大的数据增强至关重要,相比于有监督学习,对比学习从中受益更多
  • 在网络学习到的特征和损失函数计算之间,添加可学习的非线性层有助于特征的学习
  • 归一化的 embeddings 和合适的 temperature 参数有助于特征表示的学习
  • 越大的 batch size 和越久的训练时间有助于对比学习获得更好的结果,另外和监督学习一样,大网络可以取得更好的结果

以上几点,论文都做了相当详细的实验验证。以数据增强为例,本文共对接近 10 种增强方式进行实验,最终选择了 random crop (包括 flip 和 resize)、color distortion 和 Gaussian blur 进行训练。另外,针对不同大小的 batch size 和训练时长,也进行了充分地实验,结果如下图:

和 MoCo 不同的是,SimCLR 没有使用动量更新也没有队列来储存特征向量,它通过大 batch size 来构建负样本,网络就是普通的 ResNet + MLP,通过梯度反向传播来更新,和普通的分类网络训练流程并无二致,正如标题所说,‘A Simple Framework’ 名副其实。

SimCLR 针对各种技巧做了非常详尽的实验,并进行总结,提出了一个简单而有效的框架,为后续对比学习的研究打下了夯实的基础,各种技巧也都被多篇论文所借鉴学习。

MoCo v2

论文链接:

https://arxiv.org/abs/2003.04297

这篇论文非常简单,只有短短两页,其实可以说是一篇技术报告。MoCo v2 验证了 SimCLR 中所提出的两个设计,相比 MoCo v1,其结果提升非常可观,甚至超过了 SimCLR 的结果,而且训练时间更快,所占资源更少。

如上图(左)所示,在 SimCLR 中所提出的更加强大的数据增强以及添加 MLP 非线性层可以非常有效地提升特征学习的质量。随着 SimCLR 和 MoCo v2 的发表,视觉自监督学习的结果总算是接近了有监督学习的水平。

BYOL

论文链接:

https://arxiv.org/abs/2006.07733

BYOL 这篇论文在对比学习框架的训练中,摒弃了负样本,而仅依靠正样本进行训练,也取得 SOTA 结果。主要贡献有以下三点:

  • 提出 BYOL,摒弃负样本
  • BYOL 所学习到的特征表达,在半监督和迁移学习的基准测试上也达到 SOTA
  • 证明了 BYOL 对 batch size 的变化容忍度更高

算法框架如上图,相比于之前的算法,BYOL 依然采用双网络,命名为 online 和 target,前向计算和之前算法差别不大,不过在 online 网络中,增加了 predictor,并不是完全对称。另外在动量更新 target 网络时,动量参数也会随着训练的进行而更新。损失函数则是简单的 MSE,只需要对正样本进行距离计算,而没有负样本之间的计算。

在之前对比学习中,负样本作为一个必须部分,且都需要给定足够多的负样本,对比学习才能达到更好的效果,以此来防止模型学到捷径解,从而避免模型坍缩;而在 BYOL 中则摒弃了负样本,通过非对称结构以及动量更新方式来避免模型坍缩,并且仍然达到了 SOTA 结果,这也是这篇论文当时引起剧烈讨论的因素之一。

SwAV

论文链接:

https://arxiv.org/abs/2006.09882

SwAV 为 Swapping Assignments between multiple Views 的缩写,这篇论文和上述的 BYOL 是同期工作,并且也取得了 SOTA 结果。主要贡献有:

  • 提出一种在线聚类损失,不论大小 bacth size,不用大型队列和动量编码器,也可有效训练
  • 提出 multi-crop 数据增强策略,增加输入图片的视角

上图(左)为对比学习的抽象框架,而 SwAV 的算法框架和之前方法最大的不同点在于构建了一个名为 C 的聚类中心,将自监督学习和聚类方法相结合,利用上图(右)编码器 f 的输出 z1 和聚类中心向量 c 点乘的结果,可以得到相似度矩阵,以此来预测 Q2(Q1 和 Q2 则是通过 sinkhorn 算法得到),反之亦然,以此达到交换预测的效果。

采用聚类的方法,也有一些好处:一是通过和聚类中心进行对比,可以降低对负样本的需求;二是聚类中心有一定含义,而随机抽样反而可能会抽出正样本或者类别也不均衡。本文作者其实也是 Deep Cluster 的作者,这篇论文也是无监督领域非常经典的论文之一。

另外,本文的第二点贡献 multi-crop 的数据增强策略,对最终的结果影响很大,实验结果如上图,如果移除 multi-crop,则最终结果和 MoCo v2 类似,不过该数据增强方法也是一个即插即用性的方法,其他对比学习框架下的算法也具有提升学习效果的作用。

SwAV 提出了一种新的思路,结合聚类和对比学习进行训练,另外新的 multi-crop 数据增强策略也非常有效,值得后续算法学习应用。

SimSiam

论文链接:

https://arxiv.org/abs/2011.10566

SimSiam 这篇论文则是对上述多篇论文进行了总结,并且化繁为简:

  • 不使用负样本对
  • 不使用大 batch size
  • 不需要动量编码器

在不使用上述技巧的情况下,仍然能学到优秀的特征表达,算法的前向过程和之前算法类似,并且也是采用简单的 MSE 损失函数。作者在对比实验后提出,stop-gradient 才是避免模型坍缩的关键,如果不使用 stop gradient,那么不论如何变换模型,都会得到捷径解,即模型输出常数,损失函数达到理论的最小值。作者提出假设, SimSiam 的实现是类 EM 算法,而 stop-gradient 的存在使得算法可以按照 EM 的思路进行迭代从而避免模型坍缩,在这我们不做详细赘述,可以阅读原论文的假设和推导。

作者在 SimSiam 这篇论文中,对前面的一些工作都做了总结,和之前的一些 SOTA 算法做了对比:

  • 相比于 SimCLR,一定程度上可认为是 SimCLR 去掉了负样本
  • 相比于 SwAV,一定程度上可认为是 SwAV 去掉了在线聚类
  • 相比于 BYOL,一定程度上可认为是 BYOL 去掉了动量编码器

并且,对比之前几篇非常有影响力的工作在 ImageNet-1k 上的结果,SimSiam 对于特征的学习非常迅速,但是在长时训练下的提升不如 BYOL 等算法。

SimSiam 是一篇非常全面且细致的论文,针对对比学习中的所提出的各类方法,做了详尽的实验,应用了最少最有效的技巧,获得了 SOTA 的结果。

MoCo v3

论文链接:

https://arxiv.org/abs/2104.02057

随着 2021 年 ViT 网络的爆火,如何将对比学习的训练范式和 ViT 的网络主干结合也是大家经常在思考的问题。MoCo v3 在原先工作的基础上,改动了一些训练方式:

  • 弃用了 queue 队列进行 key 的储存,并且采用大 batch (4096) 进行训练
  • 增加了 prediction head,所以 q_encoder 和 k_encoder 不再完全对称
  • 采用了对称损失函数

通过以上的改变,基于 ResNet50 的网络主干的结果也有一定提升,结果如下表所示:

在完成基于 ResNet50 的实验之后,论文将重心移到了对比学习 + ViT 的实验上,实验中发现这种组合形式会导致训练过程不稳定,在大 batch 情况下尤为明显,这个现象会导致最终的训练结果不尽如人意,在 batch size 超过一定程度后,模型准确率反而会下降。

于是,作者团队对 batch size、learning rate、optimizer 都进行实验,但是准确率突然下降的问题并没有得到解决,最后在监督梯度时发现,梯度的突然增大、出现波峰,会导致准确率的突然下降,并且梯度变化的这个现象在第一层中会先于最后一层出现,如下图。

所以,MoCo v3 提出 trick,在训练过程中,可以冻结 ViT 中的 patch projection 层,即随机初始化后不进行参数学习,以此来缓解该问题,采用该 trick 后,可以看到训练曲线恢复正常(如下图上),并且该方法对于 ViT + SimCLR 和 ViT + BYOL 均可以缓解准确率突然下降的问题(如下图下)。但是作者认为该 trick 并没有完全解决问题,如果学习率过大的话,模型训练仍然会变得不稳定,且第一层并不是训练不稳定的关键因素,所有层都与之相关,不过在文章中并没有更加详细的解释。

MoCo v3 这篇论文实验思路清晰,且一定程度上解决了在结合 ViT 主干和对比学习框架过程中所遇到的问题,这还是非常值得我们去学习的。

结语

通过上述论文,我们可以了解到对比学习的一个整体发展脉络,研究者们希望通过简单且有效的框架来解决视觉自监督学习所遇到的各种问题。除了以上几篇,也有其他非常优秀的论文,例如 BarlowTwins、DINO ,之后有机会再跟大家一一介绍。

本期自监督学习算法内容就先到这里啦,如果大家想要进行更深入地学习,可以借助我们 MMSelfSup 的算法库,非常欢迎大家来使用,Star 和 PR !

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenMMLab 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
新手从事直播软件源码开发之需求分析及研发技术栈
如果从YY或六间房的PC秀场直播间系统软件算起,直播软件已经在国内风云了至少10年了,站在用户角度提到直播系统大家基本都知道核心功能有开直播刷礼物等,那么如果站在直播软件源码开发搭建的技术角度去看呢?是不是要从需求调研分析、脑图整理、产品经理画原型图、再到UI设计根据需求分析脑图原型图等为基础出设计图。现就山东布谷科技是如何开展直播软件源码开发具体工作的经验分享如下。
山东布谷科技_孙哥
2024/12/11
1210
新手从事直播软件源码开发之需求分析及研发技术栈
布谷社交系统V6.0:新版同城陌生人交友软件源码开发技术栈
现将布谷社交V6.0版本的技术栈分享给大家。以供即将采购布谷社交V6.0版本的新老客户的技术查看使用。
山东布谷科技_孙哥
2024/11/18
1050
布谷社交系统V6.0:新版同城陌生人交友软件源码开发技术栈
布谷相亲婚恋app软件源码开发服务器搭建环境配置及功能清单
近些年由于各大短视频平台带火了开封王婆户外说媒相亲婚恋节目,导致近期婚恋相亲软件或小程序卖的火热,现山东布谷科技就开发过的相亲婚恋app应用软件源码所应用到的技术栈及功能清单详细剖析,希望对从事婚恋相亲行业运营及技术研发的朋友有一定的作用!
山东布谷科技_孙哥
2024/12/27
1570
布谷相亲婚恋app软件源码开发服务器搭建环境配置及功能清单
搭建直播平台
一直以来,直播制作平台都是初入直播行业的创业者关心的话题。在直播刚刚诞生的那段时期,各项直播技术和服务还没有那么完善,定制直播开发的成本也是比较高的,但近年来,但是近年来,随着国内很多云厂商,都是开始接受直播的服务,支持三方,市场上的源码也越来越完善,不管是什么样的方式,都能很快的实现直播软件的开发。
用户7386052
2020/06/22
5.4K0
已有直播源码,如何搭建直播平台?
CDN服务商选择很重要,国内有很多CDN的服务商,每个服务商服务器的分布范围都不一样,一定要选择服务器分布范围最广的,服务器数量最多的。这样在处理高并发信息流量时,服务器的压力不会那么大,可有有效减轻服务器的压力。CDN服务器节点分布的广泛性会直接影响视频数据流的送达时间,距离用户播放端越近的节点,视频传输速度越短,才能实现视频的快速播放。
布谷鸟小刘
2020/12/21
6.1K0
已有直播源码,如何搭建直播平台?
关于直播带货源码开发以及系统搭建解决方案
随着5G时代的到来,过去在直播过程中常见的清晰度低、卡顿以及跳转繁琐等情况均会消失,主播和粉丝能保证随时互动,不再受到网络延迟的影响,而长视频加深了用户与产品的深度接触,消费者也更容易在潜移默化中完成购买。传统娱乐性质的短视频平台也纷纷转型,凭借喊麦、娱乐的直播形式已经不再能够吸引大批用户,高质量的内容成为现在用户的主要需求。以往通过图文等形式引流的现状也在发生改变,所以,对于广大主播以及商家来说,电商直播将是最好的盈利方式,那么直播带货源码都有哪些功能?该如何开发?
布谷安妮
2020/05/21
1.4K0
关于直播带货源码开发以及系统搭建解决方案
一对一直播源码搭建开发知识点整理
直播早就不是网红主播和娱乐平台们涨粉的创收利器了,相对企业而言,直播已经各大企业必须把握的巨大商机了。提到直播,就需要提到直播一对一源码。有了源码才能进行平台的搭建部署,才能进一步开发出APP,那么在搭建一对一直播APP源码时还需要注意些什么呢?
布谷鸟小刘
2021/07/09
5550
小视频app开发后,短视频软件搭建部署教程
随着抖音、快手等小视频app的盛行,小视频app开发行业也逐渐发展起来,我们知道,做小视频软件要先买源码进行二开,或直接定制开发,无论怎么做,最后都要搭建部署到服务器上才能开始运营,那么如何搭建部署呢?
用户4372465
2019/03/28
1.7K0
手把手教你直播系统源码开发搭建,开启你的直播时代!
直播行业如火如荼,你是否也跃跃欲试,想要搭建属于自己的直播平台?别担心,即使你是技术小白,也能轻松上手!作者将手把手教你直播系统软件开发和服务器搭建配置流程,助你快速开启直播时代!
山东布谷科技_孙哥
2025/02/03
1650
手把手教你直播系统源码开发搭建,开启你的直播时代!
直播平台开发搭建常见问题汇总
直播平台开发的重点在于功能设计,以及如何优化提升后期直播平台的用户直播体验,从整个直播平台开发到搭建部署、封装上架,有很多常见的问题是需要我们关注的。我们就来汇总整理下。
q3557873521
2019/04/23
1.1K0
直播+电商碰撞起火花,电商直播系统源码开发新模式
直播带货的热度一路飙升,而近段时间老罗宣布做直播带货,更是炒热了人们的关注与讨论。从图文到动图到短视频,再到直播,似乎都在印证电商是内容变现的最快途径。视频直播与电商的结合将是大势所趋,互联网电商盛行的时代,从网络上获取粉丝的成本越来越高,创造新颖独特的电商模式成为企业的迫切所需。然而,电商模式将是一个好契机,视频直播拥有视听+即时互动的优势,一是能够全面展示商品,让消费者更直观的了解商品细节;二是优于传统电商和电视购物的模式,实现商家与消费者的双向互动,增加购物过程的即时互动性,有利于促进消费者进行消费决策。
布谷安妮
2020/04/03
1.2K0
直播+电商碰撞起火花,电商直播系统源码开发新模式
直播交友app系统软件源码搭建开发前期需求调研及技术栈
进入2025年,直播交友网红经济风已经火了10年左右,当前直播交友行业的市场运营现状及未来直播交友的方向如何发展成为了处在直播交友行业朋友们的常谈,当前就直播交友前期需求设计规划和技术栈应用及未来直播交友行业的发展谈下个人观点。
山东布谷科技_孙哥
2025/01/26
1240
直播交友app系统软件源码搭建开发前期需求调研及技术栈
各个击破,短视频、直播源码、一对一社交系统开发技术难点
随着互联网的大门像全世界打开,人们的生活就变得丰富多彩了起来,而互联网视频直播的出现更是给人们带来了全新的体验。近些年来,大大小小的视频直播类平台层出不穷,这些软件平台给人们的生活们带来娱乐,同时也对视频软件源码开发的技术提出了更高的要求。今天这边文章分析了目前直播市场上流行的三类视频直播平台,从系统开发技术上做一下分析汇总。
用户2954023423
2019/05/20
1.1K0
各个击破,短视频、直播源码、一对一社交系统开发技术难点
PHP直播平台源码搭建教程
直播源码市场火爆,但是PHP直播平台源码的搭建过程较为复杂,本文就简单为大家概述一下直播的实现过程以及PHP直播平台源码是如何搭建的。
云豹kj的晨曦
2020/09/04
5.5K0
PHP直播平台源码搭建教程
布谷一对一直播源码android版环境配置流程及功能明细
安装swoole扩展,项目根目录或者在install目录下有swoole-compiler-loader.php文件,部署好站点后按照步骤安装,扩展文件在项目根目录下也有.so文件,如果需要对应的版本没有可以在沟通群中要,或者自己去swoole-compiler官wang下载
山东布谷科技_孙哥
2025/04/07
880
布谷一对一直播源码android版环境配置流程及功能明细
直播系统源码如何开发与搭建运营?
直播的火爆让各行各业对直播这块新市场垂涎不已,而进军直播市场的第一步——直播系统源码却让企业头疼不已,那么直播系统源码如何进行开发呢?
布谷安妮
2020/08/27
1.5K0
直播系统源码如何开发与搭建运营?
直播带货平台搭建需要用到哪些第三方(下)
上篇文章中,我们讲到了直播带货平台搭建中,用到的部分三方服务,包含微信开放平台、云服务器、云数据库、三方物流和云存储器。今天,小编将为大家介绍直播带货平台搭建中剩余的三方服务。
万岳教育系统
2020/07/23
1.3K0
直播带货平台搭建需要用到哪些第三方(下)
语音app系统软件源码开发搭建新手启蒙篇
在移动互联网飞速发展的今天,语音app已经成为人们生活中不可或缺的一部分。无论是语音聊天、语音助手还是语音直播,这些应用都给我们的生活和工作带来了极大的便利和精神娱乐。对于想要进入这个领域的新手来说,了解语音app系统软件源码的开发搭建过程是至关重要的。本文将为你提供一个全面的启蒙指南,帮助你迈出这关键的第一步。
山东布谷科技_孙哥
2025/02/08
1140
语音app系统软件源码开发搭建新手启蒙篇
直播源码对直播系统开发的重要性
直播源码有多重要?可能关系到直播平台的稳定,能否正常运行等等,因为源码是一切的基础,虽然网上可以百度出很多免费的直播源码,但是这些源码能否直接用却是个大问题,为什么很多企业都不主张直接在网上找免费源码直接用,而是选择找专业团队去开发。
布谷安妮
2020/03/24
8130
直播源码对直播系统开发的重要性
直播系统源码如何实现视频直播以及搭建服务器的?
这几年直播软件在开发的道路上也经历过不少的坎坷,才发展到今天的成熟阶段。越来越多的年轻人喜欢看直播、开直播。同时,随着直播系统源码的诞生,直播软件开发也变得越来越容易。那么如何实现视频直播?直播系统源码如何搭建?现在一一给你解答。
布谷安妮
2020/03/23
3.2K0
直播系统源码如何实现视频直播以及搭建服务器的?
推荐阅读
相关推荐
新手从事直播软件源码开发之需求分析及研发技术栈
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档