标准回答
一句话核心
对比学习不预测具体标签,而是学「什么该相似、什么该不相似」:在嵌入空间里把正样本对拉近、把负样本对推远,从而得到有判别力的表示。
正负样本怎么来
- 正例:同一图像的两个数据增强视图(SimCLR)、同一图配对的文本(CLIP),或时序/视角上相关的样本;
- 负例:批次里其他不相关样本。负例数量越多、越「难」,表示通常越好。
损失函数(InfoNCE)
对一个 anchor,计算它与正例和所有负例的相似度(余弦),用 softmax 把正例当作「正确类别」做分类:
L = -log( exp(sim(a, a+)/τ) / Σ exp(sim(a, ·)/τ) )τ 是温度系数,越小越强调难负例。最小化它即拉近正例、推远负例。
为什么重要
它是自监督范式,靠数据自身结构构造监督信号,不需人工标注类别,能在海量无标注数据上预训练出通用编码器(SimCLR、MoCo、CLIP)。学到的表示迁移到分类、检索、多模态对齐等下游任务,常以线性探测或微调即可取得强效果。CLIP 正是把对比学习用于图文跨模态对齐。
常见误区
⚠️ 常见踩坑
对比学习不是有监督分类,正负例由增强或配对自动构造而非人工类别;负例规模与质量很关键,太少或太易会导致表示坍缩。也别混淆它与生成式自监督(如 MAE 重建)——后者不靠正负对比。
追问
追问 1:负样本数量为什么影响表示质量?
更多负例提供更强的「推远」信号,让模型在更大的对比集合里区分正例,学到更细粒度的判别边界。SimCLR 靠大 batch 提供负例,MoCo 用动量队列扩充负例库,都是为在算力受限时维持足够多、足够一致的负样本。
追问 2:没有负样本也能做对比学习吗?
可以。BYOL、SimSiam 等「无负例」方法只用正例对,靠预测器 + 停梯度(stop-gradient)或动量编码器防止表示坍缩;DINO 用自蒸馏加中心化与锐化。它们说明合适的架构约束可替代显式负例,避免所有样本塌成同一点。
追问 3:对比学习与 CLIP 是什么关系?
CLIP 是对比学习在跨模态上的代表应用:正例是匹配的图文对,负例是批次内其他图文组合,用对称 InfoNCE 把图像与文本对齐到共享空间。可见对比学习是方法论,CLIP 是把它用于图文对齐的具体实例。
延伸学习
与本题相关的知识库文章、术语、工具与行业资讯。