banner
NEWS LETTER

对比学习

Scroll down

对比学习(Contrastive Learning)

对比学习是自监督学习(Self-Supervised Learning) 的核心范式,核心目标是通过“对比”样本间的相似性与差异性,学习到数据的通用的特征表示,无需人工标注标签,在海量无标注数据上效果突出。


一、核心思想与基础概念

1. 核心逻辑

拉近正样本、推远负样本:在特征空间中,让相似样本(正样本对) 的向量距离尽可能近,不相似样本(负样本对) 的向量距离尽可能远。

2. 术语

  • 锚点(Anchor):作为参考的原始样本(如一张图片、一个句子)。
  • 正样本(Positive):与锚点语义/内容高度相似的样本(如同一图片的不同增强视图、同一句话的同义改写)。
  • 负样本(Negative):与锚点语义/内容完全不同的样本(如不同物体的图片、不同含义的句子)。
  • 特征空间(Embedding Space):将原始数据映射到低维向量空间(如 $d$ 维向量),用于计算样本间的相似度。
  • 相似度函数:常用余弦相似度($sim(z_i,z_j)=\frac{z_i\cdot z_j}{||z_i||\cdot||z_j||}$)衡量向量距离。

3. 直观类比

把模型想象成“认亲”系统:

  • 锚点是你自己;
  • 正样本是你的亲人(长得像、关系近);
  • 负样本是陌生人(长得不像、关系远);
  • 模型通过学习,让“亲人”在特征空间中聚在一起,“陌生人”分散开,最终能精准区分同类与异类。

二、核心组成模块(四大组件)

1. 数据增强(Data Augmentation):构造正样本的核心

正样本通常由同一原始样本的不同增强视图生成,是对比学习的基础。

  • 图像领域:随机裁剪、水平翻转、颜色抖动(亮度/对比度/饱和度)、高斯模糊、随机擦除、旋转等。
  • 文本领域:同义词替换、随机删除/插入、句子改写、回译(英译中再译回英)、dropout增强等。
  • 音频领域:时间拉伸、音调偏移、噪声添加、音量缩放等。
  • 关键:增强需保留语义一致性(如图片的主体、文本的核心含义),仅改变无关属性(如光照、字体)。

2. 编码器(Encoder):特征提取

将原始数据(图像/文本/音频)映射到低维特征向量,是对比学习的“大脑”。

  • 图像:CNN(ResNet、ResNeXt、EfficientNet)、ViT(视觉Transformer)。
  • 文本:BERT、RoBERTa、GPT、T5(取CLS/最后一层隐藏态)。
  • 输出:$z=f(x)\in\mathbb{R}^d$($d$ 通常为 512/1024)。

3. 投影头(Projection Head):优化对比损失

接在编码器后的小型多层感知机(MLP),仅用于计算对比损失,训练完成后可丢弃

  • 结构:通常为 2-3 层全连接层 + ReLU 激活。
  • 作用:避免编码器直接拟合对比任务导致过拟合,提升下游任务(分类/检测)的泛化能力。
  • 流程:$z=f(x)\rightarrow h(z)=W_2\cdot\sigma(W_1\cdot z+b_1)+b_2$($h$ 为投影头)。

4. 对比损失函数(Contrastive Loss):优化目标

最经典、最通用的是InfoNCE(Noise Contrastive Estimation),用于最大化正样本相似度、最小化负样本相似度。

公式(单锚点+1正样本+K负样本)

$$
\mathcal{L}{\text{InfoNCE}} = -\log\frac{\exp\left(\frac{sim(q,k+)}{\tau}\right)}{\exp\left(\frac{sim(q,k_+)}{\tau}\right)+\sum_{i=1}^K\exp\left(\frac{sim(q,k_i)}{\tau}\right)}
$$

  • $q$:锚点特征;$k_+$:正样本特征;$k_i$:第 $i$ 个负样本特征;
  • $\tau$:温度系数(超参数,通常 0.07-0.5),控制相似度分布的“尖锐度”;
  • 分子:正样本相似度的指数;分母:所有样本(正+负)相似度的指数和;
  • 目标:让正样本的概率接近1负样本的概率接近0,最终最小化损失。

损失的物理意义

  • 损失越小,正样本相似度越高、负样本相似度越低;
  • 模型通过反向传播,不断调整编码器与投影头的参数,使特征空间满足**“对齐性(正样本靠近)+均匀性(负样本分散)”**。

三、主流对比学习框架(从经典到现代)

