MoCo v3(ICCV 2021)

paper:An Empirical Study of Training Self-Supervised Vision Transformers

official implementation:https://github.com/facebookresearch/moco-v3

出发点

本文并没有提出一种新的方法,而是对计算机视觉领域最近进展中的一个重要且基础的情况进行研究:即视觉Transformers(ViT)的自监督学习。尽管标准卷积网络的训练方法已经非常成熟和稳健,但ViT的训练方法尚未建立,尤其是在自监督学习场景中,训练变得更加具有挑战性。

解决了什么问题

论文解决了自监督学习中ViT训练的不稳定性问题。作者观察到,尽管在某些情况下训练结果看似不错,但实际上这种不稳定性会导致准确度下降,并且这种下降在没有更稳定对照组的情况下很难被察觉。论文通过实验揭示了这种不稳定性,并提出了改进稳定性的方法。

创新点

  1. 对ViT在自监督学习框架下的训练基础组件进行了深入研究,包括批量大小、学习率和优化器。
  2. 提出了一种简单的改进方法,即在ViT中冻结patch projection层,使用固定的随机patch projection来提高训练稳定性。
  3. 在多个自监督框架中对ViT进行了基准测试和消融研究,提供了不同架构设计的ViT结果,并探讨了其影响。

MoCo v3

本文提出了MoCo v3,它是对MoCo v1/2的增量改进版本,伪代码如Alg 1所示

具体来说,我们对同一张图片进行两次随机的数据增强,并取出两个crop。它们由两个编码器 \(f_k\) 和 \(f_k\) 进行编码,得到输出向量 \(q\) 和 \(k\),直觉上,\(q\) 的行为就像是一个“query”,而学习的目标是检索相应的“key”。这个过程表述为最小化一个对比损失函数,本文采用InfoNCE

 

这里 \(k^+\) 是 \(f_k\) 对 \(q\) 同一张图片的输出,作为 \(q\) 的正样本,集和 \(\{k^-\}\) 由 \(f_k\) 对其它图片的输出组成,作为 \(q\) 的负样本,\(\tau\) 是 \(\ell_2\) 归一化的 \(q,k\) 的温度超参。 

MoCo v3采用同一batch中那些自然共存的keys,作者放弃了memory queue,因为作者发现如果batch size足够大(例如4096)它的增益会变少。通过这种简化,式(1)中的对比损失可以通过几行代码实现:见Alg 1中的ctr(q, k)。本文采用了对称损失ctr(q1, k2) + ctr(q2, k1)

编码器 \(f_q\) 由一个backbone(例如ResNet、ViT)、一个projection head以及一个额外的prediction head组成。编码器 \(f_k\) 由backbone和projection head组成,但没有prediction head。\(f_k\) 根据 \(f_q\) 的移动平均值进行更新,不包括prediction head。

作者用ResNet-50来测试了MoCo v3的精度,下表对比了ImageNet上的linear probing精度

改进主要是因为额外的预测头和大批量(4096)训练。

Stability of Self-Supervised ViT Training

原则上,在contrastive/Siamese自监督框架中,可以直接用ViT主干替换ResNet主干。但在实践中,作者遇到的一个主要挑战是训练的不稳定性。

作者观察到,不稳定问题不能简单地用精度来反映。实际上,如实验结果展示的那样,训练是“相当好的”并且结果也不错,即使它可能是不稳定的。为了揭示这种不稳定性,作者在训练期间监测了KNN曲线。作者首先研究了基本要素如何影响稳定性,这些曲线表明,训练可以是“部分成功的”或者换句话说是“部分失败的”。然后又探索了一个可以提高稳定性的简单技巧,从而在各种情况下都提高了模型精度。

Empirical Observations on Basic Factors

Batch size

ViT模型本身的计算量就很大,因此大批量训练是大型ViT模型的理想解决方案。在最近的一些自监督方法中,大的batch也有利于模型的精度。图1展示了不同batch size下的训练曲线。

当batch size为1k和2k时曲线相当平滑,linear probing准确率分别为71.5%和72.6%。在这个范围内,由于有更多的负样本,更大的batch size提高了精度。4k的曲线变得明显的不稳定,它的linear probing精度为72.2%,尽管和2k的精度相比只有轻微的下降,但它的精度受到了不稳定性的影响。6k的曲线就更差了,作者假设是训练部分重启了,跳出了局部最优,然后寻找一个新的轨迹。因此训练不会发散,但精度取决于重启的效果。当这种部分的失败发生了,仍然能够得到一个还不错的结果(69.7%),但这对于研究是有害的:和那些容易发现的灾难性的失败不同,这种小的退化可能会被忽略。

Learning rate

作者研究了学习率的影响,如图2所示。学习率越小,训练越稳定,但可能会导致欠拟合。如图2所示,学习率lr=0.5e-4比lr=1.0e-4的精度低了1.8%(70.4% vs. 72.2%)。当学习率变大时,训练会变得不稳定,当lr=1.5e-4时曲线有更多的抖动,精度也降低了。

