2-对比学习与排序损失

1. 对比学习的基本思想

1.1 从分类到表示学习

监督学习中的分类损失(如 Cross-Entropy)要求模型将输入映射到一个固定的类别标签空间。这带来的局限是:类别数量是预定义的,新类别出现时必须重新训练;类别之间的语义关系由标签定义,无法捕捉细粒度的相似性信息。

对比学习(Contrastive Learning)的核心思想是:学习一个嵌入空间,使得相似的样本在空间中距离近,不相似的样本距离远。这里”相似”与”不相似”由数据自身定义(通常来自数据增强),而非预定义的标签。

形式化地,设编码器 将输入 映射为 维单位向量 。对比学习的目标是使

其中 是”相似”的一对(正样本对), 是不相似的一对(负样本对), 是余弦相似度

1.2 正负样本的定义

正样本(Positive pair):同一原始样本经不同数据增强得到的两个视图。来自同一图像的不同裁剪、不同颜色 jitter、不同翻转等。经编码器后记为

负样本(Negative pair):来自不同原始样本的视图。记为 。负样本的存在驱动模型学习区分能力——如果所有负样本都被推得足够远,则模型学到的区分边界在各类之间最优。

正样本定义依赖于数据增强策略,负样本定义依赖于采样方式(batch 内采样或外部 bank)。数据增强和负样本策略是对比学习效果的两大支柱。


2. 典型对比损失函数

2.1 Contrastive Loss(对比损失,Hadsell et al., 2006)

原始形式

设一对样本 的相似度记为 (余弦相似度),Contrastive Loss 定义为

其中 是欧氏距离, 是配对标签(1 为正样本,0 为负样本), 是**间隔(margin)**超参数。

各部分含义

  • 正样本项):,要求正样本的欧氏距离尽量小(尽量靠近)
  • 负样本项):,仅当负样本距离小于 margin 时才施加惩罚;若负样本已经足够远(),损失为 0,不施加额外推动力

设计动机

Contrastive Loss 的设计哲学是稀疏监督:仅对违反间隔约束的负样本施加惩罚,对已满足条件的负样本不消耗模型容量。这与 SVM 的间隔最大化思想一脉相承。


2.2 Triplet Loss(三元组损失,Schroff et al., 2015,FaceNet)

三元组结构

Triplet Loss 引入三元组

  • 锚点(anchor),基准样本
  • 正样本(positive),与 anchor 属于同一身份/类别
  • 负样本(negative),与 anchor 属于不同身份/类别

损失形式

其中 为 hinge 损失, 为 margin。

为什么需要间隔

,则只要 即可使损失为 0。这意味着正负样本之间的边界可以任意接近——只要正样本比负样本稍微近一点。加入 后,要求

即正负样本之间必须保持至少 的距离裕度,从而学到更具泛化性的度量空间。

三元组采样策略(重要)

Triplet Loss 的效果严重依赖采样策略。若负样本太容易(与 anchor 差距很大),则 loss 始终为 0,模型不学习;若负样本太难(与 anchor 非常接近但不是同一类),则模型被强迫在过于细粒度的边界上优化,反而影响泛化。

三种策略:

策略选择方式问题
easy negative随机选择明显不同的负样本损失总为 0,不学习
hard negative选择与 anchor 最接近的负样本过度优化困难负样本,边界畸形
semi-hard negative选择与 anchor 距离在 附近的负样本平衡学习难度与泛化能力,经验上推荐

FaceNet 论文的实验表明,semi-hard negative 采样在训练稳定性和最终效果之间取得最佳平衡。


2.3 InfoNCE / NT-Xent(Noise Contrastive Estimation / Normalized Temperature-scaled Cross Entropy)

从概率出发的推导

设批量(batch)中有 个原始样本,每个样本构造两个增强视图,则正样本对共 对。记第 个样本的两个增强视图为 ,则 是正样本, 与其他所有 )构成负样本。

模型对正样本对 的相似度为 (除以温度系数 ),对负样本 的相似度为

