对比学习损失函数 - InfoNCE

InfoNCE Loss :构建高效对比学习模型

引言

对比学习中的InfoNCE损失函数是自监督学习领域的重要进展,它通过最大化正样本对之间的相似度并最小化负样本对的相似度,有效地引导模型学习到数据的本质特征。InfoNCE不仅提高了表示学习的质量,还为下游任务如分类、聚类等提供了强大的基础。

在这里插入图片描述


一、背景

InfoNCE(Information Noise-Contrastive Estimation)损失是对比学习中非常重要的一个损失函数,特别是在SimCLR、MoCo等框架中被广泛应用。它通过最大化正样本对之间的相似度,同时最小化负样本对之间的相似度来学习有用的表示。下面我们详细解释InfoNCE损失的公式及其各个组成部分。
在这里插入图片描述

二、公式

1. 定义

LInfoNCE=−log⁡exp⁡(sim(zi,zj)/τ)∑k=12N1[k≠i]exp⁡(sim(zi,zk)/τ)\mathcal{L}_{\text{InfoNCE}} = -\log \frac{\exp(\text{sim}(z_i, z_j) / \tau)}{\sum_{k=1}^{2N} \mathbf{1}_{[k \neq i]} \exp(\text{sim}(z_i, z_k) / \tau)}LInfoNCE=logk=12N1[k=i]exp(sim(zi,zk)/τ)exp(sim(zi,zj)/τ)

2. 公式分解

为了帮助你更深入地理解InfoNCE损失公式,我们将逐步分解并解释每个部分的意义。我们通过一个直观的例子来说明这个过程,确保每个步骤都清晰明了。

2.1 分子:正样本对的相似度得分

exp⁡(sim(zi,zj)/τ)\exp(\text{sim}(z_i, z_j) / \tau)exp(sim(zi,zj)/τ)

  • ziz_izizjz_jzj 是来自同一数据点的两个不同增强视图(augmented views)。
  • sim(zi,zj)\text{sim}(z_i, z_j)sim(zi,zj) 衡量这两个嵌入向量之间的相似度,通常使用余弦相似度或点积。
  • τ\tauτ 是温度参数,控制相似度分布的锐度。
  • exp⁡(⋅)\exp(\cdot)exp() 是指数函数,用于放大相似度得分。

示例
假设 sim(z1,z3)=0.9\text{sim}(z_1, z_3) = 0.9sim(z1,z3)=0.9,温度参数 τ=0.1\tau = 0.1τ=0.1,那么:

exp⁡(sim(z1,z3)/0.1)=exp⁡(0.9/0.1)=exp⁡(9)≈8103.08\exp(\text{sim}(z_1, z_3) / 0.1) = \exp(0.9 / 0.1) = \exp(9) \approx 8103.08exp(sim(z1,z3)/0.1)=exp(0.9/0.1)=exp(9)8103.08

这表示正样本对 (z1,z3)(z_1, z_3)(z1,z3) 的相似度得分为 8103.08。

2.2 分母:所有负样本对的相似度得分之和

∑k=12N1[k≠i]exp⁡(sim(zi,zk)/τ)\sum_{k=1}^{2N} \mathbf{1}_{[k \neq i]} \exp(\text{sim}(z_i, z_k) / \tau)k=12N1[k=i]exp(sim(zi,zk)/τ)

  • 2N2N2N 是批次中所有嵌入向量的数量(每个数据点有两个增强视图,因此总共有 2N2N2N 个嵌入向量)。
  • 1[k≠i]\mathbf{1}_{[k \neq i]}1[k=i] 是指示函数,确保不将自身作为负样本。当 k=ik = ik=i 时,指示函数取值为0;否则为1。
  • exp⁡(sim(zi,zk)/τ)\exp(\text{sim}(z_i, z_k) / \tau)exp(sim(zi,zk)/τ) 是每个负样本对的相似度得分,同样经过温度参数调整后的指数形式。

示例
假设我们有4个嵌入向量 z1,z2,z3,z4z_1, z_2, z_3, z_4z1,z2,z3,z4,并且 z1z_1z1z3z_3z3 来自同一个数据点,其他都是负样本。我们需要计算 z1z_1z1 对所有其他嵌入向量的相似度得分之和:

∑k=141[k≠1]exp⁡(sim(z1,zk)/0.1)=exp⁡(sim(z1,z2)/0.1)+exp⁡(sim(z1,z3)/0.1)+exp⁡(sim(z1,z4)/0.1)\sum_{k=1}^{4} \mathbf{1}_{[k \neq 1]} \exp(\text{sim}(z_1, z_k) / 0.1) = \exp(\text{sim}(z_1, z_2) / 0.1) + \exp(\text{sim}(z_1, z_3) / 0.1) + \exp(\text{sim}(z_1, z_4) / 0.1)k=141[k=1]exp(sim(z1,zk)/0.1)=exp(sim(z1,z2)/0.1)+exp(sim(z1,z3)/0.1)+exp(sim(z1,z4)/0.1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进一步有进一步的欢喜

您的鼓励将是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值