原文发表于:2021-07-22

SimCLR

SimCLR 是一种用于视觉表征的对比学习框架,由 Google Research, Brain Team 提出。

其主要步骤如下: 1. 数据增强:对同一样本进行两次随机的数据增强,得到两个相关的样本形式,视为一个正对。常见的数据增强方式包括随机裁剪、颜色失真、缩放、旋转等。实验表明,随机裁剪和颜色失真的增强组合能实现较好的性能。 2. 编码器:使用深度神经网络(如 ResNet)从增强后的样本中提取表征。SimCLR 允许选择各种网络作为编码器。 3. 映射头:通过一个小的映射头(例如具有一个隐藏层的多层感知机 MLP,其中使用 ReLU 非线性激活函数),将表征映射到应用对比损失的空间。实验表明,在映射头上比直接在编码器的表征上更有利于定义对比损失,且映射头之前的隐层比其后的层有更好的表征。 4. 对比损失函数:随机抽取 N 个样本为一批,对于一对正样本,其余 2(N - 1)个样本认为是负样本。使用对比损失函数来最大化同一图像在不同增强下的一致性,从而学习到有用的表征。样本对的损失函数定义为:

其中$z_i$和$z_j$是经过映射头后的样本表示,$sim(\cdot)$表示归一化后的点积(如余弦相似性),$1_{(k!=i)}$是一个指示函数,如果$k \neq i$,则为 1,$t$是温度参数。最后的损失在所有的正样本对上计算。

SimCLR 框架的优势并非依赖单个组件的设计,而是它们的组合。与之前的工作相比,SimCLR 简化了对比自监督学习算法,不需要专门的架构或记忆库。通过组合上述发现,它能够在自监督和半监督学习方面显著优于以往的方法。例如,在 ImageNet 数据集上,一个基于 SimCLR 自监督学习得到的线性分类器能达到 76.5%的 top-1 准确率,相比之前的最先进水平有 7%的相对提升,可与监督学习的 ResNet-50 相媲美。当在仅 1%的标签上进行微调时,它能达到 85.8%的 top-5 准确率,在使用标签数量少 100 倍的情况下超过了 AlexNet 的性能。

如果你想了解更多关于 SimCLR 的实现细节或代码示例,可以参考相关的论文、开源项目或技术博客。同时,对比学习领域还有其他方法,如 MoCo 系列等,它们在不同的应用场景和任务中可能具有各自的优势。

InfoNCE

InfoNCE(Information Noise-Contrastive Estimation)是一种用于自监督学习的损失函数,通常用于学习特征表示或表征学习。它基于信息论的思想,通过对比正样本和负样本的相似性来学习模型参数,从而提高特征的区分度。

InfoNCE 的公式如下:

其中: - $n$ 是样本的数量; - $q_i$ 是查询样本 $i$ 的编码向量; - $k_{i^+}$ 是与查询样本 $i$ 相对应的正样本的编码向量; - $k_{j^-}$ 是与查询样本 $i$ 不对应的负样本的编码向量; - $\tau$ 是温度系数,用于调节相似度得分的分布。

从公式可以看出,分子只包含一对正样本,分母则包含一个 batch 下的 $n$ 个所有样本,即 1 个与 $q_i$ 对应的正样本和 $(n - 1)$ 个负样本。其算法思想是在损失优化过程中,希望正样本之间的距离尽可能近,也就是使正样本的相似度尽可能大,同时与负样本之间的相似度尽可能低,距离尽可能远。在最小化 loss 的过程中,需要让公式接近 0,也就是让对数内部的分式接近 1,即达到 $a_+>>b_-$ 的效果(其中分式的分子部分 $a_+ = \exp \left( \frac{q_i \cdot k_{i^+}}{\tau} \right)$,分母部分 $a_++b_- = \sum_{j=1}^{n} \exp \left( \frac{q_i \cdot k_{j^-}}{\tau} \right)$),这就达到了对于查询向量而言,推近它和正样本之间的距离,拉远它和负样本的距离的目的。

InfoNCE 与交叉熵损失有一定的联系。在有监督学习中,交叉熵损失用于衡量真实概率分布和模型预测概率分布之间的差异。而 InfoNCE 可以看作是交叉熵损失的一种变体,在对比学习中,它将问题看作是一个 $k+1$ 类的分类任务(这里的 $k$ 指的是负样本的数量),目的是把图片或样本分到对应的类。

温度系数 $\tau$ 虽然只是一个超参数,但对模型的效果有重要影响。它可以用来控制 InfoNCE 中 logits 的分布形状。当 $\tau$ 值变大时,会使原来 logits 分布里的数值变小,经过指数运算后变得更小,导致分布变得更平滑;相反,当 $\tau$ 取得值较小时,原来的 logits 分布里的数值会相应变大,经过指数运算后变得更大,使得分布变得更集中。

InfoNCE 损失函数在自监督学习、对比学习等领域得到了广泛应用,有助于模型学习到更具区分性和鲁棒性的特征表示。在实际应用中,需要根据具体任务和数据集的特点,合理调整温度系数等超参数,以获得更好的性能。

参考