写在前面
大三狗随手记录,不喜勿喷。
主要思想
Siamese network常常被用来计算图像的两个增强之间的相似性,但可能会造成模型坍塌(即输出恒定)。作者在本文提出了一个非常简单的Simple Siamese network,简称Simsiam,能产生很好的效果,并且对防止坍塌(collapse)很有效。
框架
Siamese Network就是同一个图像X的两种增强Xi和Xj经过同样的编码器f(权重相同),并计算两个encoder的输出的距离,如果距离较近就认为是同一类,较远就认为是不同的类别,最大化两者之间的相似性。
本文提出的方法和Siamese Network的方法是非常相近的。让同一个图像X的两种增强Xi和Xj经过同一个编码器f,然后在一侧用prediction MLP,在另一侧用stop-gradient操作。最大化两者之间的相似性。
作者在这里给出了模型训练的伪代码。非常的简单易懂。
相比于其它模型如SimSLR,BYOL,SwAV,本文提出的框架是非常简单的,但是它依然能够有很好的效果。
消融研究
为了研究出哪一部分设计在Simsiam当中是至关重要的,作者做了很多的消融研究。
首先对于是否有stop-gradient,也就是是否停止一侧的网络传递loss进行了测试,显然如果使梯度进行传递,loss会非常小,因为两个网络的参数是一样的。这样最后性能是非常差的,因为它们很容易就会达到两个网络参数一样导致模型坍塌。然而可以看出有stop-gradient操作的准确率一直在上升。因此stop-grad操作是非常重要的。
作者又测试了使用完全随机固定值作为predictor的或者直接没有predictor,模型的性能也很差,因此predictor也是很重要的。
作者还测试了Batch size和Batch normalization的影响等等。实验发现,Batch size并没有太大的影响。但与SimCLR 和 SwAV 这两种方法相比优势在于,后者都是在batch_size为4096的情况下效果不错,此方法在64,128这样的小批量下效果依旧很好。
然而Batch Normalization在不同位置的作用虽有影响,但与模型的坍塌无关。
在Similarity Function的选择上,作者实验发现余弦距离更好。
在Symmetrization对称性的比较中,作者发现对称有助于提高准确性,但它与预防坍塌无关。对称为每幅图像多做了一个预测,最终使得差距缩小。
研究结果
作者在与几种类似方法的对比实验后得出结论,本文提出的方法与SimCLR,MoCo v2,BYOL,SmAV的性能是非常接近的,甚至优于一些前人的工作。
总结
Siamese network非常适合给不变量进行建模,在表征学习当中是一个非常重要的工具。作者提出的SimSiam作为一种非常简单的方法,可以在不产生模型坍塌现象的情况下产生较高性能的结果。作者希望我们大家可以继续挖掘Siamese network在表征学习当中的潜力。
非官方的代码复现:https://github.com/PatrickHua/SimSiam