摘要: 针对 ViT 现状,剖析 ViT 尚存问题和绝对应的解决方案,和相干论文 idea 汇总。
本文分享自华为云社区《【ViT】目前 Vision Transformer 遇到的问题和克服办法的相干论文汇总》,作者:苏道。
首先来看 ViT 始祖级论文:
An image is worth 16×16 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、模型自身无奈编码地位: 那就须要各种各样的地位编码,以下列出了一些地位编码,有固定的与可学习的,有相对的和绝对的,还有利用卷积的个性应用卷积去作为地位编码的。
具体可见下表
上述改良点相干论文大家能够查下表:
点击关注,第一工夫理解华为云陈腐技术~