当前位置:网站首页>深度学习(自监督:MoCo V3):An Empirical Study of Training Self-Supervised Vision Transformers
深度学习(自监督:MoCo V3):An Empirical Study of Training Self-Supervised Vision Transformers
2022-07-28 05:22:00 【菜到怀疑人生】
前言
MoCo V3是何凯明团队的新作,发表在ICCV 2021上,是一篇自监督文章,在MoCo V2的基础上做了一些小改动,同时report了ViT自监督训练过程中的“不稳定”现象,并给出了一个trick,用于减缓ViT自监督训练不稳定的现象。
凯明团队的文章还是一如既往的细致,本文主要总结MoCo V3的操作流程以及ViT自监督训练过程中的“不稳定”现象。MoCo V3相关的性能试验不会过多总结
本文为个人总结,如果错误,欢迎指出
本文默认读者知晓MoCo V2以及常见对比学习算法的做法,不会过多赘述细节。
MoCo V3
相比于MoCo V2
- MoCo V3摒弃了memory bank,负例由同一batch size中的其他样本组成,类似于simCLR。作者发现当batch size足够大时,从batch size中挑选负例和从memory bank中挑选负例的性能差别不大。
- 损失函数为InfoNCE,数学表达式如下
q 、 k + q、k^+ q、k+构成对比学习中的正例对、 q 、 k − q、k^- q、k−构成对比学习中的负例对,具体如何产生,可以查看深度学习(自监督: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} 10−4,此时模型训练依然稳定,并且此时模型的线性分类性能也和使用ResNet50作为backbone近似,可见缓解训练不稳定现象有助于提升模型的性能(没有缓解训练不稳定,学习率为1.5x 1 0 − 4 10^{-4} 10−4时,模型的线性分类准确率为71.7),并且这种做法不仅针对MoCo V3有效, simCLR、BYOL也仍有效。
思考
作者在原文中提到,固定ViT的patch projection layer,相当于减小了解空间大小,那么更小参数量的ViT是否仍会出现训练不稳定现象呢?固定了patch projection layer,相当于减小了网络的深度,训练不稳定现象是否和网络深度有关系(类似于CNN早期出现的梯度爆炸和梯度消失问题)?
边栏推荐
- ssh/scp断点续传rsync
- self-attention学习笔记
- Digital collections "chaos", 100 billion market change is coming?
- 微信小程序开发制作注意这几个重点方面
- Flink CDC (MySQL as an example)
- Two methods of covering duplicate records in tables in MySQL
- ModuleNotFoundError: No module named ‘pip‘
- Record the problems encountered in online capacity expansion server nochange: partition 1 is size 419428319. It cannot be grown
- XML parsing entity tool class
- 【一】redis简介
猜你喜欢

手撸一个简单的RPC(<-_<-)

小程序搭建制作流程是怎样的?

Record the problems encountered in online capacity expansion server nochange: partition 1 is size 419428319. It cannot be grown

如何选择小程序开发企业

高端大气的小程序开发设计有哪些注意点?

【6】 Redis cache policy

小程序开发哪家更靠谱呢?

At the moment of the epidemic, online and offline travelers are trapped. Can the digital collection be released?

【二】redis基础命令与使用场景

Sales notice: on July 22, the "great heat" will be sold, and the [traditional national wind 24 solar terms] will be sold in summer.
随机推荐
Installation and use of flinkx
Self attention learning notes
Dataset class loads datasets in batches
On July 7, the national wind 24 solar terms "Xiaoshu" came!! Attachment.. cooperation.. completion.. advance.. report
Uniapp WebView listens to the callback after the page is loaded
word2vec和bert的基本使用方法
知识点21-泛型
字节Android岗4轮面试,收到 50k*18 Offer,裁员风口下成功破局
Quick look-up table to MD5
【一】redis简介
Single line function, aggregate function after class exercise
微信小程序开发制作注意这几个重点方面
No module named yum
Svn incoming content cannot be updated, and submission error: svn: e155015: aborting commit: XXX remains in conflict
Construction of redis master-slave architecture
4个角度教你选小程序开发工具?
Spark中的Structured Streaming
Invalid packaging for parent POM x, must be “pom“ but is “jar“ @
Chapter 7 single line function
小程序开发哪家更靠谱呢?