CNN,Transformer,MLP三分天下

2023-11-17

title: 论文列表
1. MLP-Mixer
	- MLP-Mixer: An all-MLP Architecture for Vision
2. MetaFormer
	- MetaFormer is Actually What You Need for Vision

MLP-Mixer论文原文
MLP-Mixer代码实现
MetaFormer论文原文
MetaFormer代码实现

一、前言

随着Transformer这个外来物种的入侵,CV领域逐渐形成了Transformer和CNN二分天下的情况。在原有机器学习模型多层感知机MLP中也逐渐产生了变革,MLP-Mixer就是其产物。在MLP-Mixer工作中,研究人员表明,尽管Conv和attention都足以获得良好的性能,但它们都不是必须的,纯MLP+非线性激活函数+Layer Normalization也能取得不错的性能,其预训练和推理成本可与最新模型相媲美。

在MLP-Mixer为什么要使用全连接层,全连接的优点在哪。

因为其归纳偏置inductive bias更低。归纳偏置可以看作学习算法自身在一个庞大的假设空间中对假设进行选择性的启发式或者“价值观”。也就是我们告诉它要做的有哪些,归纳偏置越低,我们对模型的人为干预就越少。例如CNN的归纳偏置在于卷积操作的局部相关性和平移不变性。时序网络RNN的归纳偏置在于时间维度上的连续性和局部性。事实上,ViT已经开始延续了一直以来想要在神经网络中移除手工视觉特征和归纳偏置的趋势,让模型只依赖于原始数据进行学习,也就是我们所说的减少人为干预,像BERT一样尽可能让它学习无标签语料。MLP则在减少归纳偏置的路上更近了一步。

二、MLP-Mixer

2.1 方法

MLP-Mixer 的总体结构

![[Pasted image 20230705155140.png]]

  1. 将图片拆成多个patch
  2. 用一个全连接层网络对所有patch进行处理,提取出tokens
  3. 经过N个Mixer层,提炼特征信息
  4. 最后一个全连接层预测类别

2.1.1 per-patch 全连接层

全连接神经网络层相较于卷积神经网络层,并不能获取输入数据局部区域间的信息,为了解决这个问题,MLP-Mixer通过Per-patch 全连接层。

具体来说,MLP-Mixer将输入图像相邻无重叠地划分为S个Patch (类似于VIT模型中的patch划分),每个Patch先进行faltten操作打平空间信息,再通过MLP映射为一维特征向量,其中一维向量长度为C,最后将每个Patch得到的特征向量组合得到大小为SxC的2D Table。需要注意的时,每个Patch使用的映射矩阵相同,即使用的MLP参数相同。

例如,假设输入图像大小为240x240x3,模型选取的Patch为16x16,那么一张图片可以划分为(240x240)/(16x16)= 225个Patch。结合图片的通道数,每个Patch包含了16x16x3 = 768个值,把这768个值做Flatten作为MLP的输入,其中MLP的输出层神经元个数为128。这样,每个Patch就可以得到长度的128的特征向量,组合得到225x128的Table。MLP-Mixer中Patch大小和MLP输出单元个数为超参数。

实际上,Per-patch Fully-connected layer 实现了(W,H,3)的输入图像维度到(S,C)的特征向量维度的映射。

2.1.2 Mixer-Layer 代替 Self-Attention

在上个例子中,我们把维度为[16,16,3]的patch打平成长度为768的向量(16x16x3 = 768 ), 之后经过MLP的映射作为2DTable的行,2DTable的行实际上代表了同一空间位置(某个patch)在不同通道上的信息,而列代表了不同空间位置(不同patch)在同一通道上的信息。换句话说,对Table的每一行进行操作可以实现通道域的信息融合,对Table的每一列进行操作可以实现空间域的信息融合

在传统CNN中,可以通过1x1 Conv来实现通道域的信息融合,如果使用尺寸大于1的卷积核,可以同时实现空间域和通道域的信息融合。

