🧧【论文精读】:MoCo
2025-6-5
| 2025-8-24
字数 2845阅读时长 8 分钟
type
status
password
date
slug
summary
category
URL
tags
icon

MoCo

代码:https://github.com/facebookresearch/moco

摘要

我们在机器视觉领域提出了一种新的无监督学习方法——MoCoMoCo虽然是基于对比学习的,但是本文是从另外一个角度来看对比学习,即把对比学习看作是一个字典查询任务。具体来说,我们构建了一个动态的字典,这个字典有两个特性:队列特性和moving-averaged encoder(这两点在下文模型结构中会具体说明,现在记住就行)。因此,我们的字典非常大,且特征一致性非常好,从而便于进行对比学习。
最终,MoCo作为一个无监督的预训练模型,能够在7个下游任务(分割、检测等)上 ,超越之前的有监督的预训练模型 ,填平了CV领域中,无监督训练和有监督训练之间的坑。

1、引言

1.1、无监督学习

GPT和BERT已经证明了无监督表征学习在NLP领域是非常成功的,但是在视觉领域,无监督学习效果差很多,作者认为可能是二者的原始信号空间不同。
  • 语言任务具有离散的信号空间(单词、子词单元等),信号本来就拉得比较开,容易建立tokenize(将单词映射成向量)的字典。这样无监督学习容易建模,且模型容易优化。
  • CV中,视觉信号都是在一个连续且高维的空间里,不像单词那样信息和语义浓缩的那么好,不够简洁,这样就不容易建立一个这样的字典,也就不容易进行无监督学习。
最近有一些无监督学习方法表现不错,但是都可以归结为建立动态字典。字典中的“键”(Token)从数据(如图像或补丁)中采样,并由编码器网络表示。无监督学习通过训练编码器执行字典查询:编码后的“查询”应与其匹配的键相似,而与其他键不同。学习目标被公式化为最小化对比损失。

1.2、字典特性

  • 字典足够大
    • 字典越大,key越多,所能表示的视觉信息、视觉特征就越丰富 ,这样拿query去做对比学习的时候,才越能学到图片的特征。
    • 反之,如果字典很小,模型很容易通过学习一些捷径来区分正负样本,这样在碰到大量的真实数据时,泛化就会特别差(我的理解是,字典中只有猫和狗,狗都是黑色,猫都是黄色。模型简单的判断图片中物体是否是黄色,来区分猫和狗,而不是真的学到了猫和狗的特征)
  • 编码的特征尽量保持一致,字典里的key都应该用相同或者说相似的编码器去编码得到,否则模型在查找query时,可以简单的通过找到和它使用相同或者相似编码器的key,而不是真的和它含有相同语义信息的key。
然而,现有的对比损失方法往往在这两个方面中的某一方面存在局限性(要么一致性不好,要么字典不够大)。

1.3、MoCo特点

我们提出MoCo,通过对比损失构建大规模且一致的字典用于无监督学习(图1)。我们将字典维护为数据样本的队列:当前小批量的Encode Representation入队,最早的Encode Representation出队。队列将字典大小与小批量大小解耦,使其可以任意大。此外,由于字典中的键来自前几个小批量,我们提出使用基于动量的查询编码器移动平均作为缓慢更新的键编码器,以维持一致性。
图1. 动量对比(MoCo)通过对比损失将编码后的查询与编码键字典进行匹配,从而训练视觉表示编码器。字典键由一组数据样本动态定义。字典以队列形式构建,当前小批量入队,最旧的小批量出队,使其与小批量大小解耦。键由一个缓慢演进的编码器编码,该编码器通过与查询编码器的动量更新驱动。这种方法为学习视觉表示提供了一个大规模且一致的字典。
图1. 动量对比(MoCo)通过对比损失将编码后的查询与编码键字典进行匹配,从而训练视觉表示编码器。字典键由一组数据样本动态定义。字典以队列形式构建,当前小批量入队,最旧的小批量出队,使其与小批量大小解耦。键由一个缓慢演进的编码器编码,该编码器通过与查询编码器的动量更新驱动。这种方法为学习视觉表示提供了一个大规模且一致的字典。

