对比学习(Contrastive Learning)总论

1. 核心思想

对比学习的核心目标是学习一个嵌入空间,使得相似样本(正样本)的距离接近,不相似样本(负样本)的距离远离。

1.1 基本框架

给定一个查询样本 ,正样本集 包含与 相似的样本,负样本集 包含与 不相似的样本。对比学习期望:

其中 是编码器, 是相似度函数。

1.2 为什么对比学习能学习到可迁移的判别表示

对比学习通过**极端的代理任务(pretext task)**学习表示:

  1. 无需标签:仅依靠数据自身的结构信息
  2. 区分性:强迫模型区分所有样本对,习得细粒度特征
  3. 迁移性:学到的特征跨越不同视觉/语言任务,因为模型必须捕获语义级相似性而非浅层视觉线索

2. 数学统一框架

2.1 相似度函数

点积相似度(余弦相似度的缩放版本)

归一化温度缩放点积(NT-Xent 使用的相似度)

其中 温度系数

2.2 温度系数对分布的影响

定义 为 softmax 分布。

  • (如 0.01-0.1):分布锐利(sharp),梯度由少数困难负样本主导
  • (如 0.5-1.0):分布平滑(smooth),所有负样本贡献相近梯度

2.3 分布对齐:均匀性(Uniformity)

好的对比学习表示应满足两个性质:

  1. 对齐性(Alignment):正样本对距离接近
  2. 均匀性(Uniformity):表示在超球面上均匀分布

均匀性度量:


3. 典型损失函数

3.1 Contrastive Loss(对比损失)

-margin-based contrastive loss,也称为 Contrastive Loss:

其中:

  • 是欧氏距离的平方
  • 指示是否为正样本对(1=正,0=负)
  • 是边界超参数

(正样本对),损失为 ,最小化正样本距离。 当 (负样本对),损失为 ,仅当距离小于 时才产生损失。

3.2 Triplet Loss

其中:

  • 是锚点(anchor)
  • 是正样本(positive)
  • 是负样本(negative)
  • 是边界,确保正负样本间有足够间隔

3.3 InfoNCE

InfoNCE 将对比学习建模为预测正样本的分类问题

分解形式

温度系数梯度分析

对数概率的梯度:

  • 正样本项:,直接推动正样本相似度
  • 负样本项:,根据概率推开负样本

InfoNCE 与互信息的关系

InfoNCE 是 的变分下界。设 为真实条件分布, 为对比分布:

其中 是提议分布(通常设为均匀分布)。

3.4 NT-Xent (Normalized Temperature-scaled Cross Entropy)

SimCLR 使用的损失,对每个样本 计算:

其中:

  • 是 batch size(含两个 view)
  • 是归一化点积
  • 的正样本(配对的另一个增强)
  • 排除自身

总损失取所有 个样本的平均:

3.5 Margin-based Loss

时产生损失,即正样本距离超过负样本距离 + 边界时。


4. 温度系数 的深入分析

4.1 温度系数对梯度的影响

,则

关键观察:当 时(正常情况),,正样本梯度大,负样本梯度小。当 时(异常情况),梯度反转,强制拉近正样本。

4.2 温度系数对表示分布的影响

分布特征梯度来源风险
极锐利(接近 one-hot)主导负样本表示空间各向异性,易崩溃
小(如 0.05-0.1)较锐利困难负样本可能过度关注硬负样本
中等(如 0.1-0.3)适中均衡推荐起始值
大(如 0.5-1.0)平滑所有负样本均匀对比信号被稀释

4.3 温度系数的自适应策略

线性升温:初期 ,线性降至

余弦衰减

基于熵的调整:当正样本概率熵过高时降低 ,过低时升高


5. 正负样本构造策略

5.1 正样本构造

图像领域

  • 同一图像的不同增强视图(裁剪、翻转、颜色变换)
  • 同一图像的不同区域块(patch)
  • 视频中的连续帧(时序正样本)