在Transformer中,通过Self-Attention实现空间域的信息融合,通过MLP同时实现通道域的信息融合。

而在MLP-Mixer中,通过Mixer Layer,使用MLP先后对输入数据的列和行进行映射,实现空间域和通道域的信息融合。与传统卷积不同的是,由于Mixer Layer 对行列的操作是存在先后顺序的,这意味着 Mixer Layer 将空间域和通道域分开操作,这种思想与Xception和MobileNet中的深度可分离卷积相似。也类似于Transformer中,对空间信息和通道信息的分开处理。

![[Pasted image 20230705154955.png]]

如上图所示,Mixer 架构采用两种不同类型的 MLP 层:token-mixing MLP(图中的MLP1) 和 channel-mixing MLP(图中的MLP2)。token-mixing MLP 允许不同空间位置之间进行通信,可以融合空间信息;channel-mixing MLP 允许不同通道之间进行通信,可以融合通道信息。token-mixing MLP block作用在每个patche的列上,即先对patches部分进行转置,并且所有列参数共享MLP1,得到的输出再重新转置一下。channel-mixing MLP block作用在每个patche的行上,所有行参数共享MLP2。这两种类型的层交替执行以促进两个维度间的信息交互。 最后,Mixer Layer还加入了LN(Layer Normalization)和残差连接来提高模型性能。MLP1和MLP2都采用了相同的结构,如下图。

![[Pasted image 20230705155407.png]]

2.2 模型结构

MLP-Mixer 的其整体思路为:先将输入图片拆分成多个 patches(每个 patch 之间不重叠),通过 Per-patch Fully-connected 层的操作将每个 patch 转换成 feature embedding,然后送入N个Mixer Layer。最后,Mixer 将标准分类头与全局平均池化层配合使用,随后使用 Fully-connected 进行分类。

与VIT模型相比,其第一步与 ViT 其实是一致的,之后,Mixer Layer 替换了 Transformer Block,最后直接的输出接到全连接层而无需 class token。此外,Mixer 的输出基于输入的信息,因为全连接层,交换任意两个 token 会得到不同的结果(对应的权重不一样了),所以无需 position embedding。

假设我们有输入图像 224 × 224 × 3 ,首先我们切 patch,例如长宽都取 32,则我们可以切成 7 × 7 = 49 个 patch,每个 patch 是 32 × 32 × 3。我们将每个 patch 展平就能成为 49 个 3072 维的向量。通过一个全连接层(Per-patch Fully-connected)进行降维,例如 512 维,就可以得到了 49 个 token,每个 token 的维度为 512。然后将他们馈入 Mixer Layer。

Mixer 架构采用两种不同类型的 MLP 层:token-mixing MLP 和 channel-mixing MLP。token-mixing MLP 指的是 cross-location operation,作用于可以用kernel_size为1的conv1d实现全连接的效果,混合不同patch的信息,即 混合提炼空间信息,对于 49 个 512 维的 token,将每一个 token 内部进行自融合,将 49 维映射到 49 维;channel-mixing MLP 指的是 pre-location operation,作用于简单的linear就可以实现混合提炼不同通道信息。即对于 49 个 512 维的 token,将每一维进行融合,将 512 维映射到 512 维,即“混合”每个位置特征。为了简单实现,其实将矩阵转置一下就可以了。这两种类型的层交替执行以促进两个维度间的信息交互。

单个 MLP 是由两个全连接层和一个 GELU 激活函数组成的。此外,Mixer 还是用了残差连接(Skip-connection)和层归一化(Layer Norm)。以上操作的公式描述如下: U ∗ , i = X ∗ , i + W 2 σ ( W 1 ∗ L a y e r N o r m ( X ) ∗ , i ) , f o r i = 1 , . . . , C Y j , ∗ = U j , ∗ + W 4 σ ( W 3 ∗ L a y e r N o r m ( U ) j , ∗ ) , f o r j = 1 , . . . , S \begin{aligned} U_{*,i}&=X_{*,i}+W_2\sigma\big(W_1*LayerNorm(X)_{*,i}\big),\quad for i=1,...,C\\ Y_{j,*}&=U_{j,*}+W_4\sigma \big(W_3*LayerNorm(U)_{j,*} \big),\quad for j=1,...,S \end{aligned} U,iYj,=X,i+W2σ(W1LayerNorm(X),i),fori=1,...,C=Uj,+W4σ(W3LayerNorm(U)j,),forj=1,...,S
采用 pre-location operation 和 cross-location operation的原因:

首先,在图像中的信息融合,无非就是分为固定位置的信息融合和位置间的信息融合。CNN 的卷积核大小为 K × K × C 其实是同时考虑了这两个,当 K = 1 时,是逐点卷积,考虑的是 pre-location operation ;当 C = 1 时,是逐层卷积,其实就是考虑了 cross-location operation。有的 CNN 变体,例如MobileNet,EfficientNet等等, 为了计算复杂度降低采用通道可分离卷积,先做 1 × 1 ,再做 DW 卷积,效果也可,说明他们可以不一起做。所以 MLP-Mixer 也干脆将这两个正交开来处理。

MLP-Mixer 有多个 Mixer Layer 拼接,Mixer 中的每一层采用相同尺寸的输入(token 维度不变),这种“各向同性”设计类似于Transformer 和 RNN 中定宽;这与 CNN 中金字塔结构 (越深的层具有更低的分辨率、更多的通道数) 不同。

至于最后的全局池化和全连接,则是相对普通的操作了,按照 Channel 对每个 token 进行池化,最后得到 Channel 维度的向量,然后经过一个全连接层输出目标分类分数即可。模型的结构图如下所示:

![[Pasted image 20230705164043.png]]

2.3 MLP-Mixer网络配置

最终MLP-Mixer的网络配置如下

![[Pasted image 20230705164117.png]]

2.4 实验结果

对MLP-Mixer分别使用ImageNet,ImageNet21k和JFT-300M三个数据集上进行预训练,然后在ImageNet上进行finetune,性能较ViT略差。

![[Pasted image 20230705165044.png]]
![[Pasted image 20230705165646.png]]

2.5 总结

从CNN->ViT->MLP-Mixer的过程,是逐渐减少人为干预的一个过程,也就是尽量减少算法的归纳偏置的一个过程,也是算法越来越智能化的一种表现。我们甚至可以用全连接层来直接替换self-attention。然后绕一圈又回到了原始的MLP。实际上,最初CNN设计人为干预的归纳偏置,告诉计算机要做一个卷积,要多关注一些参数,少关注另一些参数这样的设计只是为了让计算机少走弯路,用人的经验给算法更多的指导,想让算法更快收敛,帮助算法模型快速在各种领域落地。而现在随着算力的提升,这样的一种设计仿佛是套在计算机身上的枷锁,反而限制它们的自我发挥,对acc、F1等结果反而起了反作用,所以现在数据量大了,算力提升了,就应该找到适合计算机自己的路,也就是低归纳偏置,甚至是不干预让它自己完成学习和计算。好像机器自己学习到的规律,其实比人赋予机器的归纳偏置要更合理。就像教孩子学习只能让他自己去悟才能更深刻更有效,当然这样低归纳偏置,甚至是0的前提是有大量数据供其学习,有足够算力支撑。所以,算法模型其实没有fashion和out,只有更适合这个时代,更适合这个情况。

三、MetaFormer

3.1 前言

what is all you need?

相比attention is all you need(Vision Transformer),MLP is all you need(MLP-Mixer),batches are all you need(ConvMixer)之后,新的问题出现了,在这样一个CNN,Transformer,MLP三分天下的世界,究竟怎么选定模型。MetaFormer提出了一个新的理念,什么算法其实不重要,重要的是这个框架。其实从这样三个模型中很容易看出,相同点便是近乎一模一样的框架。

MetaFormer是一种从Transformer模型中抽象出来的通用架构,没有指定token mixer,并提出了PoolFormer基线在分类检测和分割任务上进行验证。

