目录
[1. 基于距离的对比损失](#1. 基于距离的对比损失)
[1.1 对比损失(Contrastive Loss)](#1.1 对比损失(Contrastive Loss))
[1.2 三元组损失(Triplet Loss)](#1.2 三元组损失(Triplet Loss))
[1.3 N-pair 损失(N-pair Loss)](#1.3 N-pair 损失(N-pair Loss))
[1.4 小结](#1.4 小结)
[2. 基于噪声对比估计(NCE)的损失](#2. 基于噪声对比估计(NCE)的损失)
[2.1 NCE 损失(Noise Contrastive Estimation)](#2.1 NCE 损失(Noise Contrastive Estimation))
[2.2 InfoNCE 损失](#2.2 InfoNCE 损失)
[2.3 小结](#2.3 小结)
[3. 基于聚类的一致性损失](#3. 基于聚类的一致性损失)
[3.1 SwAV 交换预测损失(Swapping Assignments between Views)](#3.1 SwAV 交换预测损失(Swapping Assignments between Views))
[3.2 DeepCluster 损失](#3.2 DeepCluster 损失)
[3.3 小结](#3.3 小结)
[4. 基于特征预测的损失(无负样本)](#4. 基于特征预测的损失(无负样本))
[4.1 BYOL 损失(Bootstrap Your Own Latent)](#4.1 BYOL 损失(Bootstrap Your Own Latent))
[4.2 SimSiam 损失(Simple Siamese)](#4.2 SimSiam 损失(Simple Siamese))
[4.3 小结](#4.3 小结)
[5. 其他损失函数](#5. 其他损失函数)
[5.1 边际排序损失(Margin Ranking Loss)](#5.1 边际排序损失(Margin Ranking Loss))
[5.2 多类排序损失(Multi-class Ranking Loss)](#5.2 多类排序损失(Multi-class Ranking Loss))
[5.3 球形对比损失(Spherical Contrastive Loss)](#5.3 球形对比损失(Spherical Contrastive Loss))
题目
(快手)对比学习的损失函数有哪些?请分门别类的介绍。
解答
对比学习旨在通过构造正负样本对,学习一个特征空间,使得相似样本(正对)距离近,不相似样本(负对)距离远。其损失函数的设计经历了从度量学习到自监督学习的演变,主要可分为以下几类:
1. 基于距离的对比损失
这类损失直接度量样本对在特征空间的距离,常用于孪生网络或三元组网络。
1.1 对比损失(Contrastive Loss)
公式:
变量含义:
-
:样本对的标签。y=1 表示正对(两个样本相似/属于同一类),y=0 表示负对(两个样本不相似/不同类)。
-
:两个样本在特征空间中的距离,通常使用欧氏距离
。
-
margin:人为设定的超参数,表示负对之间需要保持的最小距离。
设计思想 :
该损失函数由 Yann LeCun 等人提出,用于训练孪生网络(Siamese Network)。其核心是让正对的距离尽可能小,负对的距离尽可能大,且负对距离超过 marginmargin 后不再产生惩罚。
分情况解释:
-
当 y=1(正对) :损失为
。优化器会最小化
,迫使两个样本的特征靠近。
-
当 y=0(负对) :损失为
。
-
若 D≥margin,即负对距离已经超过边际,则损失为 0,不再优化。
-
若 D<margin,则损失为
,优化器会增大
,使负对相互远离,直到达到边际。
-
特点:
-
对称性:损失仅依赖于两个样本的成对关系。
-
边际机制:只惩罚距离小于边际的负对,避免过度拉开所有负对,使训练更稳定。
-
平方项:使梯度在距离较大时也较大,有助于快速收敛。
应用场景:早期的人脸验证、签名验证等任务。
1.2 三元组损失(Triplet Loss)
公式:
变量含义:
-
a:锚点样本(anchor)。
-
p:正样本(positive),与锚点同类。
-
n:负样本(negative),与锚点不同类。
-
d(⋅,⋅):特征距离,通常为欧氏距离的平方或余弦距离。
-
margin:超参数,控制正负对之间的期望间隔。
设计思想 :
由 Google 的 FaceNet 提出,旨在使锚点与正样本的距离比与负样本的距离至少小一个边际。它不直接优化绝对距离,而是优化相对距离,从而更关注样本间的排序关系。
分情况解释:
-
我们希望
,即正对距离加上边际小于负对距离。
-
当
时,条件已满足,损失为 0。
-
否则,损失为
,优化器会缩小正对距离
和/或扩大负对距离
。
直观理解 :
三元组损失相当于在特征空间中构建一个"相对距离"约束:锚点与正样本的距离应该比与负样本的距离近一个边际。这有助于形成类内紧凑、类间分离的特征分布。
特点:
-
需要构造三元组 (a,p,n),采样策略对训练效果至关重要(如难例挖掘)。
-
比成对对比损失更高效,因为一次比较了两个距离关系。
-
边际 margin 的选择影响类间间隔的大小。
应用场景:人脸识别(FaceNet)、行人重识别、图像检索等。
1.3 N-pair 损失(N-pair Loss)
公式:
变量含义:
-
:锚点样本的特征向量(通常归一化)。
-
:正样本的特征向量。
-
:第 i 个负样本的特征向量,共 N−1 个。
-
公式中的乘积
表示内积(余弦相似度,因为特征已归一化)。
设计思想 :
由 Sohn 在 2016 年提出,是三元组损失的推广,旨在一次比较一个正样本与多个负样本。它将对比问题转化为多分类问题:给定锚点,希望正样本的相似度远高于所有负样本。
公式推导与解释 :
该损失源于多类逻辑回归的 softmax 交叉熵形式。标准的 N-pair 损失通常写作:
等价于:
其中, 是锚点与正样本的相似度(越大越好),
是锚点与第 i 个负样本的相似度(越小越好)。损失函数希望正样本的相似度远大于所有负样本的相似度。
分情况解释:
-
若所有负样本的相似度都远小于正样本的相似度,即
,则每个指数项 exp(差值) 接近 0,损失接近 log(1+0)=0。
-
若某个负样本与锚点相似度接近或超过正样本,则对应的指数项较大,损失增大,优化器会降低该负样本的相似度或提高正样本的相似度。
特点:
-
一次利用多个负样本,比三元组损失更高效,收敛更快。
-
避免了传统 softmax 中需要显式计算所有类别的权重,而是直接使用样本特征。
-
通常要求特征归一化,以便内积表示余弦相似度。
-
负样本数量 N−1 可以根据 batch 大小调整,常见做法是使用 batch 内其他样本作为负样本。
应用场景:度量学习、图像检索、人脸识别等。
1.4 小结
| 损失函数 | 输入形式 | 优化目标 | 优点 | 缺点 |
|---|---|---|---|---|
| 对比损失 | 样本对 | 正对距离小,负对距离大于边际 | 简单,易于实现 | 只考虑一对样本,效率较低 |
| 三元组损失 | 三元组 (a,p,n) | 正对距离 + margin < 负对距离 | 引入相对排序,效果更好 | 需要难例挖掘,采样复杂 |
| N-pair 损失 | 锚点 + 正样本 + 多个负样本 | 正样本相似度 > 所有负样本相似度 | 一次比较多个负样本,效率高 | 需要大 batch 或 memory bank 支持多负样本 |
这三种损失函数都致力于学习具有判别性的特征表示,其核心思想均是通过拉近正样本对、推开负样本对来构造良好的度量空间。
2. 基于噪声对比估计(NCE)的损失
将对比学习视为区分正样本与噪声的二分类问题,是现代自监督对比学习的核心。
2.1 NCE 损失(Noise Contrastive Estimation)
NCE 的核心思想是将概率密度估计问题转化为一个二分类问题:区分真实数据 与噪声。它通过对比真实样本和噪声样本来学习数据分布。
公式(简化版):
变量含义:
-
x:样本。
-
:真实数据分布(我们无法直接建模,但可以通过采样得到)。
-
q(x):噪声分布(人为选择,如均匀分布、高斯分布等)。
-
k:负样本数量(每个真实样本对应 k 个噪声样本)。
-
h(x):模型输出的未归一化概率 (或称为"得分"),通常表示为
,其中 G(x) 是神经网络输出的 logit。在 NCE 中,我们假设数据分布可以写成
,其中 Z 是归一化常数。但 NCE 巧妙之处在于避免了直接计算 Z。
设计思想:
我们希望训练一个模型 h(x),使得它能区分一个样本是来自真实分布还是噪声分布。具体做法是:
-
从真实分布中采样一个正样本
,并从噪声分布中采样 k 个负样本
,将它们混合在一起。
-
构造一个二分类数据集:对于每个样本,我们计算它来自真实分布的后验概率:
这里用模型 h(x) 近似
(假设归一化常数为1或包含在 h 中,但 NCE 证明即使不归一化也能学习到正确的密度方向)。
-
损失函数是标准的二分类交叉熵:
-
对于真实样本(标签 y=1),损失为
。
-
对于噪声样本(标签 y=0),损失为
。
-
-
由于噪声样本有 k 个,期望项需要乘以 k 以平衡两类样本的数量(真实样本权重为1,噪声样本总权重为 k)。
公式解释:
-
第一项 :
这是对真实样本的交叉熵项。它鼓励模型增大真实样本的 h(x),使得 h(x) 相对于 kq(x) 更大,从而提高后验概率。
-
第二项 :
这是对噪声样本的交叉熵项。它鼓励模型减小噪声样本的 h(x),使得后验概率
接近1(即正确分类为噪声)。注意这里用 kq(x) 是因为噪声样本的总密度需要乘以 k 来匹配真实样本的权重。
关键点:
-
NCE 不需要显式计算归一化常数 Z,因为通过二分类可以同时学习 h(x) 的尺度。
-
当 k 足够大时,NCE 估计量趋于一致(即能准确恢复数据分布)。
-
在自监督学习中,通常将 q(x) 选为数据分布本身(如从 batch 中随机抽取其他样本),此时 NCE 过渡到 InfoNCE。
2.2 InfoNCE 损失
InfoNCE 是 NCE 在表示学习中的一种变体,广泛应用于 CPC、MoCo、SimCLR 等自监督对比学习方法。它将对比任务建模为一个 (K+1)-类的分类问题:给定一个查询(锚点),从包含一个正样本和 K 个负样本的集合中识别出正样本。
公式:
变量含义:
-
q:查询样本的特征向量(通常经过归一化)。
-
:正样本的特征向量(与 q 来自同一图像的不同视图或同一序列的上下文)。
-
:负样本的特征向量(通常来自其他样本或同一 batch 的其他样本),其中 i=0 对应正样本,i=1,...,K 对应 K 个负样本。
-
sim(u,v):相似度函数,通常取点积(假设特征已归一化,则点积等价于余弦相似度)。
-
:温度参数,控制相似度的缩放程度。较小的
使 softmax 分布更尖锐,更关注难例。
设计思想:
InfoNCE 可以看作是在一个 (K+1) 类分类问题 中,最大化正样本被选中的概率。它将对比学习视为一个判别任务:模型需要学会在众多候选者中挑出那个"正确"的样本。
具体地,对于每个查询 q,我们有一个正样本 和 K 个负样本
。我们希望 q 与
的相似度远高于与所有负样本的相似度。因此,我们计算正样本的 softmax 概率,并最大化该概率(即最小化其负对数)。
公式解释:
-
分子:
是正样本的未归一化得分。
-
分母:
是所有样本(包括正样本)的得分之和。
-
整个分式是正样本被选中的 softmax 概率。损失函数取负对数,因此最小化损失等价于最大化这个概率。
直观理解:
-
当正样本相似度远大于所有负样本相似度时,分母近似等于分子,概率接近1,损失接近0。
-
如果某个负样本与查询的相似度接近或超过正样本,分母会增大,概率变小,损失增大,模型将受到惩罚。
-
温度
控制了对负样本的惩罚强度:
越小,模型越关注那些与查询相似度高的负样本(难例);
越大,则对所有负样本的惩罚相对均匀。
与 NCE 的关系:
-
InfoNCE 可以看作 NCE 的一种特例,其中噪声分布 q 被选为数据分布本身(即从 batch 中随机抽取其他样本作为负样本),并且 k 等于负样本数量。
-
NCE 的原始形式需要显式指定噪声分布 q,而 InfoNCE 隐式地将其他样本视为噪声,且不需要计算 q(x) 的密度,因为所有样本在 softmax 中是同等权重的。
-
从信息论角度看,InfoNCE 损失是互信息的下界估计,最大化该损失等价于最大化查询与正样本之间的互信息。
应用细节:
-
在 SimCLR 中,对于每个样本,通过数据增强生成两个视图,互为正样本,其余 batch 内的样本作为负样本。相似度使用余弦相似度,温度
常设为 0.1 或 0.5。
-
在 MoCo 中,使用动量编码器和队列来存储大量负样本,从而支持更大的 KK。
2.3 小结
| 特性 | NCE 损失 | InfoNCE 损失 |
|---|---|---|
| 核心任务 | 二分类:真实 vs 噪声 | (K+1)-类分类:识别正样本 |
| 输入形式 | 样本 + 噪声分布 | 查询 + 正样本 + 负样本集合 |
| 噪声分布 | 显式指定 q(x)q(x) | 隐式由其他样本构成 |
| 归一化 | 无需显式归一化常数 | 隐含 softmax 归一化 |
| 应用 | 语言模型、密度估计 | 自监督对比学习(SimCLR、MoCo) |
| 公式复杂度 | 需要处理噪声密度 | 仅需相似度计算,简洁 |
两者都源于"对比"思想,InfoNCE 是 NCE 在表示学习中的成功简化,推动了自监督学习的快速发展。
3. 基于聚类的一致性损失
这类方法通过将样本分配至原型(prototype)或聚类中心,要求不同视图的分配结果一致。
3.1 SwAV 交换预测损失(Swapping Assignments between Views)
SwAV(Swapping Assignments between Views)是一种结合聚类与对比学习的自监督方法。它不直接比较两个视图的特征,而是比较它们到一组可学习"原型"(prototypes)的分配,并通过交换预测机制迫使两个视图的分配一致。
公式:
变量含义:
-
:同一张图像经过不同数据增强得到的两个视图的特征向量。通常经过 L2 归一化,使得
,形状为 d 维。
-
C :原型矩阵(prototypes),大小为 d×K,其中 K 是原型数量(即聚类中心数)。每一列
代表一个可学习的原型向量,也经过归一化(通常
)。原型可以视为一组"聚类中心"。
-
z⋅C:特征 z 与所有原型的点积,得到长度为 K 的相似度向量(因为特征和原型都归一化,点积即余弦相似度)。
-
softmax(z⋅C):对相似度向量应用 softmax,得到特征 z 分配到每个原型的概率分布。这是一个预测分布,表示模型认为 z 属于各个原型的概率。
-
:通过 Sinkhorn 算法计算得到的"目标分配"码(codes),也是长度为 K 的概率分布。它们是根据特征
计算出的软分配,但带有额外的约束(如每个原型被分配的总概率大致相等,避免所有样本坍缩到同一个原型)。
-
ℓ(⋅,⋅) :交叉熵损失函数,衡量两个分布的差异。例如
。
设计思想:
SwAV 的核心思想是:两个视图应该产生一致的聚类分配 。但直接让 的分配相同可能导致平凡解(例如所有样本分配相同)。因此,它引入了两个关键机制:
-
可学习的原型:通过点积将特征映射到原型空间,形成软分配。
-
交换预测:用视图 s 的特征预测视图 t 的分配,反之亦然。这迫使两个视图在分配层面达成一致,而不是在特征层面。
具体地,对于一对视图 :
-
首先,通过 Sinkhorn 算法从
分别计算出目标分配
。这些分配是"理想"的软标签,它们具有均匀边缘约束(即每个原型在整个批次中被选中的概率大致相等),以防止所有样本聚集到同一个原型。
-
然后,计算基于原型的预测分布:
是视图 t 的预测,
是视图 s 的预测。
-
损失函数要求:视图 t 的预测应该匹配视图 s 的目标分配(即
),视图 s 的预测应该匹配视图 t 的目标分配(即
)。这就是"交换"的含义。
通过优化这个损失,模型学会将不同视图映射到一致的聚类分配,同时原型也随着特征的学习而不断调整。
Sinkhorn 算法的作用:
Sinkhorn 算法用于从特征与原型相似度中计算软分配 q。它解决一个最优传输问题:给定一个相似度矩阵(批次中每个样本与每个原型的点积),我们希望为每个样本分配一个概率向量 q,使得:
-
每个样本的分配概率之和为 1。
-
所有样本对每个原型的平均分配概率大致为 1/K(均匀分布),避免某些原型被过度使用或无人使用。
算法通过迭代行归一化和列归一化快速得到满足上述约束的软分配。q 可以看作是一种"均衡"的软标签,既反映了特征与原型的相似度,又保持了原型的均匀使用。
特点:
-
不需要显式的负样本对,而是通过原型和聚类隐式地对比。
-
交换预测机制避免了模型坍缩,因为两个视图的分配需要相互预测,而不是简单拉近。
-
结合了聚类和对比学习的优势,在 ImageNet 上取得了优秀的结果。
3.2 DeepCluster 损失
DeepCluster 是一种将传统聚类算法(如 k-means)与深度神经网络结合的自监督方法。它交替进行聚类和特征学习,通过预测聚类伪标签来训练网络。
公式:
变量含义:
-
x:输入图像(或其他数据)。
-
cluster(x):对图像 x 的特征进行聚类后得到的伪标签(即该样本所属的聚类索引)。这个伪标签是通过对全部(或一个批次)样本的特征运行 k-means 聚类得到的。
-
p(y=cluster(x)∣x):神经网络对输入 x 预测为伪标签类别的概率。通常网络最后接一个全连接分类层,输出维度等于聚类数 K,然后经过 softmax 得到概率分布。
-
损失函数是标准的交叉熵分类损失,对所有样本求和(或平均)。
设计思想:
DeepCluster 的核心是迭代式学习:用聚类产生伪标签,再用伪标签训练特征提取器,如此反复。具体流程如下:
-
特征提取:用当前网络(如卷积神经网络)对全部训练图像提取特征。
-
聚类 :对所有特征运行 k-means 聚类,将每个样本分配到 K 个聚类中心之一,得到伪标签
。
-
训练:固定这些伪标签,训练网络预测该标签,即最小化交叉熵损失。这相当于让网络学习将图像映射到由聚类定义的类别。
-
重复:训练若干 epoch 后,重新提取特征,再次聚类(可能使用新的聚类中心),得到新的伪标签,继续训练。
公式解释:
-
损失函数
鼓励网络增大对正确伪标签的预测概率。
-
由于伪标签来自特征聚类,网络在学习预测这些标签的同时,也会调整特征表示,使得同一聚类的样本在特征空间更加接近,不同聚类的样本更加分离。
-
随着网络改进,特征变得更优,聚类结果也随之改善,从而形成正向循环。
挑战与解决方案:
-
空聚类问题:k-means 可能产生空聚类(没有样本被分配),导致某些伪标签无样本可用。DeepCluster 通过将空聚类中心重新分配给距离最远的样本解决。
-
特征坍缩:如果网络将所有图像映射到同一个特征点,聚类会得到单聚类,损失无法学习。DeepCluster 采用了一些技巧防止坍缩,例如使用固定归一化、在聚类前对特征进行白化等。
-
计算开销:对所有特征进行聚类需要大量内存和计算。实践中常对子集聚类或使用在线聚类方法。
特点:
-
简单直观,直接复用监督学习中的分类损失。
-
无需特殊的数据增强或对比结构,但聚类步骤增加了训练复杂度。
-
性能受聚类质量影响,且需要小心处理特征坍缩。
3.3 小结
| 方法 | 核心思想 | 损失形式 | 聚类方式 | 关键技巧 |
|---|---|---|---|---|
| SwAV | 交换预测两个视图的聚类分配 | 交叉熵(预测 vs 软分配) | 可学习原型 + Sinkhorn | 交换预测、均匀边缘约束 |
| DeepCluster | 迭代聚类生成伪标签,用分类损失训练 | 标准交叉熵分类损失 | k-means(离线) | 重分配空聚类、防坍缩措施 |
两者都通过聚类引入一致性约束,但 SwAV 通过可学习原型和在线软分配实现了端到端训练,而 DeepCluster 则采用离线聚类与分类交替的框架。它们共同推动了自监督学习中"基于聚类"范式的发展。
4. 基于特征预测的损失(无负样本)
这类方法通过不对称结构(如预测头、动量编码器)避免坍塌,无需显式负样本。
4.1 BYOL 损失(Bootstrap Your Own Latent)
BYOL 是一种无需负样本的自监督学习方法,它通过两个不对称的网络(在线网络和目标网络)进行互预测,并使用均方误差作为损失函数。
公式:
变量含义:
-
在线网络(online network) :由编码器
、投影头
和预测头
组成。输入图像的一个视图 v,经过编码器和投影头得到表示
,然后通过预测头得到预测
。这里
表示对
进行预测后的输出,通常再经过一次 L2 归一化(BYOL 中对预测和目标都进行了归一化)。
-
目标网络(target network) :结构与在线网络相同(编码器
和投影头
),但参数 ξ 是在线网络参数 θ 的指数移动平均(EMA),即
。目标网络接收图像的另一个视图 v′,生成表示
,通常也进行 L2 归一化,得到
(公式中即为归一化后的目标特征)。
-
:均方误差(MSE),即两个向量对应元素差的平方和。BYOL 使用 MSE 来衡量预测与目标之间的差异。
-
公式中的符号细节 :原论文中,损失写作
,其中 sg 表示停止梯度(stop-gradient),即目标网络不参与梯度更新。但在标准 BYOL 中,由于目标网络通过 EMA 更新,其本身就不接收梯度,因此停止梯度是隐含的。公式中
是目标网络输出的归一化特征,
是在线网络预测头输出的归一化预测(BYOL 通常对预测和目标都做 L2 归一化后再计算 MSE,因此公式中的向量都是单位向量)。
设计思想:
BYOL 的核心思想是让在线网络去预测目标网络对另一个视图的输出。由于目标网络参数是缓慢更新的(EMA),它提供了一个相对稳定的目标,迫使在线网络学习到能泛化到不同视图的表示。通过不断"自举"(bootstrap),在线网络逐渐提升表示质量。
为什么不需要负样本?
传统对比学习需要负样本防止所有特征坍缩到同一个点。BYOL 通过不对称的网络结构(在线网络有预测头,目标网络没有)和 EMA 更新,隐式地避免了坍塌。直观解释:如果所有表示都坍缩为常数,那么预测头可以轻易地输出常数来匹配常数目标,但预测头是随机初始化的,在训练初期它无法完美预测常数,梯度会迫使编码器产生变化,从而打破对称性。更严谨的分析表明,这种不对称结构加上 EMA 更新,使得系统存在一个隐式的正则化,阻止了平凡解。
损失函数解释:
-
对于一对视图 v 和 v′,在线网络处理 v 得到预测
,目标网络处理 v′ 得到目标
。
-
损失计算这两个向量之间的 MSE。优化器更新在线网络参数 θ 以最小化这个距离,使得在线网络的预测接近目标网络的输出。
-
目标网络参数 ξ 不直接从损失中更新,而是作为 θ 的 EMA,因此目标网络缓慢地跟踪在线网络的平均表现。
通过最小化预测与目标的距离,在线网络被迫学习到视图不变的特征,同时由于目标网络提供了稳定的"目标",避免了表示坍塌。
4.2 SimSiam 损失(Simple Siamese)
SimSiam 进一步简化了 BYOL,去除了动量编码器,仅通过"停止梯度"操作来避免坍塌,损失函数直接最大化两个视图特征的余弦相似度。
公式:
变量含义:
-
:来自第一个视图的预测向量。SimSiam 的网络结构类似于 BYOL 的在线网络:每个视图经过编码器 f 和投影头 g 得到表示 z,然后其中一个视图的表示经过预测头 h 得到预测 p=h(z)。这里
是第一个视图的预测,通常已经过 L2 归一化(公式中
显式写了归一化)。
-
:来自第二个视图的表示(经过编码器和投影头,但未经过预测头)。
是其 L2 归一化后的向量。
-
sg :停止梯度(stop-gradient)操作符。表示在反向传播时,不计算该项的梯度。即 **
** 被视为常数,其梯度不会传播回编码器。
-
⋅:向量点积,这里计算的是两个归一化向量的余弦相似度(因为都是单位向量)。负号使得最小化损失等价于最大化余弦相似度。
设计思想:
SimSiam 的核心是"简单孪生网络"加上停止梯度。两个分支共享相同的编码器和投影头(参数相同),但其中一个分支多了预测头,并且对另一个分支的输出应用停止梯度。损失鼓励 与
相似,但由于
的梯度被停止,编码器只能通过 **
** 这条路径更新,从而迫使编码器学习有意义的表示。
为什么不需要动量编码器?
SimSiam 的实验表明,停止梯度本身就足以防止坍塌。其工作原理可以理解为一种类似于 EM 算法的过程:当优化 去匹配
时,
被视为固定的目标,这迫使编码器产生的表示具有一定的预测性;然后在下一次迭代中,由于编码器已更新,新的 **
** 也会变化,但停止梯度确保了当前步骤的目标是固定的,从而避免两个分支同时追逐对方导致的坍塌。
损失函数解释:
-
输入图像的两个增强视图,分别通过共享的编码器得到表示
和
。其中一个视图(例如视图1)的
再经过预测头得到 **
**。
-
计算
与
的余弦相似度,取负号作为损失(即最大化相似度)。
-
关键点:在反向传播时,
的梯度被停止,即
被视为固定值。因此,梯度只通过
更新编码器和预测头,而不会直接更新
对应的那部分编码器(但由于编码器共享,间接地也会影响,但停止梯度阻止了直接的梯度流,起到了稳定作用)。
-
损失函数不对称:只有预测头所在的支路会接收梯度,另一支路不接收梯度,因此两支路不会同时坍缩到同一常数。
SimSiam 的损失也可以等价地写为均方误差形式(因为余弦相似度最大等价于欧氏距离最小),但原始论文使用余弦相似度并配合停止梯度。
4.3 小结
| 方法 | 网络结构 | 损失形式 | 防坍塌机制 | 梯度更新 |
|---|---|---|---|---|
| BYOL | 在线网络(含预测头)+ 目标网络(EMA更新) | 预测与目标的 MSE | 动量编码器 + 预测头不对称 | 在线网络接收梯度,目标网络通过 EMA 更新 |
| SimSiam | 共享编码器 + 共享投影头 + 单侧预测头 | 负余弦相似度(带停止梯度) | 停止梯度 + 预测头不对称 | 仅预测路径接收梯度,另一侧梯度停止 |
两者都摒弃了显式负样本,通过不对称的网络结构和梯度停止(或 EMA)来避免表示坍塌。BYOL 依赖动量编码器提供稳定的目标,而 SimSiam 证明停止梯度本身已足够。这些方法展示了自监督学习可以在没有大量负样本的情况下学习高质量表示,启发了后续更多简洁高效的自监督算法。
5. 其他损失函数
5.1 边际排序损失(Margin Ranking Loss)
边际排序损失是一种经典的排序损失函数,广泛用于学习样本之间的相对顺序。在对比学习中,它可以用来强制正样本对的相似度高于负样本对的相似度。
公式:
变量含义:
-
:正样本对的相似度得分。得分越高表示两个样本越相似(例如余弦相似度、负欧氏距离等)。
-
:负样本对的相似度得分。
-
margin:正样本对与负样本对之间期望的差距(超参数),通常取正值(如 0.5、1.0)。
公式解释:
损失函数要求正样本对的得分至少比负样本对的得分大 margin。等价地,我们期望 。
-
当
时,条件已满足,损失为 0。
-
否则,即
,损失为
,此时损失为正,梯度会推动增加
或减小
(或两者同时),直到差距达到边际。
直观理解:
将 和
视为两个标量值,损失函数对两者的差值施加一个下界约束。这种形式的损失函数与支持向量机(SVM)中的合页损失(hinge loss)非常相似,只是应用于得分差值而非分类边界。
在对比学习中的应用:
在对比学习中,我们可以为每个锚点构造一个正样本和一个负样本,计算它们的相似度 和
,然后应用该损失。它鼓励正样本的相似度显著高于负样本。与三元组损失不同,三元组损失通常使用距离(越小越好),而这里使用相似度(越大越好),因此符号上会有差异(三元组损失是
,要求正距离小于负距离)。如果我们将相似度定义为负距离(即 s=−d),则边际排序损失就等价于三元组损失。
5.2 多类排序损失(Multi-class Ranking Loss)
多类排序损失是边际排序损失在多负样本情况下的直接扩展,常用于多分类或度量学习中,要求正确类别(正样本)的得分高于所有错误类别(负样本)的得分,且每个差距都至少为边际。
公式:
变量含义:
-
:锚点与正样本(或正确类别)的相似度得分。在多分类设置中,**
** 通常是模型对正确类别的输出 logit。
-
:锚点与第 j 个负样本(或错误类别)的相似度得分。
-
margin:正样本得分与每个负样本得分之间期望的最小差距。
-
求和:对所有负样本(即 j≠y)进行求和。
公式解释:
对于每一个负样本 j,我们要求 ,即
。如果这个条件满足,该项损失为 0;否则,损失为
,表示违反边际的程度。将所有负样本的违反程度求和,即为总损失。
直观理解:
该损失函数强制正样本的得分比每一个负样本的得分都要高出一个边际。它是一种"一对多"的排序损失,类似于多类 SVM 的损失。如果某个负样本的得分接近或超过正样本,就会受到惩罚。惩罚的大小取决于超出边际的程度。
与 InfoNCE 的关系:
多类排序损失与 InfoNCE 损失有相似之处,都是希望正样本得分高于所有负样本。但 InfoNCE 使用 softmax 交叉熵,是一种概率形式的损失,而多类排序损失是合页损失形式,对每个负样本独立施加边际约束。两者的优化目标和梯度特性有所不同。
在对比学习中的应用:
在度量学习中,对于每个锚点,可以有一个正样本和多个负样本(例如 batch 内的其他样本),直接使用该损失来训练嵌入网络。它也是 N-pair 损失的一种替代形式。
5.3 球形对比损失(Spherical Contrastive Loss)
球形对比损失并非指某一个具体公式,而是一类在单位超球面上进行对比学习的损失函数,其核心思想是将特征约束在球面上,并利用球面分布(如 von Mises-Fisher 分布)进行概率建模。
基本思想:
在对比学习中,通常会对特征进行 L2 归一化,使得特征落在单位超球面上。这样做的好处是:
-
内积直接表示余弦相似度,范围在 [-1, 1],便于计算。
-
球面上的几何性质(如测地距离)有助于稳定训练。
球形对比损失进一步引入 von Mises-Fisher(vMF)分布来描述球面上的特征分布。vMF 分布是球面上的正态分布类比,其概率密度函数为:
其中 x 是单位向量,μ 是均值方向(也是单位向量),κ≥0 是浓度参数(κ 越大,分布越集中在 μμ 附近), 是归一化常数。
损失形式(示例):
在自监督对比学习中,可以假设正样本对 是从同一个 vMF 分布中抽取的(共享均值),而负样本对来自不同分布。最大化对数似然会得到类似 InfoNCE 的形式,但具有明确的概率解释。
一种显式的球形对比损失可以是:
这里 sim 是余弦相似度,κ 扮演类似温度倒数的作用。如果我们将 κ 视为可学习的参数,那么该损失就是带温度参数的 InfoNCE,且特征位于球面上。因此,许多现代对比损失实际上已经是"球形"的。
专门以 vMF 为基础的损失:
一些工作直接使用 vMF 分布建模,并定义损失为负对数似然。例如,对于锚点 x,其正样本 的损失为:
其中 是锚点所属类别的均值方向(可以是可学习的原型)。对于负样本,则可能使用其他约束。
球形对比损失的特点:
-
几何意义明确:所有特征都在球面上,距离度量自然为余弦相似度或测地距离。
-
可解释性:vMF 分布提供了概率解释,且浓度参数 κ 可以衡量特征的判别性。
-
数值稳定性:球面约束可防止特征范数过大或过小,有助于训练。
在实际应用中,多数对比学习方法(如 SimCLR、MoCo)已经默认对特征进行 L2 归一化,因此它们隐含地使用了球形空间。而"球形对比损失"这一术语通常强调从概率生成模型的角度推导对比损失。
总结
| 类别 | 代表损失 | 核心思想 | 负样本需求 |
|---|---|---|---|
| 距离对比 | Contrastive, Triplet, N-pair | 直接优化样本对距离 | 需要 |
| NCE/InfoNCE | InfoNCE | 将正样本从噪声中分类 | 需要 |
| 聚类一致性 | SwAV | 通过聚类分配实现一致性 | 隐含 |
| 特征预测 | BYOL, SimSiam | 预测另一视图特征,防止坍塌 | 不需要 |
| 排序 | Margin Ranking | 排序正负样本相似度 | 需要 |
随着自监督学习的发展,损失函数逐渐从显式负样本对比转向隐式负样本或无负样本设计,但 InfoNCE 仍然是当前最主流的形式。