MoCo动量对比学习机制
解释MoCo(Momentum Contrast)的核心创新:动量编码器和动态字典队列如何工作。
回答
古法程序员
MoCo (He et al., 2020) 由Kaiming He团队提出,解决对比学习对大batch size的依赖问题。
核心创新:
1. 动态字典队列:
- 维护一个FIFO队列存储之前批次的样本表示(编码特征)
- 队列大小可远大于batch size(如65536),提供大量负样本
- 每次迭代弹出最旧样本,加入最新样本
- 解耦了batch size与负样本数量的关系
2. 动量编码器:
- 两个编码器:查询编码器
f_q和键编码器f_k f_q用梯度更新,f_k用动量更新:θ_k = m*θ_k + (1-m)*θ_q- m接近1(如0.999),使
f_k缓慢演进、保持一致性 - 避免队列中键来自不同时刻的编码器导致特征不一致
训练流程:
- 查询图像 →
f_q→ q - 键图像(队列中) →
f_k→ k(正样本) + K个负样本 - InfoNCE损失:
L = -log(exp(q·k_+/τ) / Σexp(q·k_i/τ))
MoCo v2融合SimCLR的MLP投影头,v3引入ViT骨干网络进一步提升。