Transformer 在计算机视觉任务中显示出巨大的潜力。最早很多研究者们都认为基于注意力的token mixer模块(即self-attention)对模型的能力贡献最大。然而,之前的介绍我们可以发现,transformers 中基于注意力的模块可以被 CNN,甚至 MLP 取代,并且结果模型仍然表现得相当好。

基于这一观察,MetaFormer假设Transformer的通用架构,而不是特定的token mixer模块,对模型的性能更重要。为了验证这一点,MetaFormer特意用一个非常简单的空间池化算子替换了 Transformer 中的注意力模块,以仅进行最基本的 token 混合,要知道池化算子本身是不带有任何学习参数的,而模型的表现依然不错,所以作者最后将Transformer的通用架构提取出来作为计算机视觉任务模型设计的核心,并称呼这个架构为MetaFormer。

3.2 PollFormer架构

为了证明Transformer结构才是模型有效的主要原因,而不是Self-Attention的token这一观点,作者用非常简单的非参数空间平均池化层pooling替换了注意力模块来进行消融实验。如果不带有学习参数的pooling代替关键的Self-Attention后都能产生不错的效果,那么是不是就可以证明Self-Attention并不是模型有效的关键信息。然而结果确实非常震惊的,使用pooling的Transformer模型在不同的计算机视觉任务上取得了有竞争力的结果。而pooling没有任何可学习的参数,只是简单的进行特征融合而已,这与self-attention计算过程中产生的大量参数和计算量形成了鲜明的对比。自注意力和spatial MLPs的计算复杂度都是和token的数量成平方比,因此自注意力和spatial MLPs通常只能处理几百个token, 而池化操作的复杂度和token的数量是呈线性比的。替换后的模型被命名为PoolFormer,并在性能、参数数量和 MAC(乘积和累加)方面与经典的 Transformer(例如 DeiT)和 MLP-like(例如 ResMLP)模型进行了比较。结果如下所示:

![[Pasted image 20230705171942.png]]

结果表明这个模型能够在多个视觉任务中达到很好的表现,比如在ImageNet1K数据集中,能够达到82.5%的准确率,超过DeiT-B(Transformer架构)和ResMLP-B24(MLP架构)的同时还能够大幅减小参数量。较DeiT-B 和ResMLP-B24 分别减少了48%和60%的参数量。PoolFormer的模型结构如下所示:

![[Pasted image 20230705171505.png]]

具体实现

在 PoolFormer 中,输入首先进行Patch Eembedding处理,类似于原始 ViT 的实现。然后将输出传递给 D 0 D_0 D0 阶段中的一系列 PoolFormer 块中。在 PoolFormer 中,注意力模块被一个stride=1的池化块代替,它执行平均池化,简单地使每个token的周边信息进行融合。在残差连接之后,经过一个MLP ,与原始 Transformer Block类似。

重复整个过程,构建4个Stage(D0 - D4 )的层次结构,通过池化将图像的原始高度和宽度压缩到H/32和W/32。 根据四个阶段计算得到的特征图的数量(C1 - C4),可用定义了不同大小的模型。L则表示模型中FoolFormer Block的数量,假设L=12 ,阶段 1、2 和 4 将包含2(L/6=2) 个PoolFormer 块,而阶段 3 将包含6(L/2=6)个块。

下图曲线可以很容易的看出来,在相同MACs下,PoolFormer 相比较于其他先进模型(RSB-ResNet,DeiT,ResMLP)可以获得更高的图像识别准确率。

![[Pasted image 20230705172443.png]]

3.3 MetaFormer架构

PoolFormer 的有效性验证了最初的假设,并敦促作者定义了“MetaFormer”的概念,这是一种从 Transformer 中抽象出来的通用架构,没有指定token mixer。如下图所示:

![[Pasted image 20230705172519.png]]

MetaFormer中的token Mixer采用Self-Attention则变成了Transformer模型,采用Spatial MLP则变成了MLP类模型,采用Pooling则变成了PoolFormer模型

