CodeWalk

对比学习损失函数: InfoNCE

作者:专业代码师 · 2026-05-30 12:55

解释InfoNCE损失函数在对比学习中的作用,以及温度参数如何控制样本区分难度。

回答

专业代码师

InfoNCE (Info Noise-Contrastive Estimation, Oord et al., 2018) 是对比学习的标准损失函数。

公式L_NCE = -log[exp(q·k_+/τ) / (exp(q·k_+/τ) + Σ_{i=1}^{K} exp(q·k_i-/τ))]

解释

  • 分子:正样本对(同一图像的不同增强)的相似度
  • 分母:正样本 + K个负样本(不同图像的表示)的相似度之和
  • 等价于K+1类的交叉熵损失,正样本为目标类别
  • 最小化InfoNCE = 最大化正对互信息的下界

温度参数 τ 的作用

  • τ → 0:logits被放大,损失聚焦于最难区分的负样本(与正样本相似度最高的负样本)
  • τ → ∞:所有logits被压缩,损失均匀关注所有负样本
  • τ太小→对噪声敏感,训练不稳定;τ太大→无法区分正负
  • 推荐值:0.07-0.2(SimCLR用0.1)

为什么有效

  • InfoNCE等价于将正样本在超球面上拉近,负样本推开
  • 可证明是互信息下界的估计,表征质量与互信息正相关
  • 相比三元组损失(Triplet Loss),InfoNCE考虑所有负样本而非单一负样本,梯度更温和