2、相关工作

无监督/自监督学习方法通常涉及两个方面:pretext 任务和损失函数。“pretext” 意味着所解决的任务并非真正目标,而是为学习良好的数据表示而设计。损失函数通常可独立于 pretext 任务进行研究。MoCo聚焦于损失函数层面,以下从这两个方面讨论相关研究。

2.1、损失函数

定义损失函数的常见方式是衡量模型预测与固定目标的差异,例如通过L1或L2损失重构输入像素(如自编码器),或通过cross-entropy或margin-based Loss将输入分类到预定义类别(如eight positions、color bins)。其他替代方法包括:
  • 对比损失:衡量表示空间中样本对的相似性。与匹配固定目标不同,对比损失的目标在训练中动态变化,可由网络计算的数据表示定义。对比学习是近期多项无监督学习工作的核心。
  • 对抗损失:衡量概率分布之间的差异,广泛应用于无监督数据生成。表示学习的对抗方法在文献中有探索,生成对抗网络与噪声对比估计(NCE)存在关联。

2.2、Pretext 任务

已提出的 pretext 任务包括:
  • 数据修复:如去噪自编码器、上下文自编码器、跨通道自编码器(颜色化)。
  • 伪标签生成:通过单张图像的变换(如实例任务)、patch排序、视频跟踪或分割、特征聚类等生成伪标签。

2.3、对比学习与Pretext任务的关系

多种 pretext 任务可基于对比损失函数。例如,实例判别方法与基于实例的任务和NCE相关;对比预测编码(CPC)的 pretext 任务属于上下文自编码的一种形式;对比多视图编码(CMC)则与颜色化任务相关。

3、方法

3.1、作为字典查询的对比学习

考虑编码后的查询 和一组作为字典键的编码样本 ,假设字典中仅有一个正样本键 匹配。对比损失要求 相似,而与其他负样本键不同。本文采用InfoNCE损失:
其中 为温度超参数,求和包括1个正样本和 个负样本。对比损失作为无监督目标函数,用于训练表示查询和键的编码器网络。一般来说,查询表示为 ,键表示为 ,具体取决于 pretext 任务。输入 可以是图像、patches或patches集合,编码器 可以相同、部分共享或不同。

3.2、动量对比

从上述视角看,对比学习是在图像等高维连续输入上构建离散字典的过程。字典是动态的,键为随机采样,且键编码器随训练演化。我们假设,覆盖丰富负样本的大规模字典,以及尽可能一致的键编码器,有助于学习高质量特征。基于此,我们提出动量对比:
  • 队列字典:核心思想是将字典维护为数据样本的队列,允许重复使用前续小批量的编码键。队列将字典大小与小批量大小解耦,其大小可作为超参数灵活设置,远大于典型小批量尺寸。字典中的样本逐步替换:当前小批量入队,最早小批量出队,确保字典始终代表数据的采样子集,且维护计算成本可控。移除最早小批量有益,因其编码键最过时,与最新键的一致性最差。
  • 动量更新:使用队列可扩大字典规模,但通过反向传播更新键编码器变得不可行(梯度需传播至队列中的所有样本)。简单复制查询编码器参数会导致性能下降,原因是编码器快速变化破坏了键表示的一致性。为此,我们提出动量更新:
    • 其中 为动量系数,仅查询编码器参数 通过反向传播更新,动量编码器参数没有反向传播。动量更新使 演化更平滑,确保队列中的键虽由不同时期的编码器编码,但差异较小。实验表明,较大动量(如 )效果显著优于较小值,验证了缓慢演化的键编码器是队列机制的核心。
  • 与现有机制的对比:MoCo与两种现有对比损失机制的对比如图2所示,三者在字典规模和一致性上存在差异:
    • 图2. 三种对比损失机制的概念性比较(实证比较见第3图和第3表)。在此我们展示一对查询和键。这三种机制的不同之处在于如何维护键以及如何更新键编码器。(a):计算查询和键表示的编码器通过反向传播进行端到端更新(两个编码器可以不同)。(b):键表示从内存库中采样[61]。(c):MoCo通过动量更新的编码器动态编码新键,并维护一个键队列(本图未展示)。
      图2. 三种对比损失机制的概念性比较(实证比较见第3图和第3表)。在此我们展示一对查询和键。这三种机制的不同之处在于如何维护键以及如何更新键编码器。(a):计算查询和键表示的编码器通过反向传播进行端到端更新(两个编码器可以不同)。(b):键表示从内存库中采样[61]。(c):MoCo通过动量更新的编码器动态编码新键,并维护一个键队列(本图未展示)。
    • end-to-end更新(图2a):查询和键编码器通过反向传播联合更新,键由当前小批量样本生成,编码一致,但字典大小受GPU内存限制,且大批量优化存在挑战。
    • memory bank(图2b):键表示来自数据集的所有样本,字典大小可任意大,但键编码器来自训练过程中的不同阶段,一致性较差。MoCo无需跟踪每个样本,内存效率更高,适用于十亿级数据。
    • MoCo(图2c):通过动量更新的编码器动态编码新键,并维护键队列,平衡了字典规模和一致性。