MetaFormer架构

输入信息先经过LN归一化处理后,馈入Token Mixer做计算,在LN的 Token Mixer 两端有一条残差连接;然后将计算结果送入Channel MLP中做处理,送入之前再经过一次LN操作,在LN和MLP的两端也有一条残差连接。至于Token Mixer中到底是什么结果其实并不重要,只要能对输入数据的空间信息做映射即可。再回想一下之前讲过的模型VAN,实际上就是使用LKA作为Token Mixer。实际上,很多基于TransFormer的改进模型都是可用使用MetaFormer架构来定义的。

3.4 实验结果

在 ImageNet-1K 上,PoolFormer 实现了 82.1% 的 top-1 准确率,以 35%/52% 的参数减少了 0.3%/1.1% 的准确率,超过了经过良好调整的视觉Transformer/MLP-like 基线 DeiT-B/ResMLP-B24 MAC 减少 48%/60%。

![[Pasted image 20230705173353.png]]
![[Pasted image 20230705173434.png]]

3.5 总结

在原论文的描述中,基于广泛的实验,作者认为 MetaFormer 是在视觉任务上为最近的 Transformer 和类似 MLP 的模型取得优异结果的关键参与者。这项工作需要更多致力于改进 MetaFormer 的未来研究,而不是专注于token mixer模块。此外,作者希望它们提出的 PoolFormer 可以作为未来 MetaFormer 架构设计的起始基线。题中的token mixer不重要,并不是指token mixer这个组件可以去掉,而是指token mixer是何种形式不重要,不论是self-attention、spatial mlp、conv/deptwise conv、还是最简单的pooling,只要能起到融合空间信息的作用,网络最终性能都差不多。所以涨点的原因可能是金字塔结构、残差连接、Normalization、GELU等。将满足这些性质的网络统称为MetaFormer。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CNN,Transformer,MLP三分天下 的相关文章

