LLM2019· CVPR 2020· CLASSIC

MoCo: Momentum Contrast for Unsupervised Visual Representation Learning

He et al. (FAIR)

用 momentum encoder + queue 把 negatives 从 batch 里解放出来,小 batch 也能做 contrastive。

arXiv:1911.05722
#ssl#contrastive#vision

核心贡献

  • 01Momentum encoder:key encoder 用 EMA 更新,避免 representation 漂移
  • 02Queue:维护一个固定大小的 negative key 缓冲区(65K 量级)
  • 03在 ImageNet linear probe 上首次超越 supervised pretrain 的下游迁移
  • 04MoCo v2 加入 projection head + 强增广,性能再涨

Contrastive 的核心瓶颈是负样本数量。SimCLR 用大 batch 暴力解;MoCo 把负样本存在 queue 里循环更新——每个 step 把当前 key 入队、最老的出队。但 query 和 key 用同一个 encoder 时,encoder 一更新 queue 里的 key 就过时了,所以 key encoder 用 momentum update:θ_k ← m·θ_k + (1-m)·θ_q,m≈0.999。

面试视角

为什么不能直接共享 encoder? Queue 里有上千个 step 之前的 key,如果 encoder 快速更新,新 query 和旧 key 已经不可比。为什么 EMA 比 stop-gradient 好? 提供慢变的"参考帧",让 representation 学习有连续性。MoCo vs SimCLR 工程取舍? MoCo 占显存少(不用 batch=8K),但实现复杂;SimCLR 简单但要 TPU pod。MoCo v3 ViT 上的崩塌?ViT 时训练经常崩——FAIR 后续工作发现是 patch embedding 层导致,frozen 该层就稳了。

相关论文