3.3、Pretext 任务

本文采用简单的实例判别任务,与现有工作一致:同一图像的两个随机增强视图作为正样本对,分别由查询和键编码器编码。编码器采用ResNet,输出128维L2归一化向量。数据增强包括随机裁剪、颜色抖动、水平翻转和灰度转换。
混洗BN:标准ResNet中的批量归一化(BN)可能导致模型“作弊” pretext 任务,通过小批量内样本间的统计信息泄漏轻松达到低损失。为此,我们在训练中对键编码器的小批量样本进行跨GPU混洗,确保查询和正键的批量统计来自不同子集,有效避免作弊,同时保留BN的正则化效果。

4、实验

我们在ImageNet-1M(IN-1M,约128万图像)和Instagram-1B(IG-1B,约9.4亿图像)上进行无监督预训练,使用SGD优化器,具体超参数见正文。

4.1、线性分类评估

在IN-1M上预训练后,冻结特征训练线性分类器。结果表明:
  • 对比机制消融:端到端、记忆银行和MoCo三种机制中,MoCo在大字典规模()下表现最优,记忆银行因键编码器不一致导致性能下降(图3)。
    • notion image
  • 动量消融:动量系数 时准确率最高,小动量(如 )导致显著性能下降,无动量时训练失败(表1)。
    • 动量系数 m
      0
      0.9
      0.99
      0.999
      0.9999
      准确率 (%)
      失败
      55.2
      57.8
      59.0
      58.9
  • 与现有方法对比:MoCo在相同模型规模下优于多数无监督方法,且无需定制架构(表1、图4)。
    • notion image

4.2、特征迁移

在PASCAL VOC、COCO等下游任务上,MoCo预训练的特征迁移表现如下:
  • PASCAL VOC目标检测:MoCo在R50-C4 backbone上显著优于有监督预训练,IG-1B预训练进一步提升性能(表2、3)。
  • COCO检测与分割:在FPN和C4 backbone上,MoCo在2×训练周期下全面超越有监督预训练,IG-1B预训练效果更佳(表5)。
  • 其他任务:在关键点检测、密集姿态估计、LVIS长尾分割等任务中,MoCo表现优异,尤其在定位敏感任务中优势明显(表6)。
notion image
notion image
notion image
notion image

5、讨论与结论

MoCo在多种视觉任务中证明了无监督学习的有效性,缩小了与有监督学习的差距。IG-1B预训练的持续提升表明其适用于大规模真实数据。未来方向包括探索更复杂的 pretext 任务(如掩码自编码)和进一步优化超大规模数据的利用。 结论:MoCo通过动态字典和动量更新,为无监督视觉表示学习提供了有效框架,在下游任务迁移中表现出竞争力,标志着无监督学习在计算机视觉中进入实用阶段。
  • 图像
  • Qwen3 Embedding 系列:基于大型语言模型的文本嵌入与重排序技术突破【论文精读】ViT及各种变体
    Loading...