随机推荐

  • @Transient 理解

    transient使用小结 1 一旦变量被transient修饰 变量将不再是对象持久化的一部分 该变量内容在序列化后无法获得访问 2 transient关键字只能修饰变量 而不能修饰方法和类 注意 本地变量是不能被transient关键字
  • YOLOV2个人理解总结

    YOLOv2框架图 YOLOv2改进之处 1 Batch Normalization BN Batch Normalization 层简单讲就是对网络的每一层的输入都做了归一化 这样网络就不需要每层都去学数据的分布 收敛会快点 原来的YOL
  • 面试题:如何测试登录功能

    最近在做一个创新项目 这个项目有二个平台 每个平台都有前后端 故有四个系统 每个系统都有登录功能 而且不同系统代码设计方式都有所差异 所以就这个登录功能而言就要测试四次 看似一个简单的登录功能其中设计的测试点也是相当复杂 今天就讲讲如何测试
  • php scp跨服器拷贝文件到sftp

    一般要装php的ssh2扩展 比较麻烦 所以转念一想 为什么不用我们经常用的scp 但是scp跨服务器拷贝需要输入密码 这里就用到了一个工具试试sshpass 可以指定密码 1 工具安装 ubuntu安装 sudo apt get inst
  • 【问题解决】org.springframework.dao.QueryTimeoutException: Redis command timed out; nested exception is io

    1 出现问题异常 核心错误输出 org springframework dao QueryTimeoutException Redis command timed out nested exception is io lettuce cor
  • B站马士兵python入门基础版详细笔记(3)

    一 input函数的使用 他的返回值类型一定是str类型 m1 input please input the first word m2 input please input the second word print int m1 int
  • c++库 Android调用

    如果您想在Android应用程序中使用C 库 您可以通过以下几个步骤封装C 库以供Android调用 创建一个新的Android项目并设置C 支持 在Android Studio中创建一个新的Android项目 并选择包含C 支持的选项 将
  • [学C日记]---递归

    递归 自己调用自己 大事化小 必要条件 1 有限制条件 当满足限制条件时 递归便不继续 2 每次递归调用之后越来越接近这个限制条件 3 递归层次不能太深 太深容易栈溢出 每次递归调用都要给函数分栈区 次数过多容易空间不足 1 一串数字挨个输
  • 深聊自动化测试之:小鱼整理21条避坑指南,让你完美运行自动化

    自动化测试避坑总结 1 引言 2 避坑内容总结 2 1无法定位到元素 2 2 Indentation Error 2 3 PO设计模式类 2 4 页面封装类中没有已定义函数的问题 2 4 1 提示没有该方法 2 4 2 没有定义好的函数 2
  • Android Netd

    一 概述 所谓 Netd 就是Network Daemon 的缩写 表示Network守护进程 类似的命名还有很多 例如 Vold Volumn Deamon Rild Radio Interface Layer Deamon Netd负责
  • 根据面试的过程修正2022年学习规划

    上周由于全员降薪 所以对于在招聘网站上这30天内主动给我打招呼的hr和猎头 我都投了简历 结果是投简历16家公司 给与面试机会的七家 斩获了两家offer 一家七百多人的军事仿真类的公司 一家小到不能再小的ue4公司 好的方面是还能找到工作
  • python爬虫-33个Python爬虫项目实战(推荐)

    今天为大家整理了32个Python爬虫项目 整理的原因是 爬虫入门简单快速 也非常适合新入门的小伙伴培养信心 所有链接指向GitHub 祝大家玩的愉快 O O WechatSogou 1 微信公众号爬虫 基于搜狗微信搜索的微信公众号爬虫接口
  • Redis6.2/5.0 集群两种快速搭建方式

    一 集群常识 1 redis在3 0之前是集群 仅支持单实例的 3 0以后开始支持集群 2 3 0的集群命令也不是那么亲和 需要用ruby编写的脚本 而且需要登录redis客户端操作 启动 增删节点 移动槽位等 redis 5 0以后 可以
  • 楚留香获取服务器信息卡住了,楚留香手游角色卡住不动怎么办 卡死解决办法...

    楚留香手游角色卡住不动怎么办 来看看卡死解决办法 由于手机 网络和服务器等等原因 玩家会出现角色卡住动不了 操作界面消失 无法切换场景等等情况 非常影响游戏体验 来看看怎么解决吧 楚留香手游角色卡住不动怎么办 如果您在游戏中遇到角色卡住 无
  • 建立docker私有hub

    docker是一个非常好用的虚拟化工具 下面给出建立私有docker hub的方法 docker将私有hub的环境打包在registry image中 执行指令 docker run p 5000 5000 registry 这条指令启动一
  • F - LIS on Tree

    F LIS on Tree atcoder jp 问题描述 树上LIS 普通LIS O n n void solve int n cin gt gt n vector
  • 【Allegro 17.4软件操作保姆级教程二】布局前准备

    由于Allegro 17 2软件出了故障 干脆新安装了17 4版本 后续的教程截图都用17 4的 操作逻辑是差不多的 1 生成和导入网表 1 原理图绘制完成 导出网表 在Capture中 选中原理图dsn文件 tools create ne
  • 企业服务端接口认证案例

    接口认证方式 调用方要向管理员获取 appkey 和 secret appkey 调用方唯一标识 方便 HTTP API 统计与维护 secret 密钥 用于生成 HTTP API 校验所需的 token 值 调用方每次请求都需要带上当前时
  • PPP协议、PPPoE协议、L2TP协议的关系

    1 简述 首先对这3中协议做一个简单的描述 协议 协议类型 描述 PPP 点对点链路层协议 应用最广泛的点对点协议 可应用在多种网络 改善了SLIP协议的不足 PPPoE 点对点链路层协议 对PPP协议进行扩展 将PPP用于以太网上 L2T
  • CNN,Transformer,MLP三分天下

    title 论文列表 1 MLP Mixer MLP Mixer An all MLP Architecture for Vision 2 MetaFormer MetaFormer is Actually What You Need fo