- 文章转自:微信公众号「机器学习炼丹术」
- 作者:炼丹兄(欢迎交流,共同进步)
- 联系方式:微信cyx645016617
- 论文名称:「MLP-Mixer: An all-MLP Architecture for Vision」
- 论文链接:https://arxiv.org/pdf/2105.01601v1.pdf
「前沿」:最近忙各种各样的事情,更新慢了。抽空写一点。这一篇内容很简单,只需要5min就可以学完。
正文开始
我们提供了MLP-Mixer架构,之后简称Mixer。这是一个有竞争力,但是概念和技术都很简单的结构,并且没有用到卷积和自注意力。
类似于transformer,Mixer模型的输入依然是图片的Patch经过线性映射之后的序列,简单的说就是embedding。是一个形状如同“patches x channels” 这样的一个特征。其中,我们把图片embedding之后的序列,叫做token。
下图是Mixer的宏观结构图:
Mixer利用了两种MLP层:
- channel-mixing MLPs:允许不同channels特征之间的交流;
- token-mixing MLPs:允许不同空间位置之间的交流。
- 这两个MLP层是交错的。
「图解读」
- 从图中caption部分可以看到。“Per-patch Fully-connected”我认为就是embedding层,比方说把一个32x32x3的彩色patch图片,全连接映射到128维度的序列。
- Mixer Layer就是文章提出的主要创新结构。其中,每一个Mixer Layer包含一个token-mixing MLP 和一个channel-mixing MLP,这两个结构都是由两个全连接层和GELU激活函数组成。
- 我们再来看上图的上面部分,体现了Mixer Layer的细节:首先,假设一个图片被分成了9个patch,然后每一个patch经过embedding,变成了一个128的向量。那么原图经过embedding,最终得到的是9x128这样的一个矩阵。
- 这个矩阵先经过LayerNorm,相当于是在128这个维度上进行归一化;
- 然后矩阵经过转置,变成128x9的样式;
- 经过第一个全联接层,这个MLP应该就是channel-mixing了,因为是对9这个patch维度进行计算;
- 然后再转置成9x128,再进行layer norm;
- 然后token-mixing channels,在128这个spatial维度上进行计算;
- 中间加了两个skip connection。
「这里,我们可以发现,整个结构确实非常简单,回头试试效果去。」