InfoNCE 损失(少见却非常重要的一个损失函数,CLIP等多模态模型经常使用)

下面从背景动机、数学形式、直观理解、优化目标、典型应用和实现要点等方面,详细介绍 InfoNCE 损失,实际上 InfoNCE 就是一次特殊的交叉熵分类任务


1. 背景与动机

在对比学习(Contrastive Learning)和多模态对齐(如 CLIP)中,我们希望模型学到一种表征空间,其中“相关”的样本对(正样本对)距离很近,而“无关”的样本对(负样本对)距离尽可能远。
InfoNCE(Information Noise‐Contrastive Estimation)就是专门用于这一目的的对比损失,它在保留概率判别性质的同时,还与互信息的最大化有紧密联系。


2. 数学形式

假设我们在一个批次(batch)中有 N 对正样本,对于每个正对 (xi,yi),其余 N−1 个 都可看作负样本。定义一个相似度函数 sim(⋅,⋅)(通常是余弦相似度或带温度的内积):

其中 τ>0 是温度系数,用来调节分布的“扁平/尖锐”程度。

那么第 i 对的 InfoNCE 损失可写为:

总损失取所有正对的平均:

这里,(vi,ti)是正样本的向量表示(例如图像编码器输出与文本编码器输出),(vi,tj) 则是负样本组合。


3. 直观理解

  1. 分子 :鼓励正样本对的相似度尽可能大。

  2. 分母 :将正样本对与所有候选对(正 + 负)做软最大化,负样本对相似度越高,损失越大。

  3. 温度 τ\tau

    • τ 越小,softmax 分布越尖锐,模型学习压力更大;

    • τ 越大,相对差距被“拉平”,训练更稳定但可能收敛更慢。


4. 与互信息的关系

InfoNCE 最初被证明是一个互信息下界(MI lower bound)的估计量。最大化 InfoNCE 等价于最大化对变量 X 和 Y 的互信息 I(X;Y),从而使得两个模态的编码器学到的信息耦合更紧密。


5. 典型应用

  • CLIP(Contrastive Language–Image Pre-training)

    • 图像–文本对齐:对齐大规模图文数据,训练后可实现强大的零样本检索和分类。

  • SimCLR / MoCo

    • 图像自监督:用不同数据增强生成正对,batch 内其他样本作为负对,训练视觉编码器。

  • 多模态检索

    • 图–文、视频–文、音频–文等场景下的双塔检索模型。


6. 实现要点

  1. 批内对比 vs. 内存队列

    • 批内对比(batch size NN)计算简单;

    • 大批次不足时,可用 MoCo 风格的负样本队列或动量编码器扩充负样本。

  2. 数值稳定

    • 计算 softmax 时,可先从相似度矩阵每行减去最大值,防止指数爆炸。

  3. 归一化

    • 通常在向量输出后做 L2 归一化,再再做内积,保证不同样本尺度可比。

  4. 温度调节

    • τ\tau 通常设在 [0.05,1.0][0.05,1.0] 之间,需根据 batch 大小和任务调优。

  5. 代码示例(伪码,用交叉熵函数能精确实现 InfoNCE

    # v: [N, D], t: [N, D], 已做 L2 归一化
    logits = (v @ t.T) / tau        # [N, N] 相似度矩阵
    labels = torch.arange(N)        # 正对索引
    loss = F.cross_entropy(logits, labels)
    

7.应用模型

InfoNCE 作为一种通用的对比损失,被广泛应用于以下几大类模型中:

  1. 视觉自监督学习

    • SimCLR:利用两种不同的数据增广生成正样本对,用同 batch 内其余样本作负对,训练视觉编码器。

    • MoCo(v1/v2/v3):维护一个动量队列(momentum queue)来扩充负样本池,用 InfoNCE 对新旧编码器输出进行对比。

    • BYOL(虽然不直接用 InfoNCE,但与对比学习紧密相关,常被一起提及)。

  2. 多模态对齐

    • CLIP(Contrastive Language–Image Pre-training):在海量图文对上,用 InfoNCE 使图像嵌入与对应文本嵌入相互靠近,其它不匹配的远离。

    • ALIGN:Google 提出的另一种大规模图文对齐框架,核心也是双塔+InfoNCE。

  3. 音频与时序自监督

    • CPC(Contrastive Predictive Coding):用 InfoNCE 在隐空间上预测未来音频或时序表示。

    • wav2vec 2.0:Facebook 提出的音频预训练模型,用 InfoNCE 区分真实与“伪造”未来帧表示。

  4. 文本和句向量学习

    • DeCLUTR:对文档片段做对比,学习句子级别表示。

    • SimCSE:用不同 dropout 生成正对,用批内其他句子作负对,对比优化句向量。

  5. 图结构数据

    • GraphCL / DGI(Deep Graph Infomax):在图或子图之间做对比,用 InfoNCE 学习节点或图全局表示。

8. 小结

  • InfoNCE 是一种强大而高效的对比损失,将正样本对与大批量负样本共同优化,兼顾判别性与数值可实现性;

  • 它在自监督学习和多模态对齐领域,都取得了突破性成果;

  • 在工程实践中,批大小温度超参负样本策略 是调优 InfoNCE 性能的关键。

希望以上内容能帮助你全面理解 InfoNCE 的原理、直觉和实现要点!

附录(一些重要问题):

为什么代码示例那里用的是交叉熵?

可是交叉熵的公式和infoNCE不一样,为什么代码可以用一样的?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值