当前位置: 首页 > news >正文

对比学习2:【MoCo】

🚩 SimCLR 模型进阶版——MoCo模型笔记它来咯!
何凯明大佬之作。创新之处:1. 一个样本与多个样本一同对比; 2. 采用动量更新,即:指数滑动平均(EMA)


文章目录

  • 1. 一句话概括
  • 2. 创新点
  • 3. 具体方法
  • 4. 模型优缺点
    • 4.1 优点
    • 4.2 缺点
    • 4.3 MoCo vs SimCLR
    • 4.4 MoCo v1 / v2 的差别

1. 一句话概括

MoCo 模型(Momentum Contrast,动量对比学习),它是自监督学习在计算机视觉领域的里程碑之一,由 Kaiming He 团队在 2019 年提出,旨在解决 SimCLR 对大 batch size 的依赖问题,通过引入动量更新的编码器队列,在小 batch 甚至单卡环境下也能进行有效的对比学习。

  • 原论文:《Momentum Contrast for Unsupervised Visual Representation Learning》
  • 仓库地址:https://github.com/facebookresearch/moco

2. 创新点

用一个动态的“队列(Queue)”来存储过去多个 batch 的样本特征作为负样本,从而摆脱对大 batch 的依赖,同时用“动量更新”保持编码器的稳定性。

  1. 负样本不一定要来自当前 b a t c h 负样本不一定要来自当前 batch负样本不一定要来自当前batch
  2. 可以维护一个跨 b a t c h 的特征字典 可以维护一个跨 batch 的特征字典可以维护一个跨batch的特征字典
  3. 动量编码器:用于生成队列中的特征,其参数缓慢跟随主编码器更新,保证特征的一致性。 动量编码器:用于生成队列中的特征,其参数缓慢跟随主编码器更新,保证特征的一致性。动量编码器:用于生成队列中的特征,其参数缓慢跟随主编码器更新,保证特征的一致性。
    (字典里的特征要“一致”,否则旧特征和新特征分布不一致会影响训练)

3. 具体方法

MoCo整体框架:

  • Query Encoder(图左):编码当前样本得到 query 特征 q
  • Key Encoder(Momentum Encoder)(图右):编码增强后的样本得到 key 特征 k
  • Queue(特征队列):保存最近很多个 key 特征,作为负样本集合

MoCo采用的损失,依旧是 InfoNCE :

动量编码器:


如果队列里存的是“旧 batch 的特征”,编码器参数在不断更新,会导致:

  1. 队列里的 key 用“旧编码器”得到
  2. 当前 query 用“新编码器”得到
  3. 特征空间漂移,队列失效

MoCo 的解决方案:Key encoder 不用反向传播更新,而是用 query encoder 的参数做 EMA(指数滑动平均)更新,如上式。

4. 模型优缺点

4.1 优点

  1. 不需要超大 batch
  2. 负样本数量大且稳定
  3. 训练更可扩展(队列长度可控)

4.2 缺点

  1. 结构更复杂(双编码器、队列同步)
  2. 队列可能包含“过旧”样本(分布可能滞后),需要动量缓解
  3. 仍存在假负样本问题(负样本可能同语义)

4.3 MoCo vs SimCLR

相同点:

  • 都是对比学习:正样本为同图两视图;用 InfoNCE

不同点:

  • SimCLR:负样本来自 batch → 需要大 batch
  • MoCo:负样本来自 queue → 小 batch 也能有大量负样本

  • SimCLR:单编码器
  • MoCo:双编码器(query / momentum key)

4.4 MoCo v1 / v2 的差别

MoCo v1

  • 基本框架:动量编码器 + 队列

  • backbone:ResNet

  • 主要贡献:用队列解决大 batch 依赖

MoCo v2(更常用)

  • 在 MoCo v1 基础上引入 SimCLR 的一些“经验增强”,显著提升效果:

    • 更强的数据增强(颜色扰动、模糊等)

    • 使用 2-layer MLP 投影头

    • 调整温度、训练细节

结论:MoCo v2 ≈ MoCo + SimCLR tricks

http://www.jsqmd.com/news/139896/

相关文章:

  • 分段存储管理方式学习总结
  • 浅析为什么要用Cursor Commands及在日常开发中如何使用的最佳实践
  • 5、索引的数据结构(b+树,hash)
  • 毕业项目推荐:87-基于yolov8/yolov5/yolo11的血红细胞检测计数系统(Python+卷积神经网络)
  • 元推理框架一次完美的“框架内机器证明”:对莱布尼茨级数的解析
  • 高德地图红绿灯倒计时之实现原理
  • 6、索引算法有哪些?
  • 毕业项目推荐:88-基于yolov8/yolov5/yolo11的昆虫检测识别系统(Python+卷积神经网络)
  • 根据日期编码
  • 如何用Lupa 为Python应用添加脚本支持,以及如何在游戏引擎中调用逻辑
  • LINQ:SelectMany
  • Slabify-et 安装使用(https://github.com/CellArchLab/slabify-et)
  • ARC103B(abc101D)
  • 链表的基本操作,用链表实现线性表
  • 12/25
  • 如何进行 Python 和 Lua 之间的复杂数据交换
  • 游戏手柄电池没电了?靠谱供应商看这里 - 工业品网
  • 物联网智能灯具推荐:五大独家精选深度推荐 - 品牌测评家
  • 解码STM32F4环境搭建、工程搭建与烧录
  • (新卷,200分)- 找单词(Java JS Python)
  • 抽象圣诞树3
  • 段页式管理方式学习总结
  • 游戏手柄电池批发厂家哪里找?聚电新能源 - 工业品网
  • 一天面了6个前端开发,水平真的令人堪忧啊 - 教程
  • 游戏手柄电池选购指南:性价比、性能与环保面面观 - 工业品网
  • 物联网智能灯具哪家品质好:最新官方排名品质测评 - 品牌测评家
  • Intel CPU搭配NVIDIA显卡!Serpent Lake曝光:直指AMD超级APU
  • 实验七
  • 基于深度学习的水面垃圾检测系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)
  • 游戏手柄电池选购指南:行业优势、品牌推荐与聚电新能源实力展现 - 工业设备