跳至内容
返回

对比学习:从“拉近正样本,推远负样本”到 CLIP 的多模态世界

发布于:

如果分类学习是在回答“它属于哪个类别”,那么对比学习是在学习:“什么东西应该相似,什么东西应该不同”。

近年来,对比学习(Contrastive Learning)成为深度学习中最重要的表示学习方法之一。它推动了 SimCLR、MoCo、BYOL、CLIP、ALIGN 等大量模型的发展。

尤其是 CLIP:通过对比学习,让模型学会图像和文本之间的对应关系——这成为如今多模态大模型的重要基础。


1. 为什么需要对比学习?

传统监督学习需要“图片 → 标签”(猫图片 → cat,狗图片 → dog),模型学习分类边界。但现实中标签非常昂贵,而互联网有几十亿图片+文本,却没有人工类别。

于是产生一个问题:

能不能不用人工标签,让模型自己学习表示?这就是 Self-supervised Learning(自监督学习)


2. 对比学习的核心思想

一句话:相似的样本,在特征空间靠近;不相似的样本,在特征空间远离。

假设一个 Encoder fθ(x)f_\theta(x),输入图片,输出 embedding zz。例如“猫”图片经过网络得到 [0.12,0.53,0.21,...][0.12, 0.53, -0.21, ...]

目标:让猫图片 1(z1z_1)和猫图片 2(z2z_2)距离更近,而猫和汽车距离更远。


3. 正样本和负样本

对比学习核心就是构造配对:

Positive Pair(正样本)——两个应该相似的东西:同一张图片的原图与数据增强(裁剪后的猫),认为它们属于同一个语义。

Negative Pair(负样本)——不相关样本:猫、汽车、飞机、狗,猫和汽车应该远离。

训练目标:Positive 拉近,Negative 推远。


4. 最早的 Contrastive Loss

经典 Contrastive Loss:希望正样本距离 d(zi,zj)d(z_i, z_j) 变小,负样本至少保持 margin mm

L=yd2+(1y)max(0,md)2L = y\, d^2 + (1-y)\, \max(0, m-d)^2

其中 y=1y=1 表示正样本,y=0y=0 表示负样本。

问题:它只能处理一对一(一次比较“猫 vs 狗”),但现代任务希望一次利用大量负样本——于是出现 InfoNCE


5. InfoNCE:现代对比学习核心

InfoNCE 全称 Information Noise Contrastive Estimation,最早来源于 Contrastive Predictive Coding(CPC)。

核心思想:给定一个 query qq,寻找正确的 key k+k^+,同时排除大量错误的 key kik_i

L=logexp(qk+/τ)iexp(qki/τ)L = -\log \frac{\exp(q \cdot k^+ / \tau)}{\sum_i \exp(q \cdot k_i / \tau)}

  • 分子:正样本相似度
  • 分母:所有样本相似度

直观理解:query 是“猫图片”,候选是“猫文本、狗文本、汽车文本、飞机文本”,模型需要让“猫文本”概率最高。


6. InfoNCE 为什么像 Cross Entropy?

这是一个非常重要的联系:InfoNCE 本质就是一个特殊形式的交叉熵损失。

普通分类:输入图片,输出类别概率(猫 0.9 / 狗 0.1),Cross Entropy 希望真实类别概率最大。

InfoNCE:输入 query,输出候选 key 概率(正样本 0.9 / 负样本 1 0.05 / 负样本 2 0.05),也是让正确答案概率最大。

所以可以理解:对比学习就是把“类别”换成了“样本”。


7. 温度系数 τ 的作用

InfoNCE 中有一个参数 τ\tau(Temperature,温度系数),出现在 exp(sim/τ)\exp(sim/\tau) 中:

τ 小(如 0.01):softmax 更尖锐,模型更关注最高相似度样本——容易区分 hard negative,但可能训练不稳定。

τ 大(如 1):分布更平滑,所有负样本影响接近,模型学习更温和。

直观理解:τ 控制模型关注差异的程度。


8. SimCLR:让对比学习进入主流

论文:A Simple Framework for Contrastive Learning of Visual Representations(Google 2020),arXiv: 2002.05709。

核心:大量使用数据增强——一张图片经过随机 crop、color jitter、blur,得到两个 view(image A / image B),认为它们是正样本。

关键发现:大 batch 很重要——batch 越大负样本越多(batch=4096 时一个样本有 4095 个负样本)。


9. MoCo:解决大 batch 问题

论文:Momentum Contrast for Unsupervised Visual Representation Learning,arXiv: 1911.05722。

SimCLR 需要巨大 batch;MoCo 提出 memory queue(记忆队列)保存历史负样本:

Encoder Q → query ────────────────┐
                                  ├→ Contrastive Loss
Encoder K → key → Queue ──────────┘

优势:不用巨大 GPU。


10. CLIP:对比学习进入多模态

论文:Learning Transferable Visual Models From Natural Language Supervision(OpenAI 2021),arXiv: 2103.00020。

核心:两个 Encoder——

  • Image Encoder:图片 → 向量
  • Text Encoder:文本 → 向量

目标:让匹配的图片-文本距离近(图片“狗在草地上奔跑” ↔ 文本 “A dog running on grass”),不匹配的远离(↔“飞机起飞”)。


11. CLIP 的 Loss

