Transformer多模态领域挖坑之作:ViT模型详细讲解

为什么要做VIT?什么是VIT?

基于自注意机制的模型,例如Transformer已经成为NLP的范式,主要方法是在大规模语料库上训练,然后在小规模数据集上微调。

随着模型和数据集的增大,还没出现训练饱和的现象。

因此作者在ImageNet这种中型数据集上进行了训练,但是效果比同等大小的ResNet差了一点,作者认为主要原因是Transformer中没有inductive biases(归纳偏置,即一些先验知识),而Transformer要通过图片自己去学习知识,所以稍微逊色于传统的图像领域的网络是可以预见的。

inductive biases:

  • locality:即相邻的区域会有相邻的特征
  • Translation equivalence:不论先平移还是先卷积,最后计算结果都没有区别。

因此作者在更大的数据集上进行训练以后,也取得了非常好的结果。

相关工作

Transformer应用到CV领域的难点:

在NLP领域的Transformer是对句子的token进行操作,两两计算自注意力,复杂度是

在图像里像素点拉直的话序列长度过长,比如一般的图像处理224*224的图片就会变成50176长度的序列。因此CNN还是占据主流地位。

在讲自己的工作之前,肯定要说一下目前的idea是受到哪些工作的启发,所以论文中作者概述了一下CV领域利用自注意力的一些现有工作:

  1. 卷积神经网络和自注意力混合,例如CNN提取特征图之后,在特征图上进行计算自注意力。

  2. 全用自注意力

    1. stand-alone self-attention 对图像中的窗口做自注意力,也是像CNN一样一块一块取

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    1. Axial Attention [轴向注意力/通道注意力

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    对于H*W的图片在横向纵向上分别计算自注意力,即将2d拆分成两个1d的矩阵。

这些方法理论上非常高效,但是属于特殊自注意力计算方法,没有适配硬件加速,因此难成规模。

说了这么多,转回VIT上。为了使Transformer在视觉领域的迁移更为流畅,作者提出一种想法,将一张图片分割成不同的patch,将一个patch看做一个元素,而不是一个像素点看做一个元素。

举个例子,还是224*224,按照VIT中做法,按照16*16为一个patch,那图片就变成了14*14个patch的图片了。那处理序列的长度就变成了14*14=196,这样长度就大大缩减了。

也就是说之前是把一个像素当作一个元素处理,现在把一个patch作为一个元素处理,可以类比为NLP中一个单词作为一个元素处理。

VIT使用有监督的方式训练Transformer。不需要修改Transformer框架,就可以直接扩展到图像领域。

其实技术路线和《On the relationship between self attention and convolutional layers》一模一样,但是这篇文章只在CIFAR-10上做了实验,所以效果有限,而VIT是一个超级大数据集+神经网络+算力加持下的模型。因此这个文章也证明了,Transformer不需要经过修改,只要有足够大的数据集和足够的训练,一样能取得很好的效果。

此外还有一个iGPT也和这个文章的工作相似,用的是生成式模型,但是效果不如这个文章。

VIT是怎么做的?

Method部分作者强调了,延续Transformer在NLP领域的成功,不对其构架进行修改直接拿过来使用。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

接下来对着这个论文中的模型图在详细描述一下。

  1. 最左侧是将一个图分成了很多patches,通过FC层将其展开,作为一个序列。
  2. 分隔开的patches是有顺序的,所以这里也跟NLP中一样为其添加位置编码position embedding。
  3. 跟BERT一样,添加extra learnable embedding,也就是<cls>token作为分类头。
  4. 获取所有的Embedding之后的处理就是跟NLP领域一样了。
  5. MLP head就是分类头,使用MLP head 和 监督信息,使用交叉熵进行模型训练。

如果有空我会补充如何进行维度计算的。挖坑。

公式表述为下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Method3.1最后两部分作者是说了一下归纳偏置和混合模型构架的问题。

归纳偏置部分就是再次强调基于原始Transformer构架,几乎没有用到图片中的inductive bias这类先验知识,因此模型较小的时候变现不如CNN很正常。

混合模型构架部分是说,还可以考虑不分成patch,直接用CNN处理,拿最后的特征图丢进Transformer中。(其实还是和前人工作一样……悄咪咪说……

怎么微调?

VIT原文训练的时候是按照224*224的图片,16*16的patches划分的,那如果你图片增大的话,VIT微调就出现了问题。比如你把图片变成240*240,还是按照16*16的patch划分,那最后就是有15*15个patches,那序列长度就从194变为225了。处理方法是子啊原来的位置信息上进行插值处理即可。不过只是暂时性的解决方案,图片像素增加过多的时候插值处理效果会很差,这也是后续需要解决的一个问题。

VIT模型效果

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

也是对应Transformer做了不同大小的VIT。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

模型效果在各种数据集的表现也是吊打一切。

baseline中的BIT-L也在这些数据集上做过,所以拿来做对比。

baseline中的Noisy Student是在ImageNet上表现最好。

最后还列出了算力资源,表示训练2500天TPUv3的Vit-Huge真是经济实惠。

如何获得好用的VIT?

数据集大小


灰色部分是BiT网络(基于ResNet)的效果范围,最底下是ResNet50,顶上是ResNet152。

可以看到使用ImageNet数据集时候,ViT的效果是比不上BiT的,随着数据集增大到ImageNet-21k,ViT的表现已经在BiT表现的范围之内了。而继续增大数据集到JFT-300M,ViT可以实现对BiT的效果碾压,所以如果想训练一个好用的ViT,你至少要保证数据集的大小#能达到ImageNet-21k,要不然你还是用基于CNN的模型吧。

模型内在效果

在这里插入图片描述

因为训练过程中用了dropout.weight decay、label smoothing等。为了证明不是因为这些策略,而是Transformer本身的效果就很好,作者在不同规模的JFT-300M的子集上进行训练,对模型用ImageNet做5-shot,用这些模型特征抽取之后做Logistics Regression。

结果也可以看出训练集很小的时候,ViT效果是不如ResNet的,但是随着模型增大,ViT的表现逐渐超越ResNet,这证明了基于Transformer的模型效果确实就是好。另外作者也认为训练好的ViT更适合小样本任务。

多少算力

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

左侧是五个数据集都测试然后取平均值,右侧是只拿ImageNet测试。数据集都是在JFT-300M上训练的。

可以看到在同样的计算复杂度下,Transformer的表现都优于ResNet,所以证明了训练ViT是真的经济实惠好用。

有趣的是混合模型,也就是橙色的点,用CNN特征图作为Transformer输入的部分。可以看到计算复杂度低的时候,混合模型的效果是最好的,但是随着计算复杂度增加,混合模型逐渐和ViT持平。

我个人觉得是计算复杂度小的时候,CNN用到的先验信息inductive bias对模型效果做出了贡献,但是随着计算量的增大,Transformer从图片中捕获到了优于先验信息的知识。仅仅是个人观点。

模型学习效果

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者从模型角度可视化了一下。

最左边是对模型Embedding的效果可视化,可以看到抽取的特征和CNN抽取出来的是差不多的,所以作者认为RGB Embedding抽取出来的东西是有效的。

中间是对position Embedding进行可视化,越相关颜色越黄,可以看到最左上角的元素左上角的点最黄,中间的元素中心点最黄,由此表明位置编码确实是获得了对应的位置信息,并且也表明了为什么1D的位置编码就已经很有效了。

最右边的图是随着网络深度的加深,自注意力的平均距离。就是自注意力能关注到的像素点的距离。因为是多头自注意力,所以从最左边开始看,有的自注意力头关注的距离不足20像素,随着网络深度的加深,自注意力能关注到的距离越来越长。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最后是根据最后一层的注意力可视化原图,可以看到图像确实能注意到与标签相关的元素信息。

自监督训练

作者还想能不能模仿BERT,随机mask掉某些patches进行自监督训练。这个当然有更出名的MAE这个论文了。

消融实验

使用class token还是使用global average-pooling

  • 跟原始Transformer保持一致,使用class token:上边我们说了VIT使用了<cls>token,因为每个token embedding之间都会交互信息,因此作者认为<cls>token学习到了整个图片的特征 ,也就是直接使用<cls>token即可。
  • 但是原始的图像处理中,最后一步是对特征图做全局平均池化作为最后的图像特征。所以我们也可以对Transformer序列中的每个patch进行全局平均池化来作为最后的输出结果。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

消融实验结果如图,不调参时候GAP表现也就那样,调参以后效果很好,但是同等条件下的CLS表现也一样能打。所以用哪个都一样,最终为了保持原始的Transformer,作者采用了CLS方法。

使用1D位置编码还是2D位置编码或者相对位置编码

  • 1D位置编码就是普通的Transformer的位置编码
  • 但是作者考虑到图像是2D的,所以要不要使用2D位置编码
  • 捎带着测试了一下相对位置编码。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最后结果表明,不加位置编码时候61,加了三种位置编码64,三种变现大差不差,还是为了保持原始的Transformer,作者最终选择继续使用1D的位置编码。

这两个消融实验证明不需要任何的trick或者图像领域的适配,Transformer就可以很好地完成图像领域的工作。

结论

效果就不用多少了,存在什么工作方向呢?

  1. 不能只做分类,还有其他工作啊,比如目标检测啊、图像分割啊等等。
  2. 使用自监督的训练方式。虽然作者做了一些尝试,但是和有监督训练还是差很远。
  3. 做大做强取得更好的结果。

读者福利:如果大家对大模型感兴趣,这套大模型学习资料一定对你有用

对于0基础小白入门:

如果你是零基础小白,想快速入门大模型是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。

包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓
在这里插入图片描述

👉AI大模型学习路线汇总👈

大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

👉大模型实战案例👈

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉大模型视频和PDF合集👈

观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述
在这里插入图片描述

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉获取方式:

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值