Optimizer

默认情况下,训练ViT采用AdamW优化器,但最近的自监督方法都采用LARS优化器进行large-batch的训练。图3作者研究了LAMB优化器,它是LARS的AdamW版本。

如图3所示,当学习率合适时(lr=5e-4),LAMB的精度比AdamW稍好(72.5%)。但当lr大于最优值时精度迅速下降,有趣的是,训练曲线仍然是平滑的,但在中间部分开始逐渐下降。由于对lr较为敏感当网络结构不同时,LAMB需要额外的lr search,因此作者在本文中还是采用AdamW。

A Trick for Improving Stability

如图4所示,作者发现训练过程中梯度的突然变化会导致训练曲线的下降。通过比较所有层的梯度,作者发现梯度的峰值发生到第一层(patch projection),并通过若干迭代后传递到网络后面的层。因此作者探索了冻结patch projection层,即随机初始化后,就通过stop-gradient不再更新权重了。

 

图5展示了patch projection的参数可学习和随机初始化并冻结两种情况的结果,可以看到random patch projection稳定了训练,训练曲线更加平滑。这种稳定性对精度也有帮助,当lr=1.5e-4时,精度提高了1.7%达到了73.4%。这一实验证明了训练的不稳定性是影响精度的一个主要问题。

此外,作者还发现其它自监督方法可能也是不稳定的。图6展示了SimCLR和BYOL使用ViT的训练曲线,随机patch projection提高了两者的稳定性,精度也分别提高了0.8%和1.3%。SwAV也存在不稳定性,但当它不稳定时损失会发散(NaN),当使用一个较大的学习率并用random patch projection可以帮助SwAV收敛,并在使用最大的稳定学习率时将精度从65.8%提升到66.4%。总之,这一技巧在所有自监督框架中都是有效的。

实验结果

表4展示了不同四种不同的自监督框架使用ViT的性能对比,为了公平比较,每个框架的wd和lr都是单独搜索出来的,可以看到MoCo v3的效果是最好的。

下面是一些消融实验的结果

位置编码sin-cos的效果最好

当不用class token精度从76.5%下降到了69.7%,ViT在最后一个block的后面额外有一个LN层,如果把这层LN也去掉,精度又涨到了76.3%。

 

ViT中没有BN,只在MLP head中有BN,去掉BN时必须将batch size设为2048否则模型不收敛,此时精度下降了2.1%,这表明BN对于对比学习 不是必要的,但可以提升精度。

 

去掉prediction head会导致性能轻微的下降,表明预测头不是必须的。

 

动量m=0.99时精度最高,m=0类似SimCLR的做法(加上prediction head并停止keys上的梯度传播),使用动量编码器精度提升了2.2%。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/853473.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

沃尔玛自养号测评:优势与技术要求解析

沃尔玛自养号测评是一种卖家在沃尔玛平台上提升店铺权重和排名的营销手段。传统运营策略的局限性日益显现,如营销手段单一、难以应对市场竞争等。因此,许多卖家为了提升店铺权重和排名,选择了自养号测评这一技术手段。 以下是对沃尔玛自养号…

关于BERT和embedding

embedding到一个低维向量,但是需要回到onehot高维表示,所以大部分填词游戏最后都需要加上一个MLP接头。 word2vec如此简单的结构,学习到的是embedding 基于计数的统计方法和word2vec融合就形成了glove词嵌入模型 总结:通过各种…

消费者消费数据时报错:INVALID_REPLICATION_FACTOR

今天部署了kafka集群,三台服务器,启动后,生产者发送数据,消费者接收数据的时候报错,INVALID_REPLICATION_FACTOR。 查了很多资料,说是要改kafka下config目录的server.properties,可能是副本数太小&#xff…

【计算机视觉】人脸算法之图像处理基础知识(四)

图像的几何变换 图像的几何变换是指在不改变图像内容的前提下对图像的像素进行空间几何变换。主要包括图像的平移变换、镜像变换、缩放和旋转等。 1.插值算法 插值通常用来放缩图像大小,在图像处理中常见的插值算法有最邻近插值法、双线性插值法、二次立方、三次…

sap怎么批量给信息记录打上删除标识

1.MEMASSIN-----事务代码 2.选择完成字段 3.根据条件查询需要冻结的信息记录 4.输入查询条件 5.全部勾选完成标识,点击保存,即可冻结完成

盘点国内外免费AI视频工具,助你先人一步拥抱AI

哈喽,各位小伙伴们好,我是给大家带来各类黑科技与前沿资讯的小武。 6月13日,Luma AI 在 X 平台(原 Twitter)宣布其视频生成模型 Dream Machine 开放测试,并提供免费试用,这在海外 AI 圈掀起了一…

配置中心理论学习

