MoCo和SimCLR【CV双雄】

文章列表

文章参考 对比学习论文综述【论文精读】 🌹 🚀

是否完成年份文章及其链接简介其他
2018InstDisc提出实例判别和memory bank做对比学习
2019InvaSpread一个编码器的端到端对比学习
2018CPC对比预测编码,图像语音文本强化学习全都能做
2019CMC多视角下的对比学习
2019MoCov1无监督训练效果也很好
2020SimCLRv1简单的对比学习 (数据增强 + MLP head + 大batch训练久)
2020MoCov2MoCov1 + improvements from SimCLRv1
2020SimCLRv2大的自监督预训练模型很适合做半监督学习
2020BYOL不需要负样本的对比学习
2020SWaV聚类对比学习
2020SimSiam化繁为简的孪生表征学习
2021MoCov3如何更稳定的自监督训练ViT
2021DINOtransformer加自监督在视觉也很香

前情提要:

第一阶段大概讲了这四篇论文,可以看到

  • 它们使用的代理任务是不一样的,有个体判别,有预测未来,还有多视角多模态
  • 它们使用的目标函数也不尽相同,有 NCE,有infoNCE,还有NCE的其它变体
  • 它们使用的模型也都不一样,比如说Invariant spread用了一个编码器;Inst Disc用一个编码器和memory bank;CPC有一个编码器,还有一个自回归模型;CMC可能有两个甚至多个编码器
  • 它们做的任务从图像到视频到音频到文字到强化学习,非常的丰富多彩

五、MoCo V1

《Momentum Contrast for Unsupervised Visual Representation Learning》, 文章提出了一种用于无监督,具体是自监督模型视觉表征学习的新技术,名为Momentum Contrast(MoCo)。

  • MoCo将对比学习方法归纳为字典查询问题,贡献在于引入队列和动量编码器构建大而一致的字典,优化对比学习。与Inst Disc相似,均使用ResNet-50,特征维度128维,L2归一化,但MoCo采用InfoNCE损失(温度0.07),借鉴数据增强、学习率0.03及训练200 epochs。MoCo的亮点在于:
  1. 简单有效的影响力:动量编码器技术被后续工作如SimCLR、BYOL等广泛采用,显著提升无监督预训练效果,甚至超越有监督预训练。
  2. 高超的写作风格:从cv与nlp差异及无监督学习困境入手,将对比学习统一为字典查询问题,提出MoCo框架,旨在通过大字典提升性能,拓宽论文视野与深度。方法部分自顶向下,从目标函数出发,逐步展开网络结构与实现细节,灵活定义输入与网络结构,展现高度概括性与灵活性。

MoCo跟Inst Disc是非常相似的

  • 它用队列取代了原来的memory bank作为一个额外的数据结构去存储负样本
  • 它用动量编码器去取代了原来loss里的约束项,从而能达到动量的更新编码器的目的,而不是动量的去更新特征,从而能得到更好的结果

5.1 文章摘要

摘要:

  • MoCo通过构建一个动态字典来实现无监督学习,该字典使用队列和移动平均编码器,从而在训练过程中实现大型且一致的字典构建
  • MoCo在ImageNet分类的常见线性协议上提供了有竞争力的结果,并且学习到的表征在多个下游任务中表现良好,甚至在某些情况下超过了有监督预训练模型。
  • 研究表明,MoCo在许多视觉任务中大大缩小了无监督和有监督表征学习之间的差距,并且可以在多种应用中替代ImageNet有监督预训练。

重点:

  1. 引言:介绍了无监督表示学习在自然语言处理中的成功,以及在计算机视觉中的挑战。
  2. 相关工作:讨论了无监督/自监督学习方法,包括不同的预文本任务和损失函数。
  3. 方法
    • 对比学习作为字典查找:将对比学习视为训练编码器进行字典查找任务。
    • MoCo通过维护一个队列来构建动态字典,并使用动量更新来保持编码器的一致性
    • 预文本任务:使用简单的实例区分任务,其中查询和键是同一图像的不同视图。
  4. 实验
    • 在ImageNet和Instagram数据集上进行了无监督预训练,并在PASCAL VOC、COCO等数据集上进行了下游任务的评估。
    • MoCo在多个下游任务中的表现超过了有监督预训练模型。
  5. 讨论和结论:MoCo在多个视觉任务中的表现表明,无监督学习可以与有监督学习相媲美。

5.2 实验结果

实验结果

  • MoCo在ImageNet线性分类协议上取得了60.6%的准确率,并且在使用不同的模型变体时表现更好。
  • 在PASCAL VOC和COCO数据集上,MoCo在多个检测和分割任务中超过了有监督预训练模型。

5.3 文章图示

图 1: Momentum Contrast (MoCo) 训练方法概述

