写点什么

带你读 Paper 丨分析 ViT 尚存问题和相对应的解决方案

发布于: 刚刚

摘要:针对 ViT 现状,分析 ViT 尚存问题和相对应的解决方案,和相关论文 idea 汇总。


本文分享自华为云社区《【ViT】目前Vision Transformer遇到的问题和克服方法的相关论文汇总》,作者:苏道 。

首先来看 ViT 始祖级论文:


An image is worth 16x16 words: Transformers for image recognition at scale

论文地址:https://arxiv.org/abs/2010.11929

他使用全 Transformer 结构,将图像区域划分为一个个小方块作为 Patch 作为输入。左图是 ViT 的总体架构,右边是 Transformer Encoder 中每个 Block 的外形。我们可以看到,他基本就是原始 Transformer 的结构,除了他把 norm 放在前面,有文章表明 norm 放在前面更加容易训练一点。


使用 Transformer 可以在每一层都得到图片的全局信息,但是他也不是十全十美的,他有以下的这些缺点:


1、数据需求量大: Self-Attention 归纳偏置能力较 CNN 弱。归纳偏置怎么说呢,就是模型对没遇到的数据做的一些假设,CNN 具有空间不变性的假设,所以他可以用一个权重去滑窗处理整个特征图,而 RNN 具有时间不变性的假设。但是 Self-Attetnion 没有这些假设,所以他需要更多的数据去自动学习到这些假设,但是这样有一个好处就是可能学到的假设会更灵活一些。


那针对这个问题,我们可以使用一个 CNN 网络作为 Teacher 网络,添加蒸馏损失去帮助他学习。


Patch Embedding 本质是一个卷积核与滑动步长都为 Patch size 的大卷积和,想 Vit 为 16 的卷积核,那肯定是不够稳定的,所以后来的一些研究会使用几个卷积与池化相结合或者干脆前几个 block 是残差块的方式来代替。


2、计算量大:计算复杂度与 token 的平方相关,如果输入特征图为 56*56 的特征图,那么会涉及 3000+长宽的矩阵运算,计算量很大,同时在原始 Transformer 计算过程中 token 数以及 hidden size 保持不变,所以后来的研究者采用了几个方法是解决计算量大的问题。参考 resnet 结构使用金字塔的结构,越高层的 token 数量越少;使用局部窗口 sa,分别考虑特征图的一部分做 sa,再想办法把这些局部信息进行交互;使用卷积来代替 fc,以减少参数;在生成 Q,K,V 过程中,对 K,V 的特征图或者是 token 做池化,减少计算复杂度。


3、堆叠层数数量受限:存在过度平滑问题,不同的 Block 之间的相似性随着模型的加深而增加;不同 token 之间的相似性随着随着模型的加深而增加。解决方法主要是增大 hidden size,不过这个方法参数增加量也会很大;在注意力图 softmex 前后,在 head 维度进行线性变换以增加信息交互,增加注意力图的多样性;在深层 dropout 增大以增加特征的多样性;或者增加相似度惩罚损失项。


4、模型本身无法编码位置:那就需要各种各样的位置编码,以下列出了一些位置编码,有固定的与可学习的,有绝对的和相对的,还有利用卷积的特性使用卷积去作为位置编码的。


具体可见下表

上述改进点相关论文大家可以查下表:



点击关注,第一时间了解华为云新鲜技术~

发布于: 刚刚阅读数: 3
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
带你读Paper丨分析ViT尚存问题和相对应的解决方案