配置中心是一种用于集中管理应用程序配置信息的系统或服务。在微服务架构中,由于服务数量众多且可能分布在不同的环境中,配置中心的作用尤为突出。它允许开发者将配置信息从应用程序代码中分离出来,集中存储和管理,从而提高配置的…

买什么样的护眼大路灯比较好?五款专业级别的护眼灯推荐

在这个生活节奏的加快和科技的进步的时代,许多家长越来越关注生活质量以及身心健康问题。其中孩子的眼睛视力健康也逐渐引起了家长们的注意。 现在的孩子从早上睁开眼就开始学习,有时候还需要使用到电子产品辅助学习,晚上的写作业的情况更是…

【perl】基本语法 /备忘录/

分享 perl 语言学习资源 Perl 教程|极客教程 (geek-docs.com) Perl [zh] (runebook.dev) Perl 运算符 | 菜鸟教程 (runoob.com) Perl Documentation - Perldoc Browser Search the CPAN - metacpan.org 当然还有一些经典书籍,不再列举。 1、数字 1.1、数字表…

判断QT程序是否重复运行

打开exe&#xff0c;再次打开进行提示。 main.cpp添加&#xff1a; #include "QtFilePreview.h" #include <QtWidgets/QApplication> #include <windows.h> #include <qmessagebox.h> #pragma execution_character_set("utf-8")bool Ch…

免费个人站 独立站 wordpress 自建网站

制作免费网站 | 免费网站构建器 | WordPress.com https://bioinformatics7.wordpress.com WordPress.com

【总线】设计fpga系统时,为什么要使用总线?

目录 为什么用总线 为什么选择AMBA 总结 系列文章 【总线】AMBA总线架构的发展历程-CSDN博客 【总线】设计fpga系统时&#xff0c;为什么要使用总线&#xff1f;-CSDN博客 【总线】AMBA总线家族的明星成员&#xff1a;AXI协议简介-CSDN博客 为什么用总线 在FPGA系统设计…

【Python安装教程】2024年最新版Python环境搭建及模块安装,保姆教程,手把手操作,不信你还不会!

前言 Python 可应用于多个平台&#xff0c;如 Windows 、 Linux 和 MacOS 。 如何检测电脑是否安装了Python&#xff1f; 按键盘winR键&#xff0c;打开运行框。输入CMD&#xff0c;回车确定。输入where Python后回车&#xff0c;如有安装则会显示Python的安装位置。如未安装…

原码、反码和补码

原码 原码是数字的二进制表示方式&#xff0c;由符号位和绝对值&#xff08;数值位&#xff09;构成。原码的第一位代表符号位&#xff08;0 代表正数&#xff0c;1 代表负数&#xff09;&#xff1b;第二位开始就是数字的绝对值。 反码 反码的表示方法区分正负数。 正数时…

欧洲杯德语词汇与表达,柯桥零基础德语培训

欧洲杯 - die Europameisterschaft 足球 - der Fuball 比赛 - das Spiel / die Partie 球员 - der Spieler 教练 - der Trainer 裁判 - der Schiedsrichter 球迷 - die Fans 进球 - das Tor 守门员 - der Torwart / der Torhter 前锋 - der Strmer 中场 - der Mittelf…

C语言经典指针运算笔试题图文解析

指针运算常常出现在面试题中&#xff0c;画图解决是最好的办法。 题目1&#xff1a; #include <stdio.h> int main() {int a[5] { 1, 2, 3, 4, 5 };int* ptr (int*)(&a 1);printf("%d,%d", *(a 1), *(ptr - 1));return 0; } //程序的结果是什么&…

安装包的方式安装哪吒agent被控端(黑群晖也一样)

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。 前言 前几天&#xff0c;收了台服务器&#xff0c;16核16G的&#xff0c;价格也不贵&#xff0c;之前我记得发过文章推荐过&#xff0c;这几天搞了搞&#xff0c;性能还不错&#xff0c;…

javaWeb项目-ssm+jsp学生请假系统功能介绍

本项目源码:java-ssm-jsp学生请假系统源码说明文档资料资源-CSDN文库 项目关键技术 开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&#xff1a;Vue、ElementUI 关键技术&#xff1a;springboot、SSM、vue、MYSQL…

文章MSM_metagenomics(一):介绍

介绍 欢迎大家关注全网生信学习者系列&#xff1a; WX公zhong号&#xff1a;生信学习者Xiao hong书&#xff1a;生信学习者知hu&#xff1a;生信学习者CDSN&#xff1a;生信学习者2 用于复现Huang et al. [huang2024establishment]研究分析的计算工作流程&#xff0c;所有复…

笨蛋学算法之LeetCodeHot100_1_两数之和(Java)

package com.lsy.leetcodehot100;public class _Hot1_两数之和 {//自写方法public static int[] twoSum1(int[] nums, int target) {//定义存放返回变量的数组int[] arr new int[2];//遍历整个数组for (int i 0; i < nums.length; i) {//从第二个数开始相加判断for (int j…