SimCLR 全称是 A Simple Framework for AI 词典:Contrastive Learning">Contrastive Learning of Visual Representations(视觉表征对比学习的简单框架),由 Google 的研究者在 2020 年提出。一句话概括:拿同一张图做两次不同的数据增强,让模型学会"这两种样子是同一个人,别人不是",从而在没有人工标签的情况下学出好用的图像特征。
原理:一图两吃,拉近推远
第一步是造样本。取一张照片,随机做两次数据增强(data augmentation):裁出不同区域、改色、翻转、加模糊……同一张图就生出两个"长得不一样"的版本,它们互为正样本(positive pair);同一批里其他图片的版本,全是负样本(negative pair)。
打个比方:你只见过同事的证件照,某天他换了发型、换了衣服、戴了口罩走过来,你还是一眼认得出,同时不会把他和旁边的人搞混。SimCLR 要练的就是这件事——抓住"这是同一只猫、同一个人"的本质,不被颜色、角度、亮度这些表面差异骗到。
第二步是编码。两个版本分别送进同一个编码器(encoder,通常是卷积网络)提特征,再经过一个小的多层感知机——投影头(projection head),把特征映射到一个专门比相似度的空间。
第三步是算账:正样本的向量尽量同向,负样本尽量远离,把这个"拉近推远"写成一个可求导的损失函数,反向传播。有个反直觉的细节:投影头训练完就扔掉,下游任务只用编码器的输出,它更像一块"训练用的垫脚石"。
几个关键结论:增强的组合与强度至关重要(尤其是随机裁剪+颜色扰动);批次越大、负样本越多,通常学得越好,代价是显存和算力。不搞花哨架构、靠简单组件堆效果,这就是名字里 "Simple" 的由来。
和邻居的区别
| SimCLR | 有监督预训练 | MoCo | BYOL | |
|---|---|---|---|---|
| 需要标签 | 否 | 是 | 否 | 否 |
| 负样本来源 | 同一批里的其他图 | — | 队列+动量编码器 | 不用负样本 |
| 关键点 | 强增强、投影头、大批量 | 标注质量 | 小批量也能攒负样本 | 靠预测器避免塌缩 |
它和自编码器(autoencoder)那种"把图重建出来"的思路也不同:SimCLR 不关心像素还原得像不像,只关心"像不像同一张"。
实际意义
对算法从业者:当领域标签很贵——医学影像、工业质检、内部商品图——可以先用海量无标注图做对比学习预训练,再拿少量标注微调。SimCLR 的真正贡献是把配方讲清楚了,这套"强增强+投影头+大批量+足够训练轮数"成了后来一大批自监督方法的公共底盘;具体实现和最新版本以官方代码库与论文为准。
对普通人:手机相册自动按人脸分组、电商"以图搜同款",背后往往就是这类"不看标签、只看像不像"的模型在干活。
