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 该层就稳了。