MoCo方法详解:自监督学习中的对比学习
本文将围绕自监督学习和对比学习的基本概念,对MoCo(Momentum Contrast)方法进行系统解读,包括数学原理、核心思想、算法流程、关键组件以及实际应用。
一、背景与动机
随着深度学习的快速发展,监督学习在各种视觉和自然语言任务中都取得了突破性进展。然而,传统的监督学习高度依赖人工标注的数据,而标注大规模数据集往往成本高昂、耗时且易受人为偏见的影响。为应对这一挑战,自监督学习(Self-Supervised Learning)兴起并迅速壮大,它通过“生成”或“预测”某些任务来自动获取伪标签,从而在无标注数据上学习出有用的特征表示。
在众多自监督学习策略中,对比学习(Contrastive Learning)是目前效果突出的方法之一。其核心在于:将来自同一实例的不同增强版本视为“正样本对”,将来自不同实例的数据视为“负样本对”,通过在特征空间中“拉近正样本,推远负样本”来学习判别力强的特征表示。对比学习虽然在图像、文本等多种领域都取得了显著成效,但它也面临负样本规模管理、计算效率和稳定性等难题。
MoCo(Momentum Contrast)正是在这一背景下被提出的。它通过“动量编码器”和“字典队列”巧妙地解决了对比学习中负样本存储与编码一致性的问题,使对比学习能更加高效地扩展到大规模数据集,并在许多视觉任务上取得了极具竞争力的性能。
二、对比学习的基本原理及挑战
在对比学习框架下,一般会对同一输入样本做不同的数据增强,得到两份不同视图——它们是“正样本对”;来自其他样本的数据则成为“负样本对”。如果将编码器记作 f ( ⋅ ) f(\cdot) f(⋅),对于一对正样本 ( x q , x k ) (x^q, x^k) (xq,xk),我们获得各自的特征向量 q = f ( x q ) q = f(x^q) q=f(xq) 与 k + = f ( x k ) k^+ = f(x^k) k+=f(xk);对一些负样本 { k 1 − , k 2 − , … } \{k^-_1, k^-_2, \dots\} { k1−,k2−,…} 则来自其他实例或先前批次。对比学习的目标是让 ⟨ q , k + ⟩ \langle q, k^+ \rangle ⟨q,k+⟩ 尽量大、而 ⟨ q , k − ⟩ \langle q, k^- \rangle ⟨q,k−⟩ 尽量小。
一个常用的对比损失函数是 InfoNCE。对单个查询向量 q q q,令 k + k_+ k+ 为其对应的正样本向量,而 { k − i } \{k_{-}^i\} { k−i} 是一组负样本向量。InfoNCE损失通常写为:
L InfoNCE ( q , k + , { k − i } ) = − log exp ( q ⋅ k + τ ) exp ( q ⋅ k + τ ) + ∑ i exp ( q ⋅ k − i τ ) , \mathcal{L}_{\text{InfoNCE}}(q, k_+, \{k_-^i\}) = -\log \frac{\exp\Big(\frac{q \cdot k_+}{\tau}\Big)}{\exp\Big(\frac{q \cdot k_+}{\tau}\Big) \;+\; \sum_{i}\exp\Big(\frac{q \cdot k_-^i}{\tau}\Big)}, LInfoNCE(q,k+,{ k−i})=−logexp(τq⋅k+)