摘要:针对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、模型自身无奈编码地位:那就须要各种各样的地位编码,以下列出了一些地位编码,有固定的与可学习的,有相对的和绝对的,还有利用卷积的个性应用卷积去作为地位编码的。
具体可见下表
上述改良点相干论文大家能够查下表:
点击关注,第一工夫理解华为云陈腐技术~