深度学习(自监督:MoCo V3):An Empirical Study of Training Self-Supervised Vision Transformers

前言

MoCo V3是何凯明团队的新作,发表在ICCV 2021上,是一篇自监督文章,在MoCo V2的基础上做了一些小改动,同时report了ViT自监督训练过程中的“不稳定”现象,并给出了一个trick,用于减缓ViT自监督训练不稳定的现象。

凯明团队的文章还是一如既往的细致,本文主要总结MoCo V3的操作流程以及ViT自监督训练过程中的“不稳定”现象。MoCo V3相关的性能试验不会过多总结

本文为个人总结,如果错误,欢迎指出

本文默认读者知晓MoCo V2以及常见对比学习算法的做法,不会过多赘述细节

MoCo V3

相比于MoCo V2

  1. MoCo V3摒弃了memory bank,负例由同一batch size中的其他样本组成,类似于simCLR。作者发现当batch size足够大时,从batch size中挑选负例和从memory bank中挑选负例的性能差别不大。
  2. 损失函数为InfoNCE,数学表达式如下
    在这里插入图片描述 q 、 k + q、k^+ qk+构成对比学习中的正例对、 q 、 k − q、k^- qk构成对比学习中的负例对,具体如何产生,可以查看深度学习(自监督:MoCo)——Momentum Contrast for Unsupervised Visual Representation Learning

算法伪代码如下
在这里插入图片描述

与MoCo v2、MoCo V2+(就是simsiam)在ImageNet上的线性分类性能对比如下图所示,backbone为ResNet50
在这里插入图片描述

ViT自监督训练过程中的“不稳定”现象

CNN模型自监督训练时,KNN分类器的准确率是平滑上升的,但是ViT不是,如下图所示
在这里插入图片描述
上图比对了不同batch size下,backbone为ViT情况下,MoCo V3的KNN性能变化曲线图,可以看到,batch size越大,训练的不稳定现象越明显,即KNN准确率震荡现象越明显,并且这种震荡现象会影响到模型的性能,batch size=6144时,震荡现象非常明显,并且线性分类准确率只有69.7。

那么能否通过调节学习率,来缓解训练不稳定呢?
在这里插入图片描述
从上图来看,使用较小的学习率的确可以减缓训练不稳定,但是这会影响到模型的性能,当学习率为0.5时,虽然训练不稳定现象有所减缓,却会影响到模型的性能。

是不是MoCo V3的对比学习算法导致ViT出现训练不稳定现象呢?作者发现BYOL、simCLR中也存在类似现象,如下图蓝线所示,这表明ViT的训练不稳定现象可能具有一定的普适性。
在这里插入图片描述

如何缓解ViT自监督训练的不稳定现象

作者注意到,当梯度发生较大改变时,会导致KNN的准确率出现“低谷”,比对了所有层的梯度后,作者发现梯度峰值在第一层出现的时机最早,并且过了几个epochs训练后,最后一层的梯度也会出现峰值,如下图所示
在这里插入图片描述
基于此,作者假设训练不稳定现象会较早出现在浅层,既然如此,那么就固定浅层的参数,使其不会出现训练不稳定现象,会不会改善训练不稳定现象呢?基于此,作者固定了ViT的patch projection layer,此时模型的性能变化如下图绿线所示
在这里插入图片描述
可以看到,即使使用较大的学习率,如1.5x 1 0 − 4 10^{-4} 104,此时模型训练依然稳定,并且此时模型的线性分类性能也和使用ResNet50作为backbone近似,可见缓解训练不稳定现象有助于提升模型的性能(没有缓解训练不稳定,学习率为1.5x 1 0 − 4 10^{-4} 104时,模型的线性分类准确率为71.7),并且这种做法不仅针对MoCo V3有效, simCLR、BYOL也仍有效。

思考

作者在原文中提到,固定ViT的patch projection layer,相当于减小了解空间大小,那么更小参数量的ViT是否仍会出现训练不稳定现象呢?固定了patch projection layer,相当于减小了网络的深度,训练不稳定现象是否和网络深度有关系(类似于CNN早期出现的梯度爆炸和梯度消失问题)?

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
回答: class MoCo_ResNet(MoCo)是一个继承自MoCo的类,用于实现MoCo_ResNet模型。MoCo是一个自监督学习的方法,用于无监督的视觉表示学习。MoCo v3的训练方法与MoCo v1/2的训练方法有一些差异。MoCo v3取消了Memory Queue,而是使用了一个巨大的Batch size来获取足够的负样本。具体来说,MoCo v3的Framework中没有Memory Queue,这意味着MoCo v3所观察的负样本都来自一个Batch的图片。因此,为了让模型看到足够的负样本,MoCo v3中使用了一个巨大的Batch size,通常为4096。\[1\]从CVPR 2020上发表的MoCo V1到最新的MoCo V3MoCo一共经历了三个版本。\[2\]在实现MoCo_ResNet时,可以参考MoCo官方提供的代码,也可以参考其他相关代码如SimSiam和SimCLR。\[3\] #### 引用[.reference_title] - *1* *2* [MoCo V3:视觉自监督迎来Transformer](https://blog.csdn.net/m0_37046057/article/details/125861704)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [对比学习:MoCo代码详解](https://blog.csdn.net/qq_37808565/article/details/125715801)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值