文本领域

  • 同一句子经不同增强的版本
  • 上下文相关掩码预测的恢复
  • 机器翻译中的不同语言版本

关键原则:正样本应保持语义一致性,仅改变表面属性而不改变语义类别。

5.2 负样本构造

In-batch 负样本

将同一个 batch 内其他样本视为负样本。SimCLR 的做法:batch size ,每个样本有两个增强,共 个样本。对于样本 ,其正样本是 (配对的另一个增强),负样本是除 外的 个样本。

Memory Bank

维护一个较大的样本库 (如 65536 个样本),每次随机采样负样本。MoCo 使用动量更新的 key 编码器持续更新 memory bank。

Queue-based 负样本

使用队列维护最近见过的样本。新样本入队,最旧的样本出队。队列大小(如 65536)与 batch size 解耦。

5.3 负样本质量的重要性

硬负样本(与查询高度相似但实际不同):

  • 提供强梯度信号
  • 过多会导致学习困难
  • 适度的硬负样本有益

简单负样本

  • 提供平稳梯度
  • 数量多但信息量少
  • 避免极端:完全简单负样本会退化为 trivial

负样本数量与 batch size 的关系

batch size负样本数效果
3262通常不足
64126基本可用
256510推荐起步
40968190显著提升
819216382最佳效果

6. 表示崩溃(Representation Collapse)

6.1 崩溃的类型

完全崩溃:所有样本映射到同一个点

  • ,其中 是常数向量
  • 损失值接近某常数,无法进一步优化

局部崩溃:所有样本映射到嵌入空间的子空间

  • 表示仅分布在某个子流形上
  • 维度降低,判别能力丧失

6.2 崩溃的原因

对比损失存在退化解:如果所有样本的表示都相同(),则:

  • (正样本相似度 = 1)
  • (负样本相似度 = 1)
  • 损失值固定,无法区分好与坏的表示

形式化:当 时,,与表示质量无关。

6.3 防止崩溃的方法

归一化( 归一化)

将表示限制在超球面上,防止坍缩到某一点。但仍可能使所有表示聚集在单位球的某个区域。

停止梯度(Stop Gradient)

  • BYOL/SimSiam:使用预测器网络 预测另一个 view 的表示
  • 梯度仅从一侧流向另一侧,打破对称性
  • 不需要负样本即可防止崩溃

Shuffle BN

  • 在两侧网络间打乱 BatchNorm 的统计量
  • 防止信息泄漏导致崩溃

正则化均匀性

显式推动表示均匀分布。


7. 工程实践

7.1 数据增强策略

图像增强策略

增强类型说明效果
随机裁剪 + 调整大小从原图裁剪不同区域并resize引入空间多样性
水平翻转随机水平翻转引入视角变化
颜色扰动随机调整亮度/对比度/饱和度/色调捕获颜色相似性
高斯模糊对图像应用高斯模糊增加抗干扰性
灰度化以概率转换为灰度图增加颜色不变性
随机网格化将图像划分为网格并打乱引入结构变化

文本增强策略

  • 同义词替换(EWK)
  • 随机插入(RI):在句子中随机插入词语及其同义词
  • 随机交换(RS):随机交换句子中两个词的位置
  • 随机删除(RD):以概率随机删除词

多模态增强

  • 随机丢弃模态(如 dropout image 或 text)
  • 随机标记丢弃(类似 BERT 的 [MASK])

7.2 Batch Size 与负样本数量

SimCLR 的消融实验

Batch Size负样本数ImageNet Top-1
25651071.7%
512102273.3%
1024204674.8%
2048409476.0%
4096819077.0%

增加有效负样本的方法

  1. Memory Bank:将负样本数量与 batch size 解耦

    • Memory Bank 大小 可设为 65536 或更大
    • 每次随机采样 个样本作为负样本
  2. 队列-based(MoCo)

    • 维护一个队列 存储最近 个样本的表示
    • 新 batch 的表示入队,最旧的出队
    • 队列与编码器异步更新
  3. 梯度累积

    • 在多个小 batch 上累积梯度
    • 等效于更大的 batch size