根据 InfoNCE 的定义,从配分函数(partition function)角度看, 作为 的正样本的概率估计为

其中分子是正样本对的指数相似度,分母是所有配对(1 个正样本 + 个负样本)的指数相似度之和。

InfoNCE 损失

负对数概率即为 InfoNCE 损失:

这正是 NT-Xent(Normalized Temperature-scaled Cross Entropy)的形式——将 temperature 引入指数相似度,再用 Cross-Entropy 的形式优化正样本被选中的概率。

等价形式展开

代入,记 ,则

第一项 最大化正样本相似度(推);第二项 最小化所有负样本的指数相似度和(拉)。综合效果即”拉近正样本、推远负样本”。

为什么叫 “Noise Contrastive Estimation”

NCE 原是 Gutmann & Hyvarinen (2010) 提出的密度比估计方法:用一个可学习的判别器区分数据分布和噪声分布。InfoNCE 将这一思想应用于对比学习,用正负样本的对比替代显式密度比,以对比的方式估计互信息(mutual information)的下界。具体地,InfoNCE 损失是 的估计量的负值,最小化 InfoNCE 即等价于最大化正样本对之间的互信息估计。


2.4 温度系数 的梯度推导与作用

温度系数的定义

温度系数 控制相似度分布的尖锐度(sharpness)

时,,指数相似度集中在最大值附近(分布极度尖锐);当 时,,所有相似度趋于相同(分布极度平滑)。

梯度分析

对正样本相似度 求偏导:

即梯度与正样本被选中的概率 残差成正比。当 (高置信度)时,梯度趋于 0,参数几乎不更新;当 (低置信度)时,梯度接近 ,参数大步更新。

温度对梯度量级的影响

对温度 求偏导(利用链式法则):

表明: 越小,对 的梯度越大 的量级)。这意味着温度低时,正样本相似度的微小变化会带来较大的梯度响应,模型会更积极地调整表示。

过低也有问题:当 时, 对于正确正样本趋向无穷,负样本的影响被指数级压制,整个目标退化为只关注少数”最容易区分”的正样本对,容易导致表示坍塌(collapse)。经验上 是图像对比学习(SimCLR 等)的常用范围;NLP 中因数据增强较弱, 通常偏高()。


3. 对比学习与梯度消失/表示坍塌

3.1 表示坍塌(Representation Collapse)

问题描述

表示坍塌是指编码器将所有输入映射到相同的表示(如所有嵌入趋近于同一个向量),使得任意两个样本之间的相似度均为最大(,若归一化)或最小(若用欧氏距离)。此时 InfoNCE 损失仍可以被优化到最小(因为模型”学会了”让所有表示相同,正样本对相似度恒为 1,负样本对的区分问题消失),但学到的表示没有任何信息量。

为什么发生

Collpase 发生在模型”走捷径”时:与其学习有意义的特征对比,模型发现只要将所有输入映射到相同向量,就能让正样本对相似度为 1,从而最小化 InfoNCE。这是损失函数本身的degeneracy(退化)问题,而非优化困难。

如何避免

  1. 负样本必须存在且足够多:若负样本数量不足,模型可能通过让所有表示相同来”作弊”。SimCLR、MoCo 等方法通过大批量(batch size ≥ 256)或大 memory bank(queue size ≥ 4096)来保证负样本数量。
  2. 不对称结构(asymmetric architecture):BYOL、SimSiam 等方法不使用负样本,而是通过两个不同结构的编码器分支(在线网络 vs 目标网络)引入隐式对比信号,避免显式负样本。
  3. 正则化:对 embedding 添加 l2 归一化约束 ,防止表示退化为零向量。

4. 负样本策略详解

4.1 Batch 内负样本(In-batch Negative)

SimCLR 采用的策略:每个 batch 有 个原始样本,每个样本构造两个增强视图,共 个表示。每个锚点(如 )将同 batch 内所有其他 个视图作为负样本(包括来自其他原始样本的视图)。

