视觉任务一直是以CNN为主流,2020年出现了基于NLP领域Transformer的模型Vision Transformer,用自注意力机制来替换CNN,而同一团队今年发表了MLP-Mixer,表示也许CNN和Attention都不是必须的。最原始的神经网络模型 MLP就能达到媲美(稍逊)CNN的效果。
MLP 处理视觉任务
MLP Mixer : https://arxiv.org/pdf/2105.01601.pdf
首先如ViT中一样处理图片,分成不同的patch,压扁,进行线性变换得到指定的通道数。不同的patch用不同颜色表示。核心部分mixer layer只使用了全连接层,辅以GeLU激活函数,归一化方法和跳跃连接。实现起来也很简单,只不过需要的训练数据有亿点点大,比如说有3亿图片的JFT-300M。
在详细看mix layer之前,不妨回顾一下MLP和CNN的特点和区别。
MLP 和 CNN的区别
全连接层和卷积层都是简单的加权求和,但是全连接的结果来自于上一层所有神经元,卷积的结果来自于上一层所有通道的局部的神经元。如果单单从特征融合这个角度来观察,全连接层中,融合的是一个维度中各个位置的特征,而在卷积层中,进行了局部的不同位置上的特征融合,又进行该局部的不同通道上的特征融合。
而只能在一个维度上进行的全连接,有没有办法做到和卷积层一样的效果呢,可以的,分两次进行就好啦。
( 注意力机制也可以同时进行两者。)
Mixer Layer
那就是这篇论文的主角 Mixer Layer的策略:
先看输入部分,通过线性变换我们得到一个二维矩阵,一维是channel,另一维是patch,每个patch的长度是之前压扁的二维图像。既然MLP只能在一个维度上进行,作者就通过矩阵转置,让MLP在每个通道的不同位置进行一次,再在同一个patch的不同通道进行一次。
MLP1和2分别被称为 token-mixing 和 channel-mixing。
虽然说MLP-Mixer表示不使用卷积,然而官方实现的第一步就是用的卷积操作。。。正如LeNet作者LeCun的twitter所抱怨的,其实就是个核的大小和步长都等同于patchsize的卷积罢了。 至于后面的全连接操作,同样也可以用1*1卷积来实现。
LeNet解释卷积的关键在于局部连接和共享参数,MLP Mixer通过划分patch达到了局部连接的目的,由于MLP的参数共享,所以这个关键也算达成了。MLP Mixer的论文表示,MLP可以干CNN的活,然而这个MLP在实现中用的又是卷积的函数。其实叫全连接或者卷积并不重要,毕竟矩阵乘法表示,相煎何太急。
其他
LN比起BN可以保持样本之间的独立性,
如果在数据集不够大,使用dropout之类的正则化技术也能炼成比较理想的模型。