1. SimCLR(2020,Google):极简通用框架

  • 核心:无动量、无队列,单编码器+单投影头,用批次内负样本(batch negative)。
  • 关键设计
    • 强数据增强(裁剪+翻转+颜色抖动+高斯模糊);
    • 2层 MLP 投影头;
    • 大批次(2048+),用批次内其他样本作为负样本。
  • 效果:在 ImageNet 上无监督预训练后,线性分类准确率达 76.5%(接近监督 ResNet-50 的 78.3%)。

2. MoCo(Momentum Contrast,2019,Facebook):解决大负样本问题

  • 核心动量编码器+队列(Queue),存储大量负样本(1024-65536),解决 SimCLR 批次小、负样本少的问题。
  • 关键设计
    • 双编码器:查询编码器(Q,可训练)+ 动量编码器(K,动量更新);
    • 队列:存储 K 编码器的历史输出,作为负样本池;
    • 动量更新:$K_{\text{new}}=m\cdot K_{\text{old}}+(1-m)\cdot Q$($m=0.99$,保证 K 稳定)。
  • 效果:MoCo v2 线性分类准确率达 79.2%,超越 SimCLR,成为工业界主流。

3. SimCLRv2(2020,Google):带蒸馏的对比学习

  • 核心:在 SimCLR 基础上,加入蒸馏(Distillation),用预训练模型作为教师,提升小模型性能。
  • 关键
    • 训练时同时优化 InfoNCE 与蒸馏损失;
    • 下游任务微调时,保留投影头的权重,提升微调效果。

4. SimCSE(2021,清华大学):文本对比学习标杆

  • 核心:用Dropout 作为数据增强(无需额外增强),在 BERT 上实现对比学习。
  • 关键
    • 无监督 SimCSE:同一句子两次 Dropout 生成正样本;
    • 有监督 SimCSE:用 NLI 数据集(蕴含/矛盾)构建正负样本;
    • 效果:在 STSb 任务上超越 BERT 基线,成为文本语义匹配的主流方法。

5. 其他重要框架

  • BYOL(Bootstrap Your Own Latent):无负样本的对比学习,仅用动量编码器与预测头,解决负样本选择难题;
  • SwAV:聚类式对比学习,将特征聚类,用聚类中心作为“虚拟正样本”;
  • CLIP(OpenAI,2021):多模态对比学习,将图像与文本映射到同一空间,实现跨模态检索与零样本分类。

四、理论基础:为什么对比学习有效?

1. 互信息最大化(Mutual Information Maximization)

对比学习本质是最大化输入 $x$ 与特征 $z$ 之间的互信息 $I(x;z)$,让特征保留输入的本质信息,丢弃无关噪声。

  • 互信息公式:$I(x;z)=\mathbb{E}_{p(x,z)}\log\frac{p(x,z)}{p(x)p(z)}$;
  • InfoNCE 是互信息的下界估计,通过优化 InfoNCE 间接最大化互信息。

2. 特征解耦能力

对比学习迫使模型忽略无关变换(如光照、裁剪、字体),聚焦语义本质(如物体类别、句子含义),因此特征更具判别性与鲁棒性

3. 无监督优势

无需人工标注,利用海量无标注数据(如互联网图片、文本、音频),大幅降低训练成本,适配小样本、长尾、开放世界场景。


五、关键技术细节

1. 正负样本构造

  • 正样本:必须语义一致,增强需保留核心信息;
  • 负样本:需语义完全不同,数量越多、多样性越强,模型效果越好(但需避免“假负样本”,如相似样本被误判为负)。

2. 温度系数 $\tau$

  • $\tau$ 越小:相似度分布越尖锐,模型更关注强正样本
  • $\tau$ 越大:相似度分布越平滑,模型更关注全局特征
  • 常用值:0.07(图像)、0.1(文本)。

3. 投影头的作用

  • 训练时:投影头是对比任务的专属层,避免编码器过拟合;
  • 微调时:丢弃投影头,仅用编码器输出特征,接入下游分类/检测头。

4. 负样本策略

  • 批次内负样本:SimCLR,简单但负样本少;
  • 队列负样本:MoCo,负样本多、效果好;
  • 记忆库负样本:存储所有样本特征,适合小数据集;
  • 虚拟负样本:BYOL、SwAV,无需真实负样本。

六、应用场景

1. 计算机视觉(CV)

  • 图像分类:无监督预训练后,线性分类准确率达 79%+;
  • 目标检测/分割:用对比预训练的编码器作为 backbone,提升小目标检测精度;
  • 人脸识别:学习人脸特征,区分不同人脸;
  • 医学影像:无标注数据预训练,提升病灶检测准确率。

