2021 Oral CVPR : Exploring Simple Siamese Representation Learning

论文
代码

1. 摘要

  • 孪生网络已经成为无监督视觉表征学习的主流框架,最大化同一图像的两个增广图的相似性使其避免 崩溃解(collapsing solutions) 问题。本文提出了一个simple Siamese网络可以在不使用1) 负样本对;2)大批量; 3) 动量编码器取得好的结果。崩溃解存在于损失函数和网络中,但是可以通过stop-gradient操作避免崩溃解。SimSiam在ImageNet及下游任务上均取得了有竞争力的结果。

2. 引言

  • Siamese 网络是应用于两个或多个输入的 权重共享 神经网络,可以用来 比较(包括但不限于“对比”)实体。最近的方法将输入定义为一幅图像的两个增强,并根据不同的条件最大化相似性。本文提出的Siamese 既没有使用负样本对也没有使用动量编码器防止崩溃解,而是通过最大化同一张图片的两个视角相似度,既适用于典型的批量大小,也不依赖于大批量训练。

  • Contrastive learning:排斥来自不同图像的输入,同时吸引相同图像的两个增强图片。负对排除了来自解空间的恒定输出。

  • Clustering:在聚类表示和学习预测聚类分配之间交替。SwAV 通过从一个视图计算分配并从另一个视图进行预测来将聚类融合到一个孪生网络。SwAV在每个batch的平衡分区约束下执行在线聚类。为了提供充足的样本进行聚类,往往会使用大批量训练。

  • BYOL :从一个视图直接预测另一个视图的输出,它是一个分支为 动量编码器的孪生网络。

3. 方法

SimSiam
在这里插入图片描述

  • 上述公式等价于规范化向量的MSE损失。与此同时,还定义了一个对称损失.

对称loss

  • 上述两个损失作用于每一张图像,总损失是所有图像损失的平均,故最小的可能损失为-1.

  • 使用stop-gradient操作修改loss函数为:
       在这里插入图片描述
    在这里插入图片描述

  • 在损失的第一项, x 2 \begin{array}{c}_{x_2 } \end{array} x2不会从 z 2 \begin{array}{c}_{z_2 } \end{array} z2接收梯度信息;在其第二项,则会从 p 2 \begin{array}{c}_{p_2 } \end{array} p2接收梯度信息。

  • SimSiam伪代码实现如下
       伪代码

3.1 Baseline settings

  • Optimizer: SGD用于预训练,学习率为, l r × b a t c h s i z e / 256 \begin{array}{c} lr\times batchsize {/} 256 \end{array} lr×batchsize/256基础学习率为 l r = 0.05 \begin{array}{c} lr=0.05 \end{array} lr=0.05,学习率采用consine衰减机制,weight decay=0.0001,momentum=0.9。BatchSize默认512,采用了SynBatchNorm。
  • Projection MLP:编码网络中投影MLP部分的每个全连接层后接BN层,其输出的fc层后无ReLU,隐含层fc的的维度为2048,MLP包含三个全连接层。
  • Prediction MLP:预测MLP中同样适用了BN层,但其输出fc层后无BN与ReLU。MLP有2个全连接层,第一个全连接层的输入与输出维度为2048,第二个的输出维度为512。
  • Experimental setup:作者采用ResNet50作为backbone,在ImageNet上线进行无监督预训练,然后采用监督方式冻结backbone训练分类头,在验证集上验证其性能。

4. 实证研究

4.1 Stop-gradient

图2

  • 第一个图,当不使用Stop-gradient时,优化器迅速找到退化解,loss降到最小值-1,为了证明退化解是因为崩溃解导致的,作者研究了输出的l2规范化结果的标准差。如果输出“崩溃”到了常数向量,那么其每个通道的标准差应当是0。
  • 如第2个图所示。如果输出具有零均值各项同性高斯分布,可以看到其标准差为根号d分之一。第2张图中的蓝色曲线(即添加了stop-gradient)其标准差与之接近,这也就意味着输出并没有“崩溃”。
  • 第3个图给出了KNN分类器的验证精度,KNN分类器可用于训练过程的监控。在无Stop-gradient时,其分类精度仅有0.1%,而添加Stop-gradient后最终分类精度可达67.7%。

4.2 Predictor

表1

  • 当移除预测MLP头模块h后,该模型不再有效。
  • 如果预测MLP头模块h固定为随机初始化,该模型同样不再有效,这与崩溃解无关,是因为模型不收敛,loss太高。
  • 当预测MLP头模块采用常数学习率时,该模型甚至可以取得比基准更好的结果,作者给出的可能的解释:h应当适应最新的表征,所以不需要在表征充分训练之前使用降低学习率的方法迫使其收敛。

4.3 Batch Size

表2

  • 探究了不同的batch对精度的影响, b a s e l r \begin{array}{c} base lr \end{array} baselr是0.05,但是学习率会随着batch的变化做线性缩放 l r × b a t c h s i z e / 256 \begin{array}{c} lr \times batchsize /256 \end{array} lr×batchsize/256 ,对于batch大于1024时,会采用10个epoch的warm-up学习率。
  • 探究了SGD在较大batch上会导致性能退化,但也证明了优化器不是防止崩溃解的必要条件。

4.4 Batch Normalization

图3

  • 移除所有BN层后,尽管精度只有34.6%,但不会造成“崩溃”;这种低精度更像是优化难问题,对隐含层添加BN后精度则提升到了67.4%;
  • 在Projection MLP的输出后添加BN,精度可以进一步提升到68.1%;
  • 在Predictor MLP的输出添加BN后反而导致训练变的不稳定。
  • BN使模型易于优化,但是并没有证据表明可以阻止产生崩溃解。

4.5 Similarity Function

相似度函数实验结果

  • 除了余弦相似函数之外,该方法在交叉熵相似函数下也有效。
    D ( p 1 , z 2 ) = − s o f t m a x ( z 2 ) ⋅ l o g ( s o f t m a x ( p 1 ) ) \begin{array}{c} D(p_{1}, z_{2} )=-softmax(z_{2})\cdot log(softmax(p_{1})) \end{array} D(p1,z2)=softmax(z2)log(softmax(p1))
  • softmax是channel维度的,softmax的输出可以认为是属于d个类别中每个类别的概率。
  • 可以看出使用交叉熵相似性依然可以很好地收敛,并没有崩溃,所以避免崩溃解与余弦相似性无关。

4.6 Symmetrization

对称实验结果

  • 非对称损失同样取得了合理的结果,而对称损失有助于提升精度,这与避免“崩溃解”无关。
  • 在一系列的设置中,stop-gradient操作可以有效地避免崩溃解产生。

5. 实验结果对比

5.1 ImageNet

ImageNet实验结果

  • 上图给出了所提方法与其他SOTA无监督学习方法在ImageNet的性能,可以看到:SimSiam可以取得具有竞争力的结果。在100epoch训练下,所提方法具有最高的精度;但更长的训练所得收益反而变小。

5.2 Transfer Learning.

transfer learning实验结果

  • 上表给出了所提方法与其他SOTA方法在迁移学习方面的性能对比。从中可以看到:SimSiam表达可以很好的迁移到ImageNet以外的任务上,迁移模型的性能极具竞争力。

6. 结论

  • 孪生形状是这些表达学习方法成功的关键原因所在。孪生网络具有天然建模不变性的特征,而这也是表达学习的核心所在。