极市导读
本文是FAIR的恺明团队针对自监督学习+Transformer的一篇实证研究。针对Transformer在自监督学习框架中存在的训练不稳定问题,提出了一种简单而有效的技巧:Random Patch Projection
paper: https://arxiv.org/abs/2104.02057
本文是FAIR的恺明团队针对自监督学习+Transformer的一篇实证研究。针对Transformer在自监督学习框架中存在的训练不稳定问题,提出了一种简单而有效的技巧:Random Patch Projection,它不仅适用于MoCoV3框架,同样适用于其他自监督学习框架(比如SimCLR、BYOL);与此同时,从不同角度的对比分析得出:Transformer中的位置信息尚未得到充分探索,即Transformer仍有继续改善的空间。
本文并没有提出一种新的方法,相反,鉴于最近计算机视觉的进展,我们研究了一个简单、渐进、但必须知道的基线:用于视觉Transformer的自监督学习。尽管标准卷积网络的训练方法已经非常成熟且鲁棒,然而ViT的训练方案仍有待于构建,特别是自监督场景下的训练极具挑战。
在这里,我们从基础出发,对训练自监督ViT的几种基本组件的影响进行了分析调研。我们发现:不稳定性是影响精确下降的最主要问题,它会被表面上好的结果覆盖(容易陷入局部最优)。我们通过实验发现:这些结果确实存在部分失败;当训练变得稳定时,这些结果可以进一步提升。基于MoCoV3以及其他自监督框架,我们从不同角度对ViT进行了测试分析;我们对观察到的积极面、挑战性以及开放问题进行了讨论,期望该工作可以为未来的研究提供有用的数据支撑和经验参考。
本文主要聚焦于:采用视觉领域的自监督框架进行Transformer的训练。CNN的训练方法已被进行充分的研究与论证,而ViT模型是新的,其训练方法尚未完整构建。本文从基础出发,研究了影响深度网络训练的几个基本模块:batch size,learning rate以及optimizer。我们发现:在不同场景下,不稳定性均是影响自监督ViT训练的主要问题。
有意思的是,我们发现:不稳定的ViT训练可能不会导致灾难性结果(比如发散);相反,它可以导致精度的轻度退化(约下降1-3%)。除非有一个更稳定的作为对比,否则这个程度的退化可能难以被注意到。据我们所知,该现象在卷积网络训练中鲜少发生,我们认为该问题及其隐含的退化值得注意。
为了证明不稳定性的可能危害,我们研究了一个可以在实践中提高稳定性的简单技巧。基于梯度变换的经验观察,我们固化ViT中的块投影层,即采用固定随机块投影。我们发现该trick可以缓解多种场景下的不稳定问题并提升模型精度。
基于对比学习框架,自监督Transformer可以取得非常好的结果。不同于ImageNet监督的ViT(模型变大时精度反而变差),更大的自监ViT可以取得更高的精度。比如ViT-Large的自监督预训练可以取得超越监督预训练版本的性能。
此外,本文所提自监督ViT模块可以取得与大的卷积网络相当的性能。一方面验证了ViT的潜力;另一方面意味着自监督ViT仍有进一步提升的空间。因为我们发现:移除ViT中的position embedding仅仅造成了轻微的性能下降,这意味着:自监督ViT无需位置信息即可学习很强的特征表达,同时也也暗示位置信息并未得到充分探索。
我们先来看一下本文所提出的MoCoV3,它是对MoCo V1/2的一种改进,寻求在简单性、精度以及可缩放等方面提供更好的均衡。MoCoV3的伪代码实现如下:
类似MoCo、SimCLR,我们采用随机数据增强从每个图像中裁剪两个图像块,并经由两个编码器编码为 ,我们采用InfoNCE损失函数:
其中, 表示q同源图像的输出,即正样本; 表示异源图像输出,即负样本。
延续SimCLR处理方式,MoCoV3采用同一批次自然共存的密钥,移除了Memory Queue(当batch足够大时,其收益递减)。基于这种简化,上面的对比损失可以简化为上述伪代码中ctr
实现。我们采用了对称损失:
。
我们的编码器 由骨干网络(如ResNet、ViT)、投影头以及额外的预测头构成;而编码 则由骨干网络、投影头构成,没有预测头。 通过 的滑动平均更新。
作为参考,我们以ResNet50作为骨干网络,其在ImageNet上的性能如下,由于额外的预测头与大的batch,MoCoV3具有更加性能。
原则上来讲,我们可以直接在对比自监督学习框架中采用ViT骨干替换ResNet骨干网络。但实际上,主要挑战在于:训练不稳定。
我们发现:不稳定问题不仅仅由精度反映。实际上,即使存在不稳定问题,它也可以“表面上很好”的进行训练并提供一个不错的结果。为揭示这种不稳定性,我们在训练过程中对kNN曲线进行了监控,研究了它如何影响不稳定性并提出了一种简单的trick进行稳定训练,进而提升不同场景下的精度。
按照上述方式,我们设计了不同计算量的ViT模型并采用大batch(它有助于提升自监督学习方法的性能)进行训练。在下面的分析中,我们采用ViT-B/16作为基准。
前面的所有实验均表明:不稳定是主要问题。接下来,我们将提出一种简单的trick提升不同场景下的稳定性。
在训练过程中,我们注意到梯度突变(见上图突变波峰)会导致训练曲线的“下沉”(见上图)。通过比较所有层的梯度,我们发现:梯度突变发生在(patch projection)第一层先发生,然后延迟一定迭代后最后一层再发生。基于该发现,我们猜测:不稳定性发生在浅层。受此启发,我们在训练过程中对块投影进行冻结。换句话说:我们采用固定的Random Patch Projection
层进行块嵌入,而非通过学习方式。
上图对比了可学习与随机块投影的MoCoV3结果对比。可以看到:随机块投影可以稳定训练,训练曲线更为平滑、精度更高(精度提升约1.7%),进一步说明了训练不稳定是影响精度的主要问题。
我们发现:除了MoCo外,其他相关方法(比如SimCLR、BYOL)同样存在不稳定问题。随机块投影同样可以改善SimCLR与BYOL的性能(分别提升0.8%和1.3%),见上图对比。不稳定对于SwAV会导致损失发散(NaN),本文所提随机块投影可以稳定训练SwAV并将其精度由65.8%提升到66.4%。总而言之,本文所提trick对于所有自监督方案均有效。
Discussion:一个有意思的发现:块投影层的训练并非必要。对于标准ViT块尺寸,其块投影矩阵时过完备的,此时随机投影足以保持原始块的信息。
我们注意到:冻结第一层并不会改变架构,但它会缩小解决方案空间。这意味着:根本问题与优化相关。该trick可以缓解优化问题,但不能解决它;当lr过于大时模型仍存在不稳定问题。第一层不太可能时不稳定的主要原因,相反,该问题与所有层相关。但第一层只是更易于分开处理,因为它是骨干网络仅有的非Transformer层。
在这里,我们ViT+MoCoV3的实现细节进行更详细的描述。
上表给出了不同模型的计算量、训练时长等信息(上述结果为谷歌云平台实验结果)。ViT-B训练100epoch花费2.1小时;ViT-H训练100epoch花费9.8小时(512个TPU)。如果采用GPU的话,ViT-B需要24小时(128GPU)。TPU的扩展性要比GPU更优哇。
上表给出了四种不同自监督学习框架的实验对比。可以看到:(1) 相比其他自监督方法,在相同骨干网络ViT-S与ViT-B时,MoCoV3具有更加的精度。(2) MoCoV3与SimCLR在ViT-B方面的性能要优于ResNet50。
接下来,我们将从不同角度对本文所提框架进行消融实验分析。
上表给出了MoCoV3框架下不同ViT模型的对比。可以看到:(1) 相比iGPUT,无需额外数据预训练,基于MoCo的ViT取得了更高的精度、更小的模型。(2) 随着模型变大,所提方案的精度会逐渐提升;而在监督学习方式中,基于ImageNet-1k/2k预训练的ViT-L的精度要低于ViT-B。事实上,本文自监督预训练的ViT-L精度(77.6%)要比监督方式(76.53%)的更高,这意味着:自监督学习作为一种广义表达学习工具不易于过拟合。
上图给出了所提方案与ResNet系列+其他自监督学习的性能对比。可以看到:
最后,我们再看一下所提方案在下游任务迁移学习方面的性能。结果见上表,可以看到:
专知便捷查看
便捷下载,请关注专知公众号(点击上方蓝色专知关注)
后台回复“SSLT” 就可以获取《何恺明团队新论文!自监督学习+Transformer=MoCoV3,解决训练不稳定性》专知下载链接