2. 自然语言处理(NLP)

  • 句子表示:SimCSE、ConSERT,用于语义匹配、检索、问答;
  • 文本分类:预训练后微调,提升小样本分类效果;
  • 机器翻译:对比学习提升源语言与目标语言的对齐能力。

3. 多模态(CV+NLP)

  • 跨模态检索:CLIP,实现“以图搜文”“以文搜图”;
  • 零样本分类:CLIP 无需微调,直接用文本描述分类图像;
  • 图文生成:对比学习提升生成图像与文本的一致性。

4. 其他领域

  • 推荐系统:学习用户/物品特征,提升个性化推荐;
  • 音频/语音:语音识别、声纹验证;
  • 知识图谱:实体/关系表示,提升链接预测;
  • 生物医学:蛋白质/基因序列表示,预测功能。

七、优缺点总结

优点

  1. 无监督:无需标注,适配海量无标注数据;
  2. 通用:跨领域(CV/NLP/多模态),可迁移性强;
  3. 鲁棒:特征对噪声、变换不敏感;
  4. 高效:预训练后微调成本低,小样本效果好。

缺点

  1. 依赖数据增强:增强质量直接影响效果;
  2. 负样本选择难:假负样本会导致模型性能下降;
  3. 训练成本高:大批次、大模型需大量算力;
  4. 下游任务需微调:预训练特征需适配具体任务。

八、未来发展方向

  1. 无负样本对比:BYOL、SwAV 等,解决负样本难题;
  2. 小样本对比:适配低数据场景;
  3. 多模态融合:CLIP 扩展到视频、音频、3D;
  4. 轻量化对比:适配移动端、边缘设备;
  5. 与大模型结合:对比学习提升大模型的预训练效率与泛化能力。

九、总结

对比学习是自监督学习的基石,核心是通过对比正负样本学习通用特征,无需标注、效果强大、应用广泛。从 SimCLR、MoCo 到 CLIP、SimCSE,对比学习已成为 CV、NLP、多模态领域的主流技术,推动 AI 从“有监督”走向“无监督/自监督”的新范式。

其他文章
cover
CLIP
  • 26/03/28
  • 18:58
目录导航 置顶
  1. 1. 对比学习(Contrastive Learning)
    1. 1.1. 一、核心思想与基础概念
      1. 1.1.1. 1. 核心逻辑
      2. 1.1.2. 2. 术语
      3. 1.1.3. 3. 直观类比
    2. 1.2. 二、核心组成模块(四大组件)
      1. 1.2.1. 1. 数据增强(Data Augmentation):构造正样本的核心
      2. 1.2.2. 2. 编码器(Encoder):特征提取
      3. 1.2.3. 3. 投影头(Projection Head):优化对比损失
      4. 1.2.4. 4. 对比损失函数(Contrastive Loss):优化目标
        1. 1.2.4.1. 公式(单锚点+1正样本+K负样本)
        2. 1.2.4.2. 损失的物理意义
    3. 1.3. 三、主流对比学习框架(从经典到现代)
      1. 1.3.1. 1. SimCLR(2020,Google):极简通用框架
      2. 1.3.2. 2. MoCo(Momentum Contrast,2019,Facebook):解决大负样本问题
      3. 1.3.3. 3. SimCLRv2(2020,Google):带蒸馏的对比学习
      4. 1.3.4. 4. SimCSE(2021,清华大学):文本对比学习标杆
      5. 1.3.5. 5. 其他重要框架
    4. 1.4. 四、理论基础:为什么对比学习有效?
      1. 1.4.1. 1. 互信息最大化(Mutual Information Maximization)
      2. 1.4.2. 2. 特征解耦能力
      3. 1.4.3. 3. 无监督优势
    5. 1.5. 五、关键技术细节
      1. 1.5.1. 1. 正负样本构造
      2. 1.5.2. 2. 温度系数 $\tau$
      3. 1.5.3. 3. 投影头的作用
      4. 1.5.4. 4. 负样本策略
    6. 1.6. 六、应用场景
      1. 1.6.1. 1. 计算机视觉(CV)
      2. 1.6.2. 2. 自然语言处理(NLP)
      3. 1.6.3. 3. 多模态(CV+NLP)
      4. 1.6.4. 4. 其他领域
    7. 1.7. 七、优缺点总结
      1. 1.7.1. 优点
      2. 1.7.2. 缺点
    8. 1.8. 八、未来发展方向
    9. 1.9. 九、总结
请输入关键词进行搜索