优点:实现简单,负样本与正样本来自同一分布,采样质量高。 缺点:batch size 必须足够大( 需数百甚至上千)才能保证负样本数量和多样性;内存消耗大。

4.2 Memory Bank / Queue(记忆库)

MoCo (Momentum Contrast) 的核心改进:用一个大尺寸的**队列(queue)**存储历史 epoch 中编码过的表示,作为负样本来源。队列大小(memory bank size)通常为 4096~65536,远超 batch size。

更新流程:

  1. 当前 batch 的表示入队,队列最旧的表示出队
  2. 负样本来自整个队列,而非当前 batch
  3. 队列的表示由动量编码器(momentum encoder)生成,保证负样本的表示随模型更新缓慢变化,而不是完全过时

优点:突破 batch size 限制,可以用小 batch 获得大量负样本;负样本多样性高(来自不同时期的模型)。 缺点:需要维护额外的动量编码器;memory bank 的表示与最新模型有 lag。

4.3 Cross-batch vs Within-batch

策略负样本来源采样一致性
In-batch当前 batch 内其他样本负样本与正样本分布高度一致
Memory bank历史队列(跨 batch)负样本来自不同时期的模型,分布有轻微偏移
Distributed negs多个 worker 间共享负样本(如 CLD)负样本规模极大,但通信开销高

5. 数据增强在对比学习中的角色

5.1 为什么需要数据增强

对比学习中的”标签”是数据自身的结构——同一图像的不同视图应映射到相近表示。若不对输入进行增强,模型只能学习到”相同输入”的恒等映射,而无法学到对语义变化鲁棒的表示。

数据增强引入了模型必须忽略的变换(颜色、旋转、噪声等),迫使模型捕捉变换不变量(invariant)——这些不变量通常对应语义信息(如物体的类别、形状)。

5.2 常见增强类型

增强类型作用典型场景
随机裁剪(Random Crop)迫使模型关注多个局部图像
颜色抖动(Color Jitter)颜色不相关时学到形状图像
高斯噪声抗噪声鲁棒性信号/语音
随机翻转(Horizontal Flip)位置不变量图像
随机旋转(Rotation)角度不变量图像
掩码(Masking)填补缺失信息NLP / 音频
Mixup / CutMix混合样本增强图像

5.3 增强与负样本的关系

经验上常见(empirical common practice):增强越强,负样本的有效性越低——因为强增强使得正样本对已经难以区分,负样本的挑战性相对降低。当增强很强时,可以减少负样本数量;当增强较弱时,必须增加负样本数量来维持学习信号的强度。SimCLR 的消融实验证明:更强的颜色抖动使 InfoNCE 目标对 batch size 的依赖减弱,因为正样本对本身就提供了更强的学习信号。


6. Margin Ranking Loss(排序损失)

6.1 与 Triplet Loss 的关系

Margin Ranking Loss 是 Triplet Loss 的更一般形式。设一个查询(query) 和两个候选项 ,目标是使 的相似度大于 的相似度:

其中 是相似度函数(点积、余弦等), 是 margin。

与 Triplet Loss 的对比

Triplet Loss 是 Margin Ranking Loss 的特例,其中 ,代入上式可得

即 Triplet Loss 的形式。

6.2 在排序 / 推荐系统中的应用

在信息检索(IR)和推荐系统中,Margin Ranking Loss 是 learning-to-rank 的核心工具:

  • 搜索排序:给定查询 ,学习文档 的相关度 ,使相关文档排在不相关文档之前。
  • 推荐系统:给定用户 和物品 ,学习评分函数 ,优化正样本(用户交互过的物品)在排序中高于负样本(用户未交互的物品)。
  • 双塔模型(Two-tower model):用户塔和物品塔分别编码,,用 Margin Ranking Loss 训练使正样本对的相似度高于负样本对至少

6.3 BPR(Bayesian Personalized Ranking)

BPR 是推荐系统中另一经典排序损失,定义为