7.3 监控嵌入空间健康

正负样本相似度分布监控

# 训练时记录
positive_similarities = []
negative_similarities = []
 
for batch in dataloader:
    z1, z2 = encoder(batch)  # 两个增强的表示
    # 计算正样本对相似度
    pos_sim = torch.mm(z1, z2.T)  # 对角线元素为正样本对
    # 计算负样本对相似度
    neg_sim = torch.mm(z1, z2.T)  # 非对角线元素
    
    positive_similarities.append(torch.diag(pos_sim).mean())
    negative_similarities.append(neg_sim[~mask].mean())
  • 正样本相似度应该高且稳定(> 0.8)
  • 负样本相似度应该低但不要太低(0.1-0.3 为宜)
  • 如果负样本相似度接近 0,可能表示崩溃或温度系数过低

均匀性度量

监控 的趋势(越负越好,表示更均匀)。

t-SNE/UMAP 可视化

每若干 epoch 可视化嵌入空间,检查是否形成有意义的聚类。

7.4 对比学习与分类学习的区别

维度对比学习分类学习
标签依赖不需要标签,利用数据自身结构需要明确标签
优化目标样本间的相对关系样本与类别标签的映射
表示性质语义级相似性,更通用任务特定,判别性强
迁移能力特征迁移性好,可用于下游任务迁移依赖微调
负样本必须,用于区分通常不需要
表示维度通常需要归一化(如 通常不需要归一化

7.5 对比学习与其他任务的关系

与检索的关系

  • 对比学习学到的表示可直接用于基于余弦相似度的最近邻检索
  • 检索质量是表示质量的直接指标

与聚类的关系

  • SwAV 等方法将对比学习与聚类结合
  • 通过聚类生成伪标签,再进行对比学习

与表示迁移的关系

  • 视觉领域的预训练表示可迁移到文本领域(如 CLIP)
  • 对比学习提供了跨模态对齐的自然框架

8. 典型算法演进

8.1 早期方法

方法年份关键思想
CPC2019通过预测未来表示学习
RotNet2018识别图像旋转角度
DeepCluster2018聚类生成伪标签

8.2 Contrastive Learning 时代

方法年份关键贡献
MoCo2020队列 + 动量编码器
SimCLR2020大 batch + 强增强
BYOL2020孪生网络 + 预测器 + 停止梯度
SwAV2020对比学习 + 聚类

8.3 CLIP 与多模态时代

CLIP (ICML 2021):

  • 视觉编码器 + 文本编码器对比学习
  • 4亿图像-文本对预训练
  • 零样本分类能力

9. 对比学习任务设计检查清单

样本构造

  • 正样本构造方式是否合理(语义一致性)
  • 负样本数量是否充足(建议 > 1000)
  • 是否避免正样本泄漏(如augmentation后仍属同一类)

网络架构

  • 是否使用归一化(如 归一化)
  • Projection Head 是否使用多层 MLP
  • 是否使用动量编码器(MoCo)或停止梯度(SimSiam)

损失函数

  • 是否设置温度系数 (推荐范围 0.05-0.2)
  • 温度系数是否需要自适应调整
  • 是否监控损失值收敛情况

数据增强

  • 图像增强策略是否充分(建议至少 3 种组合)
  • 增强是否改变语义(不应改变)
  • 文本增强是否保持语义等价

训练监控

  • 是否监控正样本相似度分布
  • 是否监控负样本相似度分布
  • 是否监控均匀性指标
  • 是否定期可视化嵌入空间

资源规划

  • Batch size 是否足够(建议 >= 256)
  • Memory Bank 或 Queue 大小是否合理
  • 是否需要梯度累积

10. 常见训练问题排查表

问题原因解决方案
表示崩溃:所有表示相同或相近对比损失退化解添加 归一化、使用停止梯度(BYOL/SimSiam)、添加均匀性正则化
正样本相似度过高 (> 0.95)温度系数过低或增强不足提高 (如 0.1→0.2)、增强数据增强强度
正样本相似度过低 (< 0.5)增强过于激进、编码器容量不足减弱增强、增加网络深度、使用预训练模型
负样本相似度过高 (> 0.5)负样本数量不足、采样有偏增加负样本数量、使用 Memory Bank、使用更难的负样本采样
负样本相似度过低 (< 0.05)温度系数过低、表示空间过于稀疏提高 、减少正则化强度
**训练不稳定/震荡学习率过高、batch size 过小降低学习率、使用学习率预热(warmup)、增加 batch size
迁移效果差:下游任务性能低任务过于简单、数据分布差异大使用更多样化的预训练数据、使用任务相关的正样本构造
梯度消失/爆炸相似度数值范围问题归一化向量、使用梯度裁剪(max_norm=1.0)、调整 范围
收敛过慢表示维度不足、信息瓶颈增加嵌入维度(512→1024)、移除 Projection Head 瓶颈层
Loss 不下降学习率过低/过高、梯度阻塞调整学习率、检查梯度流、验证数据加载
内存不足负样本队列过长、batch size 过大减小 Queue 大小、使用梯度累积、降低 batch size
过早收敛到局部解正样本过于简单、负样本过于困难增加增强难度、使用课程学习(从易到难)
嵌入空间碎片化温度系数过高、缺少均匀性约束降低 、添加均匀性正则化

11. 数学推导补充

11.1 InfoNCE 与互信息下界的完整推导

为查询, 为正样本, 为负样本集合。定义对比分布:

定义提议分布 (均匀分布)。

互信息 的变分下界:

应用 Jensen 不等式和琴生不等式,可得:

因此,最小化 InfoNCE 损失等价于最大化互信息下界

11.2 为什么 In-batch 负样本有效

设 batch 内有 个独立样本,每个样本产生两个增强视图,共 个表示。

对于样本 的正样本 ,负样本为除 外的 个样本。

采样偏差分析:设负样本的真实分布为 ,in-batch 采样分布为

足够大时:

其中 取决于数据分布的方差。因此,当 batch size 足够大(如 >= 256)时,in-batch 负样本是真实负样本的良好近似


12. 扩展话题

12.1 有监督对比学习

Supervised Contrastive Learning (SimCLR v2) 将标签信息融入正负样本构造:

其中 ,即所有同类样本作为正样本。

有监督 vs 无监督:有监督对比学习中,相同类别的不同增强也视为正样本,大幅增加正样本数量。

12.2 多模态对比学习

CLIP (Learning Transferable Visual Models From Natural Language Supervision):

  1. 双塔架构:图像编码器 + 文本编码器
  2. 对比损失
  3. 大规模预训练:4亿图像-文本对
  4. 零样本迁移:通过自然语言提示实现分类

12.3 对比学习与非对比学习的结合

掩码图像建模 (MAE) + 对比学习

  • 使用对比学习作为辅助损失
  • MAE 提供局部特征,对比学习提供全局语义

DINO (Self-Distillation with No Labels)

  • 学生网络预测教师网络的中心(center)
  • 避免使用负样本,通过交叉熵实现判别学习

13. 核心公式速查

InfoNCE

NT-Xent

Triplet Loss

温度梯度


参考资料

  1. SimCLR: A Simple Framework for Contrastive Learning of Visual Representations (Chen et al., 2020)
  2. Momentum Contrast for Unsupervised Visual Representation Learning (He et al., 2020)
  3. BYOL: Bootstrap Your Own Latent (Grill et al., 2020)
  4. CLIP: Learning Transferable Visual Models From Natural Language Supervision (Radford et al., 2021)
  5. InfoNCE: A Mutual Information Lower Bound for Representation Learning