搞懂Transformer系列(二十五):关于视觉 Transformer 应该知道的3件事
共 4416字,需浏览 9分钟
· 2022-07-05
![](https://filescdn.proginn.com/9516d8341607edff5febfae65e3f18aa/ad4cdc0f1cdca2a0c8b94333b8caa072.webp)
极市导读
虽然目前视觉 Transformer 已经在多种视觉任务上取得了相当大的进步,但对其架构设计和训练过程优化的探索仍然十分有限。本文提供了3个关于训练视觉 Transformer 的建议。 >>加入极市CV技术交流群,走在计算机视觉的最前沿
本文目录
45 关于视觉 Transformer 你应该知道的3件事
(来自 Meta AI,DeiT 一作团队)
45.1 论文解读
Transformer 是 Google 的团队在 2017 年提出的一种 NLP 经典模型,现在比较火热的 Bert 也是基于 Transformer。Transformer 模型使用了 Self-Attention 机制,不采用 RNN 的顺序结构,使得模型可以并行化训练,而且能够拥有全局信息。
虽然视觉 Transformer 已经在多种视觉任务上取得了相当大的进步,但对其架构设计和训练过程优化的探索仍然十分有限。本文提供了3个关于训练视觉 Transformer 的建议。
45 关于视觉 Transformer 你应该知道的3件事
![](https://filescdn.proginn.com/0ba7156ec2ae409daaaf5208fe3b6455/de47c2d43babfac0264f52031f149d72.webp)
论文名称:Three things everyone should know about Vision Transformers
论文地址:
https://arxiv.org/pdf/2203.09795.pdf
45.1 论文解读:
虽然视觉 Transformer 已经在多种视觉任务上取得了相当大的进步,但对其架构设计和训练过程优化的探索仍然十分有限。本文提供了3个关于训练视觉 Transformer 的建议。
建议1:通过并行的视觉 Transformer 实现更低的延时
更浅的网络架构容易实现更低的延时和更加容易的优化。用 MHSA 表示多头自注意力块,用 FFN 表示残差前馈网络。如下图1所示,作者重新以成对的形式组织模型的架构,这产生了更宽更浅的架构,每个并行的块拥有相同的参数量和计算量。这种设计允许更多的并行处理,可以实现更低的延时和更加容易的优化。
![](https://filescdn.proginn.com/e9dc83a7006d9564ed56dea9a86266ad/2a770e286bdd7d9b74cbd26b6a03f13a.webp)
建议2:只微调 Attention 即可实现良好的迁移性能
迁移学习的标准方法一般是先对模型做预训练,再迁移到目标任务上面。这种情况适用于目标任务的数据集大小受限时,也适用于目标任务和预训练任务的分辨率不一样时。一般来说,训练的分辨率要比推理时使用的分辨率低。这不仅节省了资源,还减少了由于 Data Augmentation 所导致的训练和测试图像之间的比例差异。作者在本文中表明,在大多数 ViT 的迁移学习情况下,仅 MHSA 层并冻结 FFN 层的参数就足够了,这可以节省计算量并减少训练期间的内存峰值 (memory peak),且不会影响精度。
建议3:改进 ViT 的 Patch 预处理层以更好地适配基于 MIM 的自监督学习
Transformer 的第1层一般感受野比较小。通过 Convolutional Stem 处理输入图片有利于训练的稳定。然而,用卷积预处理图像与基于 MIM 的自监督学习方法 (如 BeiT[1],MAE[2] 等) 不兼容。为了和 MIM 的自监督学习方法相适应,作者在本文中提出了一种 patch pre-processing 的做法。
实验过程
首先作者跑了一些 Baseline 的实验结果,如下图2所示。分辨率均为 224×224,LS 代表 Layer Scale。学习率设置为:ViT-Ti 和 ViT-S 为 4e-3,ViT-B 和 ViT-L 为 3e-3。
![](https://filescdn.proginn.com/f3bc5584a740efe32ae2cdcc82a456e4/335cc473daee31d63fad4300c05156ce.webp)
实验探索1:通过并行的视觉 Transformer 实现更低的延时
在 ViT 模型里面,复杂性度量受到宽度和深度的影响。忽略一开始的图像分块操作和最终的分类头,因其对复杂性的影响可以忽略不计,则有:
ViT 模型的参数量和网络的深度成正比关系,和宽度成二次方关系。
ViT 模型的计算量和网络的深度成正比关系,和宽度成二次方关系。
ViT 推理时的显存峰值不随深度的改变而改变,但是和宽度成二次方关系。
更宽的架构的延时在理论上更好,因为更加并行化,但实际的加速取决于实现和硬件。
作者首先做的实验是把下式1所示的串行结构变为2式的并行结构:
下图1是分支数对于 ViT 性能的影响。对于不论是 Small 模型还是 Base 模型,使用2个并行分支可以获得最佳性能。ViT-S60 的 S20×3 和 S30×2 之间的性能相当。
![](https://filescdn.proginn.com/2c07455b4347660b1e1bc60d78651bfd/47b86fab2de576f40d885d1ba0693bfa.webp)
下图2是不同尺寸大小的模型采用顺序结构和并行结构的性能对比。对于不论是 Small 模型还是 Base 模型,使用2个并行分支可以获得最佳性能。ViT-S60 的 S20×3 和 S30×2 之间的性能相当。实验的观察与先前的发现一致:ViT 模型采用并行版本对于更难优化的更深和更高容量的模型有帮助,本文提出的的并行化方案使得深层 ViT 的训练更加容易。
![](https://filescdn.proginn.com/b896520e818dc30ecd807d3767fb13ce/0244e40bd25be8c051347ec294f3f7d3.webp)
下图3是不同尺寸大小的模型采用顺序结构和并行结构的处理速度对比。在 V100 GPUs 上,作者观察到单样本处理的速度明显加快,但是当 Batch Size 变得比较大时,处理的速度没有提升。
![](https://filescdn.proginn.com/800768a92234deb5aa81e8a777638f01/423620d769e442422819dc4a940e4056.webp)
实验探索2:只微调 Attention 即可实现良好的迁移性能
本节中作者重点关注 ViT 模型的微调,以使模型适应更高的图像分辨率,或者解决不同的下游分类任务。具体来说,考虑一种方法,其中仅微调 MHSA 层的权重,如下图4所示。作者从预测的准确性,峰值内存的使用和参数量方面分析了这么做带来的影响。
如下图4所示是作者在 384×384 分辨率下微调了在 224×224 分辨率下预训练ViT-S、ViT-B 和 ViT-L 模型的结果。可以看到无论是在 ImageNet-val 还是 ImageNet-V2 上,单独微调 MHSA 层权重的结果和微调全部权重的结果相差很小。但是只微调 FFN 层时,结果相差较大。
![](https://filescdn.proginn.com/261ae5cd909656038100d7e7cd3c6264/3d8a6a0d3cb396fc6bcafa5e2db9ed45.webp)
与微调所有参数相比,在高分辨率下微调 MHSA 参数的优势是:可以在参数,延迟和峰值内存使用方面获得大量的节约,如下图5所示。微调 MHSA 在 GPU 上可以节约 10% 的内存,这在高分辨率微调需要更多内存的情况中特别有用。此外训练速度也提高了 10%,因为计算的梯度更少了。最后,MHSA 的权重大约相当于权重的三分之一。因此,如果想要使用针对不同输入分辨率进行微调的多个模型,我们可以为每个额外的模型节省 66% 的存储空间。
![](https://filescdn.proginn.com/3c3f70f4498e388e3294b8957f419db5/397d2d96e13ed9c074a7c4408a23002f.webp)
实验探索3:改进 ViT 的 Patch 预处理层以更好地适配基于 MIM 的自监督学习
传统的 ViT 模型通过卷积头进行输入图片的预处理 (分块) 操作,通常称之为 Convolutional Stem。虽然这些预处理设计能够提高准确性或稳定性,但是仍然存在一些问题。比如,Patch 预处理层如何去更好地适配基于 MIM 的自监督学习,比如 BEiT 的范式。
在这部分中,作者设计了一种 hierarchical MLP (hMLP) stem,即分层 MLP 预处理范式,如下图6所示。第一次把图片分成 4×4 大小的 Patch,再经过两次合并 2×2 的区域,最终把 224×224 大小的图片变换成 14×14 的特征。可以看到每个 16×16 大小的图像 Patch 是独立处理的
![](https://filescdn.proginn.com/85ff1430b785cb270870a4b4845160ec/4e8d293b98b05f4765c49433239fc1e6.webp)
hMLP 的具体实现如下图7所示。Linear 操作具体都是使用卷积来实现,三个卷积的参数分别是: 。
![](https://filescdn.proginn.com/a955d16f15e496d7295bed32f1009aec/5208c9048b9802324df321e3e6380213.webp)
hMLP 的一个好处是:这样的方式处理图片的话,图片的各个 Patch 之间是互不关联的。换言之,不同的 Patch 之间就存在信息交互,也就和原来的 ViT 不是完全等价。而且,hMLP 的设计没有显著增加计算需求。比如,ViT-B 需要的 FLOPs 仅仅为 17.73 GFLOPs。与使用通常的线性投影相比,只增加了不到 1% 的计算量。
作者在下图8中比较了几种 Stem 在有监督学习任务和 BEiT 的自监督式学习任务上的性能。hMLP 也都实现了更好的精度-计算量均衡。
![](https://filescdn.proginn.com/716aea44e4f640935bdbece1868377b4/8f64dc47ed4ed6da85442229bd7f2569.webp)
总结
本文介绍了 ViT 的3个不同主题。首先是一种简单而有效的并行化方法,能够节约推理延时。其二是在做迁移学习任务时,仅仅微调 MHSA 的参数就能获得不错的性能,同时节约训练的内存占用。最后是一种图片分块的方式:hMLP,它可以很好地适配于基于 MIM 的自监督学习方法,使得不同的 Patch 之间信息不相互关联。
参考
^BEiT: BERT pre-training of image transformers ^Masked autoencoders are scalable vision learners
公众号后台回复“数据集”获取90+深度学习数据集下载~
![](https://filescdn.proginn.com/d3795eb9796bf382f37b49dd3aa4ce20/d1e877c395384740573753ee23a8140b.webp)
# 极市平台签约作者#
科技猛兽
知乎:科技猛兽
清华大学自动化系19级硕士
研究领域:AI边缘计算 (Efficient AI with Tiny Resource):专注模型压缩,搜索,量化,加速,加法网络,以及它们与其他任务的结合,更好地服务于端侧设备。
作品精选
![](https://filescdn.proginn.com/05cbe2b1882d866b1c315ccb0de651de/cd7c4adc692031da70004a501398ba30.webp)