在这里插入图片描述

  • 目的:展示MoCo方法如何通过对比学习训练视觉表征编码器。
  • 内容
    • 图中展示了一个编码器网络,用于将输入数据(如图像)编码成特征向量。
    • 使用对比损失函数来训练编码器,使得编码后的查询向量(q)与字典中的键向量(k)匹配
    • 字典键是通过维护一个队列来构建的,其中包含历史小批量数据的编码表示。
    • 键向量由一个动量编码器编码,该编码器是查询编码器的缓慢进展版本。
  • 结论:MoCo方法能够构建一个大型且一致的字典,有助于无监督学习视觉表征。
图 2: 三种对比损失机制的比较

这三种机制的不同之处在于密钥的维护方式和密钥编码器的更新方式。(a):用于计算查询和键表示的编码器通过反向传播被端到端地更新(这两个编码器可以是不同的)。(b)从存储器组[61]中对密钥表示进行采样。( c)MoCo通过动量更新编码器对新密钥进行动态编码,并维护密钥队列(此图中未示出)。

在这里插入图片描述

  • 目的:比较不同的对比损失机制,包括端到端更新、记忆库方法和MoCo。
  • 内容
    • 端到端更新:查询和键的编码器通过反向传播更新。
    • 记忆库方法:从记忆库中随机抽取字典键,不涉及反向传播。
    • MoCo:使用动量更新的编码器实时编码新键,并维护一个键的队列。
  • 结论:MoCo方法在保持字典键的一致性方面具有优势,同时支持更大的字典大小。

六、SimCLR V1

《A Simple Framework for Contrastive Learning of Visual Representations》, 文章提出了一个名为SimCLR的简单框架,用于无监督视觉表征的对比学习

6.1 文章摘要

摘要:

  • SimCLR通过对比学习来学习视觉表征,它简化了最近提出的对比自监督学习算法,无需专门的架构或内存库。
  • 通过系统地研究框架的主要组成部分,文章展示了数据增强的组合、在表征和对比损失之间引入可学习的非线性转换以及对比学习从更大的批次大小和更多的训练步骤中受益。
  • SimCLR在ImageNet上实现了最先进的自监督和半监督学习性能。在仅有1%标签的情况下进行微调,SimCLR达到了85.8%的top-5准确率,超过了使用100倍标签的AlexNet。

重点:

  1. 引言:介绍了无监督学习在计算机视觉中的重要性和挑战。
  2. 相关工作:讨论了无监督表示学习的相关研究,包括生成和判别方法。
  3. 方法
    • 对比学习框架:通过最大化来自同一数据样本的不同增强视图之间的一致性来学习表示。
    • 数据增强:数据增强的组合对于定义有效的预测任务至关重要。
    • 非线性投影头:在表征和对比损失之间引入非线性投影头可以显著提高学习表征的质量。
    • 对比损失:使用NT-Xent损失函数,优化了正负样本的权重。

6.2 文章实验

  1. 实验
    • 在ImageNet、CIFAR-10和CIFAR-100等数据集上进行了广泛的实验。
    • 在不同的下游任务中评估了学习到的表征,包括分类、目标检测和分割。
  2. 结论:SimCLR通过简单的框架和训练策略实现了优异的性能,证明了无监督学习在视觉任务中的潜力。

实验结果

  • SimCLR在ImageNet线性分类协议上达到了76.5%的top-1准确率,与监督预训练的ResNet-50相匹配。
  • 在使用极少标签(1%)进行微调时,SimCLR的性能超过了使用全部标签的AlexNet。

代码:文章提供了SimCLR的代码链接。

文章的实验结果表明,通过仔细选择数据增强、损失函数和训练策略,无监督学习方法能够在多种视觉任务中与有监督学习方法相媲美。

6.3 文章图示

《A Simple Framework for Contrastive Learning of Visual Representations》中提到的图表展示了SimCLR方法的性能和对比学习的相关分析。以下是对文章中提到的图表的详细解释:

图 1: ImageNet Top-1 Accuracy of Linear Classifiers

在这里插入图片描述

  • 目的:比较不同自监督学习方法在ImageNet数据集上的性能。
  • 内容
    • 展示了使用不同自监督方法预训练的模型在ImageNet上的top-1线性分类准确率。
    • 包括了SimCLR与多种其他方法的比较,如InstDisc、MoCo、PIRL等。
    • 灰色的十字表示有监督的ResNet-50作为基准。
  • 结论:SimCLR在自监督学习领域取得了显著的性能,与有监督学习的性能相当。
图 2: 对比学习框架

在这里插入图片描述

  • 目的:展示SimCLR框架的工作原理。
  • 内容
    • 描述了如何通过随机数据增强生成两个视图(正样本对),并通过对比损失函数最大化它们的一致性。
    • 展示了基础编码器和投影头的作用,以及如何使用对比损失。
  • 结论:通过简单的框架和有效的数据增强策略,SimCLR能够有效地学习视觉表征。