其中 是用户 的正样本(交互过), 是负样本(未交互), 是 Sigmoid 函数。 作为概率项,优化正样本相似度高于负样本的概率。BPR 与 Margin Ranking Loss 的关系:BPR 是 Margin Ranking Loss 的概率化软版本(使用 Sigmoid 而非 0-1 间隔)。


7. 对比学习与自监督预训练、表征学习的关系

7.1 自监督预训练的范式

传统监督预训练:用标注数据预训练 backbone,在下游任务上 fine-tune。标注数据的规模限制了模型的泛化能力。

自监督预训练(Self-supervised Pre-training):在无标注的大规模数据上,用对比损失预训练表征,然后在下游任务上用少量标注数据进行有监督微调。对比学习是自监督预训练的主流方法之一(另一主流是重建类方法,如 MAE、Autoencoder)。

7.2 对比学习作为表示学习目标的优点

  1. 不需要标签:利用数据自身的增强结构作为监督信号,可以在互联网规模的未标注数据上训练。
  2. 学到通用特征:正样本对强调语义不变性,负样本对强调区分能力,这些能力直接迁移到下游视觉/NLP 任务。
  3. 下游任务适配灵活:学习到的表示可以用于分类、检索、分割等多种下游任务,而非仅限于预定义类别。

7.3 典型流程

  1. 预训练阶段:在大规模无标注数据上,用对比损失训练编码器 ,学习通用表示
  2. 下游微调阶段:将预训练编码器作为 backbone,附加任务相关的分类头或检测头,用少量标注数据 fine-tune。Fine-tune 阶段通常切换为标准的分类/检测损失。
  3. 为什么 fine-tune 时切换损失:预训练的对比损失优化的是”全局相对比较”(正样本比负样本近),而非”绝对类别归属”。下游任务的分类是绝对任务,需要模型输出每个类的置信度,而非相对距离。因此分类头 + Cross-Entropy 是下游任务的自然选择。

8. 工程实践

8.1 正负样本构造方法

图像场景

# SimCLR 风格:两个随机增强视图
view1 = augment(image)
view2 = augment(image)
z1 = encoder(view1); z2 = encoder(view2)
# 正样本对:(z1, z2);负样本:batch 内所有其他 z

文本场景

文本增强比图像弱,常用策略:

  • Dropout noise:同一文本通过编码器两次(dropout 不同),得到两个不同 dropout 下的表示作为正样本
  • 回译(Back-translation):翻译成另一语言再翻译回来
  • Span masking:遮蔽部分 token,让模型编码未遮蔽部分

多模态场景(CLIP)

  • 正样本对:图像 和对应文本描述
  • 负样本对:batch 内不匹配的图像-文本对
  • 损失:双路(image text 和 text image)的 InfoNCE 损失之和

8.2 Batch Size、温度、Embedding 维度的影响

超参数影响规律典型取值
Batch size越大 → 负样本越多 → 表示质量提升(in-batch negative 场景)SimCLR: 256~4096;MoCo: 256(配合 memory bank)
温度 越低 → 分布越尖锐 → 梯度越强 → 训练越快但易塌陷;越高 → 分布平滑 → 训练稳定但收敛慢(图像),(文本)
Embedding 维度 越高 → 表示能力越强 → 但负样本数量需同步增加以维持对比信号的区分度(CLIP: 512;SimCLR: 2048)
归一化(l2)若不归一化,embedding 范数会膨胀,导致相似度度量不稳定;归一化后 ,余弦相似度 = 点积几乎所有对比方法都使用 l2 归一化

经验规律:若 batch size 受限(如 GPU 显存不足),优先使用 MoCo 类的 memory bank 方案,而不是降低 batch size;若 embedding 维度从 512 降到 128,需同步调低温度以维持对比信号的区分效率。

8.3 训练监控指标

表示坍塌检测

监控 **IPC(Instance-wise Proportion of Correct Predictions)**或 Mean Cosine Similarity

(对 InfoNCE)或 ,说明所有表示趋同,存在坍塌。若 (对 l2 归一化的表示),说明对比信号正常。

Top-k 检索质量

