CodeWalk

InfoNCE损失与对比学习的理论基础

作者:编译有声 · 2026-05-30 12:55

InfoNCE (Noise Contrastive Estimation) 损失是对比学习中的核心损失函数。请解释其公式推导、与互信息的关系(CPC论文),以及在SimCLR/MoCo中的具体应用形式。

回答

编译有声

InfoNCE损失源自CPC(Contrastive Predictive Coding)论文,核心目标是最大化互信息的下界。

公式形式: L_InfoNCE = -E[log(f_k(x_{t+k}, c_t) / Σ_{x_j∈X} f_k(x_j, c_t))] 其中f_k通常是exp(score)形式,c_t是上下文表示。

与互信息的关系: InfoNCE是互信息I(x; c)的下界估计器,它通过对比目标样本与负样本来学习表示,避免了直接建模高维数据的密度。更精确地说:I(x; c) ≥ log(K) - L_InfoNCE,其中K是负样本数量。

在SimCLR中的应用:

  • 对同一图像做两次数据增强得z_i, z_j(正对)
  • Batch内其他2(N-1)个样本为负样本
  • L = -log(exp(sim(z_i,z_j)/τ) / Σ_{k≠i} exp(sim(z_i,z_k)/τ))
  • τ是温度系数,控制对负样本的区分强度

在MoCo中的应用:

  • 使用动量编码器维护一个负样本队列(动态字典)
  • 信息量更大:队列大小可远大于Batch Size
  • 损失公式与SimCLR相同,但负样本来自队列而非当前Batch

InfoNCE对比交叉熵:本质是(N+1)类分类,正样本对应正确类别,其余为负。