SimCLR:一个简单的视觉表示对比学习框架
高效的视觉表示主流的方法可分为两类,分别是生成方式和判别方式。其中,生成方式需要像素级别的生成,产生很多不必要的计算量;判别方式是基于监督学习相似的目标函数学习视觉表示,因此需要设计监督学习的替代任务,这种方式会限制视觉表示的泛化性。SimCLR是一个简单的视觉表示对比学习框架,如图1所示。与之前的对比学习相比,SimCLR即不需要特别的架构,也不需要更多的内存,但是性能优越。

图1 SimCLR框架
算法设计
SimCLR通过对比损失最大化相同样本增强之后的数据之间一致性,学习视觉表示。如图1所示,该框架共有4个主要的元件,分别是
- 一个随机的数据增强模块,把任何给定的数据样本随机的变形为两个相关的样本,被表示为$\tilde{x}_i$和$\tilde{x}_j$,作为正样本。在SimCLR中,作者们序列的应用三个简单的增强:随机裁剪、Resize为原始size、随机颜色扰动、以及随机高斯模糊。
- 一个基本的编码器$f(\cdot)$,用于从增强的数据样本中抽取表示向量。编码器可以选择任何架构。SimCLR中作者们选择ResNet获得编码$\mathbf{h}_i=f(\tilde{x}_i)=ResNet(\tilde{x}_i)$,$\mathbf{h}_i$由平均池化层输出。
- 一个小的映射head神经网络$g(\cdot)$,把视觉表示映射到对比损失可使用的空间内。作者们利用一个隐藏层的MLP获得$z_i=g(\mathbf{h}_i)=W^{(2)}\sigma(W^{(1)}\mathbf{h}_i)$, 其中$\sigma$表示的是Relu激活函数。
- 一个对比损失函数。给定数据集$\{\tilde{x}_k\}$包含正样本对$\tilde{x}_i,\tilde{x}_j$,对比预测任务的目标是在集合$\{\tilde{x}_k\}_{k\neq i}$找到$\tilde{x}_i$对应的$\tilde{x}_j$。
具体可见算法1

损失函数
随机采样$N$个样本,那么可生成$2N$个样本点,共$N$对。对于负样本,非同一个样本产生的数据,均为该样本对的负样本,共$2(N-1)$个。利用点积定义向量$\mathbf{u}$与$\mathbf{v}$之间的距离,即$sim(\mathbf{u},\mathbf{v})=\frac{\mathbf{u}^Tv}{\Vert u\Vert\Vert v\Vert}$,那么对于正样本对$(i,j)$的损失函数为
$$
\begin{aligned}
l_{i,j}=-log\frac{exp(sim(z_i,z_j))/\tau}{\sum_{k=1}^{2N}\mathbb{1}_{[k\neq i]}exp(sim(z_i,z_k)/\tau)}
\end{aligned}
$$
最终的损失函数为所有正样本对损失函数之和。为了方便,该损失函数被称为NT-Xent(the normalized temperature-scaled entropy loss)。
模型训练
在基于大bach size训练模型时,会产生不稳定的现象。因此,梯度下降算法选用LARS优化器。为了评估学习的表示,作者们把线性评估协议作为评估标准,该评估协议时利用线性分类器基于学习到的表示数据学习,分类器的精度作为视觉表示的质量。
研究结果
作者们不仅提出了SimCLR,还研究了数据增强、网络架构、损失函数和Batch大小对表示学习的影响。
数据增强相关的结论:
- 不存在单一的数据增强对学习好的表示是足够的。
- 随机裁剪与随机颜色扰动的组合展现出较好的表现。
- 同一图片的随机裁剪共享相似的颜色扰动。
- 相较于监督学习,对比学习需要更强的数据增强。
网络架构的相关结论:
- 相较于有监督学习,无监督对比学习模型越大性能越好。
- 非线性映射Head能够提升表示质量。
- 表示$h$的性能优于$z$。
损失函数和Batch-Size的相关结论:
- 相较于Margin损失和Logistic损失,NT-Xent损失性能最好。
- 无标准化和温度缩放系数$\tau$,性能变得更差。
- 无标准化,对比学习任务的精度提高,但产生的表示变差。
- Batch-Size越大和训练epochs越大,提供的负样本越多,模型效果越能得到提升。
相关思考
损失函数NT-Xent本质上是交叉熵损,NT-Xent是正样本对的权重与所有负样本对权重之和的比值的熵与交叉熵是正样本的交叉熵与负样本的交叉熵之和一致。
版权: 本篇博文采用《CC BY-NC-ND 4.0》,转载必须注明作者和本文链接