图像处理是机器学习中最有趣的子区域之一。它从多层感机知开始,后来出了卷积,后来发展出是注意力机制,然后就是transformers,现在新的论文将又我们带回到MLP。如果您像我一样,您的第一个问题将是MLP如何获得与transformers和CNN几乎相同的结果?这是我们将在本文中回答的问题。谷歌新提出的“ MLP-Mixer”取得了与SOTA模型非常接近的结果,该模型是在大量数据上训练的,速度几乎是其三倍。这也是该论文中一个有趣的指标(图像/核心/秒)。
MLP-Mixer无需使用任何卷积或任何自我注意层,但几乎可以达到SOTA结果,这是非常令人深思的。
MLP-Mixer架构
在讨论网络如何工作之前,让我们先讨论网络的各个组成部分,然后将它们组合在一起
我们提出了MLP-Mixer,一个专门基于多层感知器(MLPs)的体系结构。MLP-Mixer包含两种类型的层:一种是MLPs独立应用于图像patches(也即:混合每块局部特征),另一种是MLPs进行跨patches应用(也即:混合空间信息)。
这里要注意的第一件事是输入图像是如何“建模/表示”的,它被建模为patches(当它被分割时)x通道。第一种类型的层(将其称为通道混合层[1]),在图像的独立面上运行,并在学习期间允许其通道之间进行通信(因此称为通道混合)。第二种类型(将其称为patches混合)以相同的方式工作,但对于patches(允许不同patches之间进行通信)。
现代图像处理网络的核心思想是在给定位置混合特征或在不同位置[1]之间混合特征。cnn使用卷积、内核和池化来执行这两种不同类型的混合,而视觉变形器则使用自我关注来执行它们。然而,MLP-Mixer试图以一种更“独立”的方式(将在下面解释)实现这两种功能,并且只使用mlp。仅使用mlp(基本上是矩阵乘法)的主要优点是体系结构的简单性和计算速度。
它是如何工作的?
这是有趣的部分,我们将讨论输入如何变成输出,以及图像在通过网络时发生了什么。
第一个完全连接的层将不重叠的patches投射到所需的隐藏维度(根据层的大小)。这层的类型是“patches混合”层,这是有意义的。你可以认为这是编码图像,这是一个广泛使用的压缩技巧在神经网络(作为自动编码器),以降低图像的维数,只保留最关键的特征。在这之后,一个“表”是由图像补丁的值与隐藏的维值构造的。
patches混合层对表的列执行矩阵操作(如转置),而通道混合层对表的行执行矩阵操作(这在上面表示为“混合器层”)。然后应用非线性激活函数[1]。这可能听起来有点令人困惑,但凭直觉,你可以看到混合器试图找到最好的方法来混合和编码的通道和图像补丁到一个有意义的输出。
这里需要注意的一点是,非重叠补丁的隐藏表示的大小与输入补丁的数量无关。在这里证明这一点将使这篇文章比我想要的长得多。本质上,这给出了一个非常重要的性能差异,在MLP-Mixer和其他体系结构之间是:
与ViT不同,MLP-Mixer的计算复杂度在输入补丁的数量上是线性的。
MLP-Mixer还具有一些优点,这些优点为其体系结构提供了许多简化方法:
- 图层大小相同
- 每层仅包含2个MLP块
- 每层都接受相同大小的输入
- 所有图像块均以相同的投影矩阵线性投影
与通常具有金字塔结构的CNN相比,这使对该网络的推理和使用它更加简单[1]。我记得我第一次尝试设计CNN,弄清楚何时缩小图像,何时放大图像以及放大/缩小的程度可能会有些困难。但是,这些问题并不存在于此体系结构中。
需要注意的一件事是该模型还使用了跳过连接和正则化,但是我认为我们无需讨论这些概念,因为它们在许多其他资源中得到了广泛的使用和解释。
最后的想法
在结果方面,存在多个表格,该表格突出了一个事实,即Mixer的性能与其他架构非常相似,但是速度更快。它的“吞吐量”为105图像/秒/核心,而Vision transformer为32。公平地说,这听起来像是一个很奇怪的指标,并且有时感觉就像ML研究人员试图找到一个指标,使他们的网络看起来比其他指标要好得多。但是,我认为我们都可以客观地同意,仅使用MLP块来达到相同水平的性能仍然令人印象深刻。
MLP-Mixer论文:arxiv:2105.01601
本文作者:Mostafa Ibrahim
deephub翻译组