ViT和MAE模型结合初探
介绍
transfomer在NLP领域的应用已经非常广泛,但是在CV领域的应用还比较少,主要是因为CV领域的数据是二维的,而transfomer是基于序列的,因此需要将二维数据转换成序列数据,这就是ViT的由来。ViT是将图像分割成一个个patch,然后将patch展开成序列,再输入到transformer中,这样就可以将transformer应用到CV领域了。然而transformer相比于CNN缺少一个平移不变性,因此Transformer需要在模型中学习到这个归纳偏差(inductive bias),因此需要更多的数据来训练Transformer模型,来达到相同的性能。在ViT论文中,作者在使用相同的ImageNet-1k的数据集时,性能相比于当时的baseline模型还要差1~2百分点,当在更大的数据集上ImageNet-100k上训练时,ViT的性能已经能够媲美CNN的SOTA了,当在谷歌的大规模数据集JFT-300M上训练时,ViT的性能已经超过了CNN的SOTA了。因此,ViT的性能与数据集的大小是正相关的,这也是ViT的一个缺点,因为ViT的训练需要更多的数据,而且训练时间也会更长。
具有标记的数据往往相比于无标记的数据集更难以获取,并且获取的成本也要远远高于无标记数据集。因此,基于无标记数据的无监督学习成为了目前备受关注的研究方向。目前无监督学习方向主要分为两大类:对比学习和掩码学习。
- 对比学习通过设置正样本和负样本,正负样本通过模型得到各自的特征,设定loss使得特征的相似度越低越好;这使得模型能够通过关注正负样本的差别来学习到深层的表示,不同领域的对比学习设定正负样本的规则也不同,在分类任务中可以将和当前样本一致的数据视为正样本,不一致的视为负样本。
- 掩码学习通过将输入数据的一部分掩盖,然后让模型去预测掩盖的部分,这样模型就能够学习到输入数据的一些特征;掩码学习不经用于CV,也用于NLP等众多领域,如BERT、GPT等。在CV领域目前比较流行的掩码学习模型为MAE(Masked AutoEncoder)、SIMM。
无监督学习能够通过大量无标记的数据学习到数据的深层表示,而同时ViT需要大量的数据。一个很自然的想法是将ViT和MAE等无监督学习的模型结合起来,通过无监督学习得到的backbone来指导ViT的训练,从而减少ViT的训练数据,并且帮助ViT学习到更加深层的表示。
主要方法
- 直接将MAE的训练得到的模型作为ViT的backbone,然后在ViT的训练中进行微调。从头训练一个MAE显然对于我来说是不显示的,MEA的模型可以从网上下载,由于MAE训练的模型已经取得了很好的效果,显然它已经学习到了诸如平移不变性等CNN和图像等众多的性质,因此直接在MAE得到的模型上做ViT的微调,获取可以继承MAE的性质,同时又能够学习到特定领域的特征。
- 使用知识蒸馏的方法,将MAE的模型作为teacher模型,ViT作为student模型,通过知识蒸馏的方法来训练ViT。知识蒸馏的方法是将teacher模型的输出作为student模型的标签,通过最小化student模型的输出和teacher模型的输出的差异来训练student模型。知识蒸馏的方法可以帮助student模型学习到teacher模型的知识,从而达到和teacher模型相近的性能。和ViT一同发表的另一篇DeiT模型描述了使用知识蒸馏的方法,使用CNN作为teacher模型,transformer作为stduent模型,可以训练一个性能相比于CNN更好的模型。这说明CNN作为teacher模型,它可以传送关于一些平移不变性的归纳偏差给transformer模型,从而帮助transformer模型学习到更好的表示。因此,我们可以使用MAE作为teacher模型,ViT作为student模型,通过知识蒸馏的方法来训练ViT,从而帮助ViT学习到更好的表示。因为,我们也认为MAE已经学习到了一些关于平移不变性的归纳偏差,因此可以帮助ViT学习到更好的表示。
实验设计
由于算力的原因,我采取了一些折衷的处理方式:
- 无法从头训练一个MAE模型,因此我直接从transformer的社区获得了一个MAE模型,这个模型是在ImageNet-1k上训练的,所以为了避免我训练的数据已经在Image-1k上,我使用了人脸作为训练数据,ImageNet-1k中并不存在大量的人脸数据.
- 在知识蒸馏中,无法从头开始进行蒸馏,学习到一个新的模型,因此我只观察了一段时间的蒸馏过程,主要是观察蒸馏过程中的loss变化。
对于方法1,测试了多种不同的微调和迁移方式,例如只迁移Patch_embedding, + transformer_block.只对FC进行微调,只对Block进行微调,和全部一起训练。
对于方法2,观察相同training配置下的loss的变化情况,和ViT训练的loss情况进行对比。
为了节省显存,加快训练速度,采用了目前较为流行的fp16的压缩模型的方式,即将模型的参数转换成fp16的数据类型,这样可以减少显存的占用,加快训练速度。但是,这样也会带来一些问题,例如在使用fp16的情况下,模型的参数的梯度会变得非常小,因此需要对梯度进行放大,这样会导致梯度爆炸的问题,因此需要对梯度进行裁剪,这样会导致模型的收敛速度变慢。因此,我在训练过程中,对梯度进行了裁剪,裁剪的阈值为1.0。
实验结论
通过掩码学习得到的ViT模型是可以作为ViT的预训练模型,并且,只移植PatchEmbedding相比于只移植TransformerBlock,效果更好。这个原因可能是因为PatchEmbedding是是确定位置编码的,在ViT中使用的是可学习的PositionEmbedding,在ViT论文中,作者画出的Patch Embedding图像也能够索命PM层包含了模型的位置编码信息。
通过知识蒸馏的方法,ViT的loss下降的更快,这表明MAE确实将一些关于平移不变性的归纳偏差传递给了ViT,从而帮助ViT学习到更好的表示。为了进一步说明通过MAE进行知识蒸馏能够使得ViT更快理解平移不变性,将PM层的参数通过ViT的方法展示出来,可以证明ViT确实理解了平移不变性,PM层更类似最终的ViT的PM层。我们并没有完整的通过类似于DeiT一样训练一个ViT,知识观察了Loss曲线,并取出了训练过程中的部分层参数进行分析,所以对于最终的结果的性能还需要进一步的分析。
附录
本实验采用了ViT-T的模型结构;详细的结构可以参看ViT论文。
知识蒸馏:采用了类似DeiT的令牌来进行知识的传递,相比于传统的通过最小化模型输出的特征方式,这种方式能够在模型的每一层都进行知识传递,从而更好的帮助模型学习到更好的表示,而不仅仅是在最后一层通过梯度反向传播。
MAE的模型结构:采用了MAE的模型结构,详细的结构可以参看MAE论文。
ViT和MAE模型结合初探的更多相关文章
- Generative Pre-trained Transformer(GPT)模型技术初探
一.Transformer模型 2017年,Google在论文 Attention is All you need 中提出了 Transformer 模型,其使用 Self-Attention 结构取 ...
- CSS3盒模型display初探(display:box/display:flex)
可以实现水平等分切割等.日后在研究,做个记录. 首先要声明:display:box,像谷歌浏览器要加前缀识别码:display:-webkit-box; 然后才开始使用其属性,同时也是要带上前缀识别码 ...
- Kakao Brain 的开源 ViT、ALIGN 和 COYO 文字-图片数据集
最近 Kakao Brain 在 Hugging Face 发布了一个全新的开源图像文本数据集 COYO,包含 7 亿对图像和文本,并训练了两个新的视觉语言模型 ViT 和 ALIGN ViT 和 A ...
- 大型网站演化(转载 http://homeway.me/2014/12/10/think-about-distributed-clusters/)
0x01.大型网站演化 简单说,分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率. 集群主要分为:高可用集群(High Availability Clu ...
- [转]基于WorldWind平台的建筑信息模型在GIS中的应用
1 引言 随着BIM(Building Information Modeling)的不断发展,建筑信息建模的理念贯穿着建筑.结构.施工.运行维护以及拆迁再规划的整个建筑的生命周期,这种理念不仅使得 ...
- [Feature] Final pipeline: custom transformers
有视频:https://www.youtube.com/watch?v=BFaadIqWlAg 有代码:https://github.com/jem1031/pandas-pipelines-cust ...
- 图灵,咕泡,鲁班学院--Java高级架构师-互联网企业级实战VIP课程(价值6380)
课程介绍: 讲课内容涉及Java互联网技术工程框架.应用框架. 性能调优 (Tomcat Nginx JVM) 分布式框架(并发编程 Zookeeper N ...
- ICCV2021 | 重新思考视觉transformers的空间维度
论文:Rethinking Spatial Dimensions of Vision Transformers 代码:https://github.com/naver-ai/pit 获取:在CV技 ...
- EdgeFormer: 向视觉 Transformer 学习,构建一个比 MobileViT 更好更快的卷积网络
前言 本文主要探究了轻量模型的设计.通过使用 Vision Transformer 的优势来改进卷积网络,从而获得更好的性能. 欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结.最新技术跟 ...
- Unity3D游戏开发初探—2.初步了解3D模型基础
一.什么是3D模型? 1.1 3D模型概述 简而言之,3D模型就是三维的.立体的模型,D是英文Dimensions的缩写. 3D模型也可以说是用3Ds MAX建造的立体模型,包括各种建筑.人物.植被. ...
随机推荐
- golang 所有关键字的列表及释义归类
golang 所有关键字的列表及释义归类,截至1.18版本. [控制结构] if : 条件语句,基于布尔表达式的值决定是否执行特定的代码块. else. else if : 用在 if 语句 ...
- 结构型模式(Structural Pattern)
模式介绍 结构型模式(Structural Pattern)的主要目的就是将不同的类和对象组合在一起,形成更大或者更复杂的结构体.该模式并不是简单地将这些类或对象摆放在一起,而是要提供它们之间的关联方 ...
- Primer Premier 6安装使用教程
Primer Premier是一款专业级PCR引物设计工具软件,专为科研及分子生物学实验定制PCR扩增.测序探针及杂交引物.该程序运用尖端演算法评估引物的特异性.二聚体可能性和熔解温度等核心属性,确保 ...
- MySQL常见的后端面试题,你会几道?
为什么分库分表 单表数据量过大,会出现慢查询,所以需要水平分表 可以把低频.高频的字段分开为多个表,低频的表作为附加表,且逻辑更加清晰,性能更优 随着系统的业务模块的增多,放到单库会增加其复杂度,逻辑 ...
- SpringBoot 过滤器更改 Request body ,并实现数据解密
客户端.服务端网络通信,为了安全,会对报文数据进行加解密操作. 在SpringBoot项目中,最好使用参考AOP思想,加解密与Controller业务逻辑解耦,互不影响. 以解密为例:需要在reque ...
- Linux特殊权限之SUID,SGID
SUID定义 暂时借用属主身份运行二进制程序.(SGID则是借用属组) 应用场景 某些用户在运行二进制程序的过程中,没有权限访问此二进制程序中其他的一些文件.给此用户过高的权限又不安全. 比如,每个用 ...
- Freertos学习:07-队列
--- title: rtos-freertos-07-队列 EntryName : rtos-freertos-07 date: 2020-06-23 09:43:28 categories: ta ...
- 如何解决jenkins插件下载过慢的问题
1.修改/var/lib/jenkins/updates目录下的default.json文件 通过sed命令将插件的下载地址替换成国内的地址: sed -i 's#http:\/\/updates.j ...
- 结合RNN与Transformer双重优点,深度解析大语言模型RWKV
本文分享自华为云社区<[云驻共创]昇思MindSpore技术公开课 RWKV 模型架构深度解析>,作者:Freedom123. 一.前言 Transformer模型作为一种革命性的神经网络 ...
- 在缩小浏览器宽度的时候,图片会超出li的宽度
要确保在缩小浏览器宽度时,图片不会超出 <li> 元素的宽度,您可以为描述文本添加一些样式,以便让图片适应于 <li> 元素.一种常见的方法是使用 CSS 中的 max-wid ...