在验证集上做 的 top-k 检索(即用表示检索与自己最接近的表示),检验正样本的 top-1 准确率:

其中 是与 对应的正样本(同一原始样本的不同视图)。Top-1 Acc 越高,说明表示空间的质量越好。经验上,SimCLR 在 ImageNet 上 top-1 检索准确率可达 80%+,表示质量接近监督学习。

相似度分布监控

每 1000 步采样一批表示,记录 batch 内所有配对的余弦相似度直方图。若正样本相似度分布和负样本相似度分布重叠严重(区分度低),说明模型学到的对比信号弱,需调整温度或负样本策略。


9. 图像、文本、多模态典型使用方式

9.1 图像

SimCLR:in-batch negative,batch size 2564096,两个随机增强视图,,embedding 2048-d(投影头)。消融实验表明:更强的数据增强使性能提升 23 倍,batch size 翻倍带来 ~1% 的 top-1 提升。

MoCo / MoCo v2:memory bank(queue size 65536),动量编码器,in-batch negative 仅 256,。MoCo v2 结合了 MLP 投影头(取代线性层)进一步提升性能。

BYOL / SimSiam:不用负样本,动量编码器 + 预测头。BYOL 有 online 预测头 + target 目标网络;SimSiam 去掉了动量更新,用 constant momentum + stop gradient 模拟。两者均可避免显式负样本,但架构不对称是关键。

9.2 文本

  • ContraCLM / SimCSE:在 BERT 等预训练模型基础上,用 dropout 生成两个正样本(同一文本通过 encoder 两次),负样本来自 batch 内其他文本。,对比损失加在 token 的表示上。
  • ColBERT:晚交互(late interaction)双塔模型,query 和 document 分别编码,但在 token 级别计算交互相似度(MaxSim),用 Margin Ranking Loss 训练。
  • 无监督负样本:用对比损失对同一文本的不同 mask 样本作为正样本,从其他文档采样作为负样本(类似跨文档负采样)。

9.3 多模态

CLIP:图像编码器 + 文本编码器双塔,InfoNCE 损失(双路:image text 和 text image),batch size 32768(巨量),(温度极低以维持大 batch 下的区分度)。训练数据:WebImageText(4 亿对),zero-shot 分类性能接近监督 ResNet。

ALIGN:与 CLIP 类似,但使用更大规模的多模态数据和 JFT 图像编码器,batch size 4096,


10. 什么时候用对比损失,什么时候用分类损失

10.1 决策树

任务类型
├── 有明确类别标签,类别数固定
│   ├── 类别互斥,单标签 → 分类损失(Softmax + CE)
│   └── 类别不互斥,多标签 → Multi-label BCE
├── 无明确标签,但有相似度结构
│   ├── 检索/排序/度量学习 → 对比损失 / Triplet Loss / Margin Ranking
│   └── 自监督预训练(无标注) → 对比损失(InfoNCE 等)
└── 有标签但类别极多(如亿级词表)→ 结合 Cross-Entropy + 对比损失(可选)

10.2 经验判断标准

维度分类损失更合适对比损失更合适
标签来源类别标签明确、可靠标签稀缺或不存在,只有相似性结构
类别数类别数适中(< 10K)类别数极大或开放词汇
任务目标预测输入属于哪个类测量输入之间的相似度
下游任务分类、检测(固定类别)检索、聚类、零样本分类、重识别
表示用途直接用于预测作为特征用于多种下游任务
数据增强可用性有限数据增强多样,可构造正样本对
训练资源资源有限时资源充足(大批量或 memory bank)

10.3 常见组合策略

组合 1(CLIP 风格):对比预训练 → 分类微调。在无标注数据上用对比损失预训练学通用表示,在下游任务上用分类损失微调。

组合 2(检索增强分类):检索场景中用对比损失优化度量空间,分类头也加载同一表示空间,用标准的分类损失微调。表示质量提升直接带来检索和分类的双重收益。

组合 3(度量学习和分类联合),用对比损失学度量结构,用分类损失学判别边界。 权重在 之间调超参数。