教小孩认东西,不一定要告诉他名字。让他知道"这两只都是猫、那只不是",他也能学会分辨。大模型的训练里有一个同款思路:不直接告诉模型正确答案,只让它判断"哪些样本相似、哪些不相似",靠这种比较自己学出区分能力。这就是对比学习,自监督学习里最有代表性的方法之一。
机制:进来什么,发生什么,出去什么
进来一批样本,每个样本经过两种不同的变换——裁剪、调色、局部遮挡——得到两个"视图"。同一个原图出的两个视图,语义上当然还是同一个东西。
发生的事分两步。先是一个编码器把每个视图映射成一个向量,这个向量就是"表征"——模型对这个样本的内部表示。同时,训练目标做拉近和推远两件事:同一个原图的两个视图,向量要靠近;不同原图的视图,向量要推开。一个损失函数把"近的更近、远的更远"变成可以优化的目标,反向传播据此更新编码器。
出去的是一个训练好的编码器。它的能力可以一句话检验:语义相近的输入,得到的向量相近;不相近的,向量明显分开。语义检索"查一句、找出意思相近的十句话",靠的就是这个性质。
回到开头那个类比:猫例子里,"都是猫"构成正样本对,"那只不是"是负样本。模型始终没被告知"猫"这个字,但它学出了猫的样子——区分能力本身就是一种知识。
正负样本怎么构造
正样本是同一个样本的两种变换视图:一张猫图裁剪一次、调色一次,得到两份,算"相似"。负样本是批次里其他的样本:那张狗图、那张桌子图,算"不相似"。
这是它不需要人工标注的根本原因:相似性不从标签来,从数据增强来。标签要人一条条标,增强可以反复做——一个样本能变出多个"同一个东西的不同版本",海量训练样本就这么来的。
构造质量直接决定效果。什么算"同一张图的不同版本"需要设计:增强太弱,两个视图没差别,模型学不到东西;增强太强,裁剪到只剩一块颜色,语义被破坏,"相似"的假设本身就不成立了。这个度,是对比学习工程里最讲究的部分。
表征距离:拉近谁,推远谁
表征的远近用向量距离度量,方向相近通常用余弦相似度。训练时同时发生两件事:正样本对的距离被拉小,负样本对的距离被推大,而且要留出间隔——不是"比负样本近一点",是"明显近"。
负样本的数量是个关键变量。一个批次里负样本越多,模型见过的"不像"就越丰富,学到的边界越细;代价是计算量随批次增大而上升。负样本太少时,模型容易把"不像"理解得太窄,换个没见过的不像样本就分不开。
一个判断标准:随机抽两张不相干的图,如果它们的向量也很近,说明表征没学出来——正负样本在表征空间里糊成一团,后面的检索、分类都无从谈起。
学到的表示用在哪
图像理解:预训练一个编码器,再在下游任务上微调,是计算机视觉的常规路径。
文本表示:句向量、语义检索、Embedding 模型普遍有对比学习的成分——查询和文档向量近,就判相关。注意它和生成式模型的分工:编码器一次前向就给出向量,生成模型逐 token 往外吐字,两者的速度和用途完全不同,可以参考生成速度由什么决定。
检索与推荐:判断"哪些内容相似"正是它的主场,电商的相似品、内容平台的相似推荐,底层都有这类技术在跑。
落地成本比想象低。很多对比学习预训练的权重是开源可用的(可以参考开源权重模型的使用边界),编码器规模通常远小于同代生成模型(差别可以参考参数量意味着什么),部署时还可以量化瘦身(参考模型量化的基本思路),这也是它在工业界铺得开的原因之一。
它做不到什么
它依赖增强的设计。增强方案是对比学习的"题库",题库出偏了,模型学到的就是偏的。换一个数据分布完全不同的领域,原来验证过的增强方案经常要重做。
它可能走捷径。如果训练数据里"暖色调"和"猫"高度相关,模型可能靠颜色区分猫和狗,形状看得一塌糊涂——这叫捷径学习,学到的表征在真实分布上不堪用。发现方法也简单:换一批打破颜色关联的测试图,准确率掉下来,就是在走捷径。
它需要大量数据。不用标注不等于不用数据:样本量小、批次小的时候,负样本不够,效果明显下降。小数据集场景,它的优势没有大场景那么突出。
它学的是"相似性",不是"是什么"。表征里没有人类可读的类别名,映射到"这是猫"还要额外训练一步分类器;细粒度区分也是弱项——两种长得极像的鸟、两款长得极像的手机,它给出的向量可能非常近。
| 训练阶段 | 关键动作 | 判断标准 |
|---|---|---|
| 构造视图 | 同一图做两种变换,生成一对视图 | 两个视图人看仍是同一内容 |
| 编码映射 | 编码器把每个视图转成向量 | 同图两视图的距离明显小于异图 |
| 对比优化 | 拉近正样本对,推远负样本对 | 损失下降,且检索测试集命中上升 |
| 下游使用 | 冻结编码器,接分类或检索 | 少样本场景下仍可用 |
对比学习速查
- 核心不是"正确答案",是"哪些样本相似"
- 正样本来自同一图的两种变换,无需标注
- 表征是向量:语义近,向量就近
- 增强决定上限:太弱没区分度,太强丢语义
- 警惕捷径:靠颜色而非形状区分,测试集一换就现形
三个追问
它和监督学习冲突吗?不冲突,常见做法是先用它做预训练、再用少量标注微调。标注充足时两者效果接近,标注稀缺时它的优势才显出来。
为什么文本也能用它?同一问题的不同问法、同一文档的相关段落,都能构造成正样本对;句向量模型普遍有这个成分,语义检索的"意思相近"就是这么算出来的。
它能替代生成式大模型吗?分工不同:它产出理解和判别的能力,生成式模型产出内容。检索、分类、去重用它;写文章、对话用生成式。混用是常态,替代谈不上。