假设 batch 有 N 对图片文本,得到图像 embedding I1,...,INI_1,...,I_N 和文本 embedding T1,...,TNT_1,...,T_N,计算相似度矩阵 Sij=IiTTjS_{ij} = I_i^T T_j

T1T2T3
I1
I2
I3

然后对每一行做 Cross Entropy,同时对每一列做 Cross Entropy。所以 CLIP 实际上就是双向 InfoNCE


12. 对比学习为什么有效?

核心原因:它学习的是关系,而不是标签

  • 分类:学习“猫 = 类别 3”
  • 对比学习:学习“什么东西和猫相似?”

因此得到更加通用的 representation。例如 CLIP 没有训练“狗是什么类别”,但知道 dog / puppy / animal / pet 之间的关系。


13. 对比学习的问题

  1. False Negative(假负样本):两个图片都是狗,但在 batch 中被当成负样本,导致模型被错误拉远;
  2. 负样本数量依赖:InfoNCE 通常需要大量 negative,所以 batch size 很重要;
  3. Representation Collapse(表示坍缩):如果所有 embedding 都一样(z1=z2=z3)也满足部分目标——需要额外机制,例如 BYOL(不用负样本)。

14. 对比学习的发展路线

Metric Learning → Contrastive Loss → NCE → InfoNCE
  → SimCLR / MoCo → CLIP → Multimodal Foundation Model

15. 论文实战:CDSD / SE-COT / MR-DCoT 中的对比学习(Single-DGOD 应用)

在单域泛化目标检测(Single-DGOD)论文中,对比学习(InfoNCE)被用于两个关键场景:特征解耦原型对齐

15.1 CDSD:对比损失做循环解耦

CDSD(CVPR 2022)用两个对比损失把特征拆成“域不变 / 域特有”:

L_gc(全局级):拉近 F_di ↔ F_i2i(域不变再过不变提取器),推远 F_di ↔ F_i2s
L_ic(实例级):在 RoI 抠出的实例上做同样的拉近/推远
→ 循环 + 对比,让两个提取器越分越干净(无需域标签)

15.2 SE-COT:对比损失做风格/内容解耦

SE-COT(CVPR 2025)的 LdL_d 对比损失:拉近 F1FsF_1 \leftrightarrow F_s(风格分支忠实代表原图),推远 F1FcF_1 \leftrightarrow F_c(内容分支不沾外观)——用对比给两个提取器分配不对称角色。

15.3 MR-DCoT:对比损失做原型锚定

MR-DCoT(TPAMI 2026)的 LglobalL_{global} 对比损失:把投影后的离流形特征拉近本类原型 PgtP_{gt}、推远其他原型 PkgtP_{k\neq gt}——对比从“样本对”升级为“特征 vs 类原型”。

15.4 共同点:对比学习 = 解耦/对齐的通用工具

论文对比损失的作用正样本负样本
CDSD循环解耦FdiFi2iF_{di} \leftrightarrow F_{i2i}FdiFi2sF_{di} \leftrightarrow F_{i2s}
SE-COT风格/内容解耦F1FsF_1 \leftrightarrow F_sF1FcF_1 \leftrightarrow F_c
MR-DCoT原型锚定H(zoff)PgtH(z_{off}) \leftrightarrow P_{gt}H(zoff)PkgtH(z_{off}) \leftrightarrow P_{k\neq gt}

和 CLIP 的联系:SE-COT / MR-DCoT 都用了 CLIP 文本编码器——而 CLIP 本身就是对比学习训练出来的多模态模型。所以这几篇论文是“用对比学习训练的工具(CLIP),再做对比学习式的解耦”——对比思想贯穿始终。

一句话:在这几篇论文里,对比学习不是用来学通用表示,而是用来回答“什么和什么应该相似”——解耦时回答“域不变和它自己相似”,对齐时回答“偏离特征和本类原型相似”。


总结:一句话理解对比学习

对比学习不是告诉模型“这个是什么”,而是让模型自己发现“什么东西应该被认为相似”。

数学上,InfoNCE ≈ CrossEntropy:目标是最大化正样本相似度、最小化负样本相似度。而 CLIP 进一步把这个思想推广到“图像空间 ↔ 文本空间”,最终形成今天多模态大模型的重要基础。


参考资料

  1. Contrastive Predictive Coding:https://arxiv.org/abs/1807.03748
  2. SimCLR(A Simple Framework for Contrastive Learning of Visual Representations):https://arxiv.org/abs/2002.05709
  3. MoCo(Momentum Contrast for Unsupervised Visual Representation Learning):https://arxiv.org/abs/1911.05722
  4. CLIP(Learning Transferable Visual Models From Natural Language Supervision):https://arxiv.org/abs/2103.00020
  5. Decoupled Contrastive Learning:https://arxiv.org/abs/2110.06848
  6. Rethinking InfoNCE: How Many Negative Samples Do You Need?:https://arxiv.org/abs/2105.13003
  7. 知乎:对比学习损失(InfoNCE loss)与交叉熵损失的联系,以及温度系数的作用:https://zhuanlan.zhihu.com/p/506544456

在以下平台分享此文章:

上一篇
从熵到大模型:为什么“预测”就是一种压缩?
下一篇
学习笔记:上下文工程 (Context Engineering) —— AI Agent 背后的关键技术