带你读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、模型本身无法编码位置:那就需要各种各样的位置编码,以下列出了一些位置编码,有固定的与可学习的,有绝对的和相对的,还有利用卷积的特性使用卷积去作为位置编码的。
具体可见下表
上述改进点相关论文大家可以查下表:
带你读Paper丨分析ViT尚存问题和相对应的解决方案的更多相关文章
- 读paper笔记[Learning to rank]
读paper笔记[Learning to rank] by Jiawang 选读paper: [1] Ranking by calibrated AdaBoost, R. Busa-Fekete, B ...
- 分享两个网址,一个是使用mssql自带的跟踪工具和分析工具
http://www.cnblogs.com/Fooo/archive/2013/02/19/2916789.html 使用mssql自带的跟踪工具和分析工具 http://blog.csdn.net ...
- 少啰嗦!一分钟带你读懂Java的NIO和经典IO的区别
1.引言 很多初涉网络编程的程序员,在研究Java NIO(即异步IO)和经典IO(也就是常说的阻塞式IO)的API时,很快就会发现一个问题:我什么时候应该使用经典IO,什么时候应该使用NIO? 在本 ...
- 读《PMI 分析手册》
目录 读<PMI 分析手册> 官方 PMI 基本概况 官方制造业 PMI 官方非制造业 PMI 综合 PMI 产出指数 PMI 分析框架 PMI 与经济周期 官方 PMI 分析 参考研报 ...
- 一文带你读懂什么是vxlan网络
一个执着于技术的公众号 一.背景 随着云计算.虚拟化相关技术的发展,传统网络无法满足大规模.灵活性要求高的云数据中心的要求,于是便有了overlay网络的概念.overlay网络中被广泛应用的就是vx ...
- 实战 | 一文带你读懂Nginx反向代理
一个执着于技术的公众号 前言 在前面的章节中,我们已经学习了nginx基础知识: 给小白的 Nginx 10分钟入门指南 Nginx编译安装及常用命令 完全卸载nginx的详细步骤 Nginx 配置文 ...
- 一篇文章带您读懂List集合(源码分析)
今天要分享的Java集合是List,主要是针对它的常见实现类ArrayList进行讲解 内容目录 什么是List核心方法源码剖析1.文档注释2.构造方法3.add()3.remove()如何提升Arr ...
- 一篇文章带您读懂Map集合(源码分析)
今天要分享的Java集合是Map,主要是针对它的常见实现类HashMap进行讲解(jdk1.8) 什么是Map核心方法源码剖析1.文档注释2.成员变量3.构造方法4.put()5.get() 什么是M ...
- 带你读AI论文丨用于目标检测的高斯检测框与ProbIoU
摘要:本文解读了<Gaussian Bounding Boxes and Probabilistic Intersection-over-Union for Object Detection&g ...
随机推荐
- Ztree 树插件 树节点名称太长的解决方案
样式允许的情况下 给背景div加滚动条.. 或者使用省略号方法:使用addDiyDom http://blog.csdn.net/zhengbo0/article/details/17759543 ...
- n个容器取油问题再探
在 韩信分油问题的拓展分析 里,最后给出了一般性的结论,即: 用 n (n > 1) 个不规则无刻度的容器从一个无穷大的油桶里取油,这些容器容量都为整数升,分别记为 a1, a2, ..., a ...
- 两种github action 打包.Net Core 项目docker镜像推送到阿里云镜像仓库
两种github action 打包.Net Core 项目docker镜像推送到阿里云镜像仓库 1.GitHub Actions 是什么? 大家知道,持续集成由很多操作组成,比如抓取代码.运行测试. ...
- Leaflet 操作OSM(OpenStreetMap) 设置地图style
Leaflet是一个开源的地图操作库,其中mapbox是其一个插件,这个插件可以自定义想要的地图格式.https://www.mapbox.com/mapbox-gl-js/api/这是其官网地址. ...
- tomcat配置启动不了
关于ideatomcat配置问题 1.第一步配置tomcat启动器 2.配置启动的网址 3.配置启动器的启动 ---更多java学习,请见本人小博客:https://zhangjzm.gitee.io ...
- Kubernetes 持久化数据存储 StorageClass
文章链接 PV 和 PVC 模式要先创建好 PV,然后再定义好 PVC 进行一对一的绑定.那么如果遇到大集群,也一一的创建吗?这样来说维护成本很高,工作量大.这个时候就有了 Kubernetes 提供 ...
- 如何实现 Android 短视频跨页面的流畅续播?
在一切皆可视频化的今天,短视频内容作为移动端产品新的促活点,受到了越来越多的重视与投入,同时短视频也是增加用户粘性.增加用户停留时长的一把利器.那么如何快速实现移动端短视频功能呢?前两篇我们介绍了盒马 ...
- NOIP模拟22「d·e·f」
T1:d 枚举. 现在都不敢随便打枚举了. 实际上我们只关注最后留下的矩阵中最小的长与宽即可. 所以我们将所有矩阵按a的降序排列. 从第\(n-m\)个开始枚举. 因为你最多拿 ...
- Spring中使用@within与@target的一些区别
目录 背景 模拟项目例子 看看使用@within和@target的区别 @within @target @target 看起来跟合理一点 通知方法中注解参数的值为什么是不一样的 想用@within,但 ...
- GridControl常用操作
显示分组面板 gridView1.OptionsView.ShowGroupPanel = true; 是否开启多选 gridView1.OptionsSelection.MultiSelect = ...