可以这么认为。

如图1,今天在使用self-attention去处理一张图片的时候,1的那个pixel产生query,其他的各个pixel产生key。在做inner-product的时候,考虑的不是一个小的范围,而是一整张图片。

但是在做CNN的时候是只考虑感受野红框里面的资讯,而不是图片的全局信息。所以CNN可以看作是一种简化版本的self-attention。

或者可以反过来说,self-attention是一种复杂化的CNN,在做CNN的时候是只考虑感受野红框里面的资讯,而感受野的范围和大小是由人决定的。但是self-attention由attention找到相关的pixel,就好像是感受野的范围和大小是自动被学出来的,所以CNN可以看做是self-attention的特例,如图2所示。

图1:CNN考虑感受野范围,而self-attention考虑的不是一个小的范围,而是一整张图片

图2:CNN可以看做是self-attention的特例

既然self-attention是更广义的CNN,则这个模型更加flexible。而我们认为,一个模型越flexible,训练它所需要的数据量就越多,所以在训练self-attention模型时就需要更多的数据,这一点在论文 ViT 中有印证,它需要的数据集是有3亿张图片的私有数据集 JFT-300,性能超越了CNN。而如果不使用这么多数据而只使用ImageNet,则性能不如CNN。


2021.4.9 update

有幸与华为深圳语音语义实验室的NLP领域权威专家侯老师交流。老师提供了一种新的观点,个人觉得很有用,特此更新如下:

Self-attention的attention map其实是随着样本的变化而不断变化的,所以从这个意义上它可以看做是instance-wise的一个网络。那么attention map与value矩阵作用就相当于是矩阵乘法,也就相当于是value通过一层FFN,只是这个FFN的参数是动态变化的。所以这个意义上也可以看做是一种更广义的CNN。

总结

上面这个回答的意思是说:CNN是一种很特殊的Self-attention,它总是通过local receptive fields, shared weights, spatial subsampling等等的操作,考虑一张图片的空间上相邻的那些信息 (spatially neighboring pixels)。而正好这些信息是高度相关的 (highly correlated)。可是,基于Transformer的ViT模型就没有这种特性了,所以需要更多的数据来训练,这是第1个property。

另1个property是CNN的hierarchical structure可以考虑不同level的信息,不论是low-level的边缘特征还是high-level的语义特征。

那么一个自然而然的问题是:可否把CNN融入Transformer中,使得Transformer也具有CNN的这些适合图片的property呢?

其实从理论上来讲完全没必要这么做,因为从图2我们就知道Self-attention就是一种更复杂,更广泛的CNN。但是问题是要想把ViT训练得和CNN一样好需要很多的图片,甚至是JFT-300这样的私有数据集。所以,将CNN融入Transformer中的目的就是节约数据集。

