前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MLP is Best?

MLP is Best?

作者头像
炼丹笔记
发布2021-06-15 15:52:48
1K0
发布2021-06-15 15:52:48
举报
文章被收录于专栏:炼丹笔记

作者:十方

众所周知,CNN是计算机视觉的首选模型,最近还流行用vision transformer做视觉,谁又能想到用多层感知机(MLPs)去做图像相关的模型呢?《MLP-Mixer: An all-MLP Architecture for Vision》这篇论文就用了基于MLP的框架,依然取得了很高的分类精度。

MLP-Mixer简介

MLP-Mixer不用卷积,也不用attention,完全基于multi-layer perceptrons(MLPs),仅依赖最基本的矩阵相乘,数据输出的改变(reshape,转置),和标量的非线性。上图展示了MLP-Mixer的宏观框架。说好的MLP,为啥看着这么像transfromer。从上图我们可以看到,一张图片会被等分切成多个patchs,然后每个patch会有很多channels,最终一张图片的输入就是patches * channels的一张表。通俗点说,如上图左下角那张图片,假如它是9 * 9 * 3 ,会被划分成9个patch,每个patch就是3 * 3 * 3 = 27,所以这张图片的输入就是 9 * 27,如果输入多张图片,就是batch_size * 9 * 27。从图中,我们可以看到Mixer使用两种类型的MLP层,channel-mixing MLPS和token-mixing MLPs。channel-mixing MLPs使得channel内之间有交互,而token-mixing MLPs使得不同位置(不同patch)之间有交互。这两种类型的MLP交错使用使得输入各个维度之间不断学习交叉特征。如论文所说,channel-mixing就相当于使用1维卷积,对于token-mixing就可以看作为一个单通道的depth-wise卷积。CNN并不能看作是Mixer的特例,要远比这种结构复杂。

Mixer架构

其实Mixer架构非常简单,看上面的图解就已经很清楚了。Mixer把一个图片拆解为S个patchs,每个patch之间并无重叠。每个patch会被同一个矩阵做线性映射为X(S * C),然后输入到上文所说的多个Mixer层中,先是遇到token-mixing MLP block,对矩阵每列做映射,再是通过channel-mixing对每行做映射,这里映射是共享embedding的。每个MLP层都包含两个全连接和一个非线性函数。Mixer layers用公式定义如下:

每层mixer的输入都是同样尺寸的table,这个和transformer很类似,和CNN就很不同了。Mixer也没有使用position embedding,因为token-mixing MLPs对位置已经很敏感了。最后Mixer用了一个很标准的pooling层和全连接层做分类任务。

实验

从实验中我们可以看到mixer在精度上离vit模型已经相差不多了,论文还对比了pretrain后的效果对比,感兴趣的可以看原文。

参考文献

1、MLP-Mixer: An all-MLP Architecture for Vision.

https://arxiv.org/pdf/2105.01601.pdf

代码路径:https://github.com/google-research/vision_transformer

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 炼丹笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MLP-Mixer简介
  • Mixer架构
  • 实验
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档