数据扩充算子是从同一个扩充族(t ˇ T和t ˇ
T)中抽取的,并应用于每个数据示例,以获得两个相关视图。训练基本编码器网络f(·)和投影头g(·)以使用对比损失最大化一致性。训练完成后,我们扔掉投影头g(·),使用编码器f(·)和表示h进行后续任务

图二里说,如果有一个mini-batch的图片,假如说是x,对这个mini-batch里的所有图片做不同的数据增强就会得到x i和xj

在图二所描述的对比学习(Contrastive Learning)框架中,提到的关于数据增强和正负样本的构造过程,可以通过以下方式详细解释:

首先,假设我们有一个mini-batch的图片集合,我们称之为 X X X,其中包含了 n n n张图片(即batch size为 n n n)。对于这 n n n张图片中的每一张图片 x i x_i xi(其中 i i i从1到 n n n),我们执行两种不同的数据增强操作(例如,裁剪、旋转、颜色失真等),从而得到两个增强的图片版本: x i ′ x_i' xi x i ′ ′ x_i'' xi′′。这里的关键是,对于同一张原图 x i x_i xi,通过不同的数据增强操作生成的两个版本 x i ′ x_i' xi x i ′ ′ x_i'' xi′′被视为正样本对

接下来,关于负样本的构造:

  • 对于每个正样本对(例如, x i ′ x_i' xi x i ′ ′ x_i'' xi′′),剩下的 n − 1 n-1 n1张原图(即 x 1 , . . . , x i − 1 , x i + 1 , . . . , x n x_1, ..., x_{i-1}, x_{i+1}, ..., x_n x1,...,xi1,xi+1,...,xn)以及它们各自通过数据增强得到的图片版本,均被视为当前正样本对的负样本
  • 值得注意的是,由于每个 x j x_j xj j ≠ i j \neq i j=i)都会生成两个增强的版本(例如, x j ′ x_j' xj x j ′ ′ x_j'' xj′′),所以负样本的总数实际上是原图数量的两倍( 2 ( n − 1 ) 2(n-1) 2(n1)),但是需要注意的是,我们实际上是在计算损失时不会重复计算同一张图的不同增强版本作为负样本对正样本的影响,而是会考虑整个batch中所有不同图片(包括它们的增强版本)对某个正样本对的贡献。

因此,总结来说,在batch size为 n n n的情况下:

  • 正样本的个数确实是 n n n,因为每张原图都会生成一个正样本对。
  • 负样本的个数并不是简单的两倍的 n − 1 n-1 n1(即 2 ( n − 1 ) 2(n-1) 2(n1)),因为我们在计算损失时不会重复考虑同一张图的增强版本。但从概念上讲,我们可以认为batch中除了当前正样本对所对应的原图及其增强版本外,所有的其他图片(及其增强版本)都作为潜在的负样本参与损失的计算。

这样的设计有助于模型学习到对于不同变换(数据增强)下仍然保持一致的特征表示,同时能够区分不同图片之间的差异,从而学习到更加鲁棒和泛化的视觉表示。

图 3:全局和局部视图 相邻视图
  • 实心矩形是图像,虚线矩形是随机裁剪。通过随机裁剪图像,我们对包括全局到局部视图(B → A)或相邻视图(D → C)预测的对比预测任务进行采样。

在这里插入图片描述

图 4: 数据增强的组合

在这里插入图片描述

  • 目的:分析数据增强的组合对学习有效表示的影响。
  • 内容
    • 展示了不同数据增强操作的组合对性能的影响。
    • 包括了随机裁剪、颜色失真和高斯模糊等增强操作。
  • 结论随机裁剪和颜色失真是学习有效表示的关键数据增强操作。

和MoCo比起来确实很简单,这里只有一个编码器,既不需要memory bank,也不需要队列和动量编码器;正负样本全都是从同一个mini-batch里来的;整个前向过程非常的直接,就是图片进入编码器编码然后projector降维,最后算个对比学习的loss,非常符合大家对深度学习工作的期待

  • 前面说invariant spread可以看作是SimCLR的前身,为什么这么说呢?本文其实整体的这个思路和结构跟SimCLR是基本一致的,SimCLR跟Inva Spread的区别其实都写在SimCLR的贡献列表里了

  • 首先第一个就是它用了更多的数据增强,它发现对比学习真的是需要很强的数据增强的技术

  • 第二就是它加了一个g函数(一个可以学习的分线性的变换,就是一个 mlp层)

  • 第三就是它们用了更大的batch size ,而且训练的时间更久,它发现这两个策略都能让网络学到的特征变得更好

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值