以上就是CvT这个工作的motivation。(Vision Transformer 超详细解读 (原理分析+代码解读) (六) - 知乎本系列已授权极市平台,未经允许不得二次转载,如有需要请私信作者。考虑到每篇文章字数的限制, 每一篇文章将按照目录的编排包含两到三个小节,而且这个系列会随着Vision Transformer的发展而长期更新。专栏目录…https://zhuanlan.zhihu.com/p/361112935)

CvT具有CNN的一些优良的特征:局部感受野,共享卷积权重,空间下采样。

CvT具有Self-attention的一些优良的特征:动态的注意力机制,全局信息的融合。

CNN是不是一种局部self-attention?相关推荐

  1. 自然语言处理中CNN模型几种常见的Max Pooling操作

    /* 版权声明:可以任意转载,转载时请标明文章原始出处和作者信息 .*/ author: 张俊林 (想更系统地学习深度学习知识?请参考:深度学习枕边书) CNN是目前自然语言处理中和RNN并驾齐驱的两 ...

  2. CNN的几种经典模型

    本文主要介绍一下CNN的几种经典模型比较.之前自己也用过AlexNet和GoogleNet,网络上关于各种模型的介绍更是形形色色,自己就想着整理一下,以备自己以后查阅方便 LeNet5 先放一张图,我 ...

  3. cst操作——做倒角、走线、螺旋、两种局部拉伸的方法、参数扫描

    做倒角 ① ②几条线一起做倒角(可pick 边缘chain快速做倒角) 走线 螺旋 两种局部拉伸的方法 ①利用modify locally ②利用Extrude face ③两者区别 参数扫描 实例:

  4. DNN结构:CNN、LSTM/RNN中的Attention结构

    前言 attention作为一种机制,有其认知神经或者生物学原理: 注意力的认知神经机制是什么? 如何从生物学的角度来定义注意力? 大多数attention (gating) 技巧都可以直接加入现有的 ...

  5. 通道注意力机制 cnn keras_【CV中的Attention机制】简单而有效的CBAM模块

    前言: CBAM模块由于其使用的广泛性以及易于集成得到很多应用.目前cv领域中的attention机制也是在2019年论文中非常火.这篇cbam虽然是在2018年提出的,但是其影响力比较深远,在很多领 ...

  6. SSE图像算法优化系列十九:一种局部Gamma校正对比度增强算法及其SSE优化。

    这是一篇2010年比较古老的文章了,是在QQ群里一位群友提到的,无聊下载看了下,其实也没有啥高深的理论,抽空实现了下,虽然不高大上,还是花了点时间和心思优化了代码,既然这样,就顺便分享下优化的思路和经 ...

  7. Alats2种局部刷新的比较

    第一种是    .UpdaterPanel 首先ScriptManager中要设置EnablePartialRendering="true" 来开启局部更新功能, 同时在Updat ...

  8. matlab文字bp识别,MNIST手写字体识别(CNN+BP两种实现)-Matlab程序

    [实例简介] MNIST手写字 Matlab程序,包含BP和CNN程序.不依赖任何库,包含MNIST数据,BP网络可达到98.3%的识别率,CNN可达到99%的识别率.CNN比较耗时,关于CNN的程序 ...

  9. 将卷积引入transformer中VcT(Introducing Convolutions to Vision Transformers)的pytorch代码详解

    文章目录 1. Motivation: 2. Method 2.1 Convolutional Token Embedding 模块 2.2 Convolutional Projection For ...

最新文章

  1. 云服务蓬勃发展,平均年增长率高达28%
  2. [转] mongoose学习笔记(超详细)
  3. 客户主数据冻结与删除标记位汇总
  4. python密码生成器的3种方法
  5. Spring安装与入门
  6. webpack核心提炼
  7. yafu 下载_YAFUD
  8. 同构数的算法——C语言
  9. Anjuta for liunx
  10. puppeteer实现网页截图
  11. VS2017学习C++基础十一(项目实战:小公主养成记)
  12. http91spwp index.php,index.php
  13. linux修改禅道端口,CentOS7上安装了gitlab和禅道,改了禅道端口访问不了
  14. thinkphp6 循环 视图_ThinkPHP模板里怎么使用 for循环
  15. 异或和校验(BCC)
  16. lisp正负调换_坐标提取lisp程序 -
  17. javascript实现图片滚动效果
  18. 导出超大数据excel,基于EEC实现
  19. 互联网日报 | 华为再次重申不造整车;今日头条推出“行家计划”;京东宣布构建数智化社会供应链...
  20. css div自适应宽度

热门文章

  1. JEECG 社区开源项目下载(总览)
  2. Excel中PMT计算月供函数的java实现
  3. Spring 框架基础(02):Bean的生命周期,作用域,装配总结
  4. UI交互设计关键词:情感化设计与心理
  5. 检测高CPU线程定位shell脚本
  6. 速查mysql数据大小
  7. 风口更需冷静 智能家居如何跨越鸿沟?
  8. 一个apply的实例
  9. 判斷作業系統為 64bit 或 32bit z
  10. 深夜,在这个已不再喧嚣的城市中寻找到一片属于自己的宁静,仰望那片属于自己的星空……...