自监督学习 SimCLR:对比学习框架与数据增强
自监督学习 SimCLR:对比学习框架与数据增强
自监督学习SimCLR(A Simple Framework for Contrastive Learning of Visual Representations)是一种无需人工标注即可学习高质量图像表征的方法。它通过对比学习让模型学会区分同一图像的不同增强视图与不同图像之间的差异,从而提取有意义的视觉特征。本篇教程将带你从零理解SimCLR的核心思想、框架设计、关键的数据增强策略以及训练细节。
1. 什么是自监督学习?
传统监督学习依赖大量人工标注,而自监督学习从数据本身构造监督信号,无需外部标签。例如,给定一张图像,我们可以随机裁剪、翻转、施加颜色变换,但依然知道这些变换后的图像代表同一语义内容。SimCLR正是利用这一特性,让模型学会“同一图像的不同视角应该产生相似的表示,不同图像则应当被推开”。
2. SimCLR 的核心思想
SimCLR的精髓可以浓缩为一句话:最大化同一图像不同增强视图之间的一致性,同时最小化不同图像视图之间的一致性。它使用一种名为**对比损失(NT-Xent)**的目标函数,在一个批次(batch)的正负样本对上进行训练。
- 正样本对:同一张原始图像经过两次随机数据增强得到的两张视图。
- 负样本对:来自不同原始图像的任意两张视图(或同一批次中除了正样本对之外的所有其他视图)。
3. 框架总览
SimCLR的整体流程分为四个步骤:
- 数据增强:对输入图像施加两次随机增强,生成两个变体
x_i和x_j。 - 编码器:用深度神经网络(如ResNet)将增强后的图像映射为表示向量
h_i、h_j。 - 投影头:一个小的全连接网络将表示向量映射到低维对比空间,得到
z_i、z_j。 - 对比损失:在投影空间上计算正样本对的相似度,并与所有负样本进行对比。
4. 数据增强策略:对比学习的核心驱动力
数据增强在SimCLR中起着决定性作用。研究表明,组合多种增强方式显著提升了表征质量。SimCLR默认使用以下增强链:
- 随机裁剪并调整大小:将图像裁剪为随机区域,再缩放至固定尺寸。这是最重要的增强,因为它强制模型关注局部与全局的语义信息。
- 随机水平翻转:以50%概率左右翻转。
- 颜色畸变:包括随机亮度、对比度、饱和度、色调的扰动。颜色畸变对于防止模型仅依靠颜色直方图作弊至关重要。
- 随机高斯模糊:用随机标准差的高斯核对图像进行模糊。
- (可选)灰度化:以一定概率将图像转为灰度。
这些增强的组合设计遵循一个原则:产生外观差异足够大但又保持语义不变的视图。如果增强太弱,模型可能学到简单的颜色匹配;增强太强则可能破坏语义,导致正样本对失去共性。
增强消融实验的启示
原始论文发现,单独使用随机裁剪和颜色畸变的组合已经能取得很好的效果。随机裁剪制造了空间上的变化,而颜色畸变防止模型走捷径。高斯模糊进一步强化了局部纹理不变性。
5. 网络结构:编码器 + 投影头
- 编码器
f(·):通常为ResNet-50或更深的网络,去掉最后的分类层,输出一个高维特征向量(例如2048维)。这一部分是我们最终想要用于下游任务的表征。 - 投影头
g(·):一个两层的多层感知机(MLP),将编码器输出映射到128维的向量,并使用ReLU激活。投影头在训练时使用,但训练完成后会被丢弃,只保留编码器部分。研究表明,通过投影头计算对比损失比直接在编码器输出上计算更能保留有用的视觉信息——投影头起到了“信息过滤”作用,将与对比任务无关的细节过滤掉。
6. 损失函数:NT-Xent(归一化温度缩放交叉熵损失)
给定一个批次包含N张原始图像,每张图像生成两个增强视图,共2N个数据点。对于某个正样本对 (i, j),损失函数定义为:
[ l_{i,j} = -\log\frac{\exp(\text{sim}(z_i, z_j)/\tau)}{\sum_{k=1}^{2N} \mathbf{1}_{[k \neq i]}\exp(\text{sim}(z_i, z_k)/\tau)} ]
其中:
sim(u, v)是余弦相似度:u · v / (||u|| ||v||)τ是温度参数,控制对困难负样本的关注程度,通常取 0.5。- 分母对除了
i自身以外的所有 2N-1 个样本求和,其中包含一个正样本和 2(N-1) 个负样本。
整个批次的最终损失是所有正样本对损失的平均:
[ \mathcal{L} = \frac{1}{2N}\sum_{k=1}^{N} [l_{2k-1,2k} + l_{2k,2k-1}] ]
温度参数 τ 的作用:较小的 τ 会使模型更关注特别相似的负样本(困难负样本),从而产生更均匀分布的表征,防止模型坍塌到平凡解。
7. 为什么 SimCLR 能够避免模式坍塌?
自监督对比学习面临的最大风险是模式坍塌,即所有输出退化为同一个常数向量。SimCLR 通过以下设计有效避免:
- 大批量训练:SimCLR 通常使用非常大的批次(如4096或8192),提供大量负样本,使对比任务足够困难,迫使模型学习有区分力的特征。
- 投影头 + 余弦相似度 + τ 的搭配:投影头将表征映射到一个超球面上,结合温度参数,让不同图像的表示尽可能均匀分布在球面上。
- 强数据增强:多样化的正样本对定义了一条稳定的学习曲线,模型必须忽略无关变化,抓住高级语义。
8. 训练细节与实用建议
- 批次大小:原始论文使用从256到8192的批次,大批次显著提升性能。在有限GPU资源下,可采用梯度累积或动量编码器(如MoCo)等变体来近似。
- 优化器:通常使用LARS优化器或SGD配合层自适应学习率,以应对大批量训练的不稳定性。
- 学习率策略:余弦退火(cosine decay)配合线性预热(warmup)。
- 训练长度:标准训练约100-1000个epoch,更长的训练通常带来持续提升。
- 评估方式:冻结编码器,在学到的特征之上训练一个线性分类器(linear evaluation),测试在ImageNet等数据集上的准确率,来量化表征质量。
9. 下游任务迁移
SimCLR训练完成后,将编码器 f(·) 直接用于各种下游任务:
- 线性评估:在冻结特征上接一个线性层做分类,反映特征的可分性。
- 半监督学习:仅用少量标注样本微调整个网络。
- 迁移至检测、分割等:可作为骨干网络初始化,通常比监督预训练更具泛化能力。
10. SimCLR 的局限与后续发展
SimCLR 的成功高度依赖大 batch 和复杂的数据增强,计算开销较大。后续工作如 SimCLR v2 通过更深的投影头和知识蒸馏进一步提升了性能;MoCo 引入动量队列,使得在小 batch 下也能维持大量负样本;BYOL 和 SimSiam 则完全放弃了负样本,依靠非对称结构和动量更新来防止坍塌。
11. 小结
SimCLR 以极其简洁的框架证明了:只要设计合理的数据增强、使用对比损失,就能在没有标签的情况下学到强大的视觉表征。其核心组成——组合增强、投影头、归一化温度损失、大批量训练——已经成为现代自监督视觉学习的基础范式。掌握 SimCLR,就握住了对比学习时代的钥匙。
参考资料
- Chen, T., Kornblith, S., Norouzi, M., & Hinton, G. (2020). A Simple Framework for Contrastive Learning of Visual Representations. ICML.