共计 5076 个字符,预计需要花费 13 分钟才能阅读完成。
这篇文章次要介绍 Z. Dai 等人的论文 CoAtNet: Marrying Convolution and Attention for All Data Sizes。(2021 年)。
2021 年 9 月 15 日,一种新的架构在 ImageNet 比赛中的实现了最先进的性能 (SOTA)。CoAtNet(发音为“coat”net)在宏大的 JFT-3B 数据集上实现了 90.88% 的 top-1 准确率。CoAtNet 在应用(绝对)较差的数据集 ImageNet-21K(13M 图像)进行预训练时,达到了 88.56% 的 top-1 准确率。
CoAtNet 中的“coat”来源于卷积和自注意力。我始终在致力弄清楚这件“外套”可能象征着什么,但还没有找到解决办法。不过这是一个十分适合的首字母缩略词。
CoAtNet 同时利用了卷积神经网络 (CNN) 和 Transformer 的超强能力,基于 MBConv 块和绝对自注意力将平移同变性(translation equivariance)、输出自适应加权(input-adaptive Weighting)和全局感触野(Global Receptive Field)交融在一起,构建了一个弱小的新架构家族。
Convolution 的简略介绍和 MBConv 块
在深入研究 CoAtNet 的架构之前,首先对 CNN 做一个简略的介绍,如果你相熟这部分能够跳过。CNN 源于 1980 年代对大脑视觉皮层的钻研,由两位诺贝尔奖获得者 David Hubel 和 Torsten Wiesel 进行。这两位科学家表明,神经元的部分感触野很小,它们只对视线的特定区域做出反馈,并且这些不同的区域可能会重叠。此外一些神经元只对特定模式(即水平线)作出反应,而一些神经元对特定简单模式作出反应而这些简单模式是低级模式的组合。受到这些想法的启发,1998 年 Yann LeCun 引入了 LeNet 架构,该架构首次利用了卷积层和池化层。刚开始并未收到很大的关注,然而在几年之后 AlexNet 的呈现让 CNN 在 ImageNet 较量中的取得了亮眼的体现。并且随着计算能力的进步使得 CNN 有了更大的倒退,计算机视觉钻研的很大一部分转向了 CNN,并且多年来引入了几个网络,例如 VGG、ResNet、Inception、EfficientNet、MobileNet 等。
CNN 的基本块是卷积层。在卷积层中神经元并不连贯到其输出图像中的每个像素,而只是连贯到其感触野中的像素。在训练期间,应用在图像上卷积的可学习滤波器或核。每个过滤器都学习辨认特定模式,而低级过滤器为更简单的模式提供底层的反对。给定一张 224 × 224 × 3 的 RGB 图像,应用具备 3 个 3 × 3 × 3 过滤器的卷积层。这意味着在图像上滑动 n 个过滤器中的每一个并执行卷积操作,如下图所示。卷积的后果重叠在一起造成 Hₒᵤₜ × Wₒᵤₜ × n 输入。输入的宽度 Wₒᵤₜ 和高度 Hₒᵤₜ 取决于核大小和步长(内核步长在图像上挪动时的大小)和填充(如何解决图像的边界)的值。
Depthwise Separable Convolution 深度可拆散卷积
失常卷积可能须要大量的计算工作。出于这个起因,谷歌的人(总是他们)在他们的 MobileNet 架构中引入了深度可拆散卷积。这种类型的卷积将过程分为两个步骤:第一个深度卷积,而后是逐点卷积。最终输入与经典卷积的输入具备雷同的大小,但因为 1 × 1 卷积,须要的计算量要少得多。
在第二个版本 MobileNetv2 中,同一作者介绍了对于深度可拆散卷积的两个次要思维:
Inverted residuals:这种技术容许较低层通过跳过连贯拜访前一层的信息。第一步应用 1 × 1 卷积扩大输出,因为随后的深度卷积曾经大大减少了参数的数量。前面的 1 × 1 卷积执行压缩,以匹配初始通道数。这种残差连贯所连贯的是狭隘的层,而不是原始残余块的宽层,所以被命名为 Inverted(反向 / 倒置)。
Linear Bottleneck:应用下面的倒置残差块,是能够压缩跳过连贯链接的层放慢计算速度,但这会侵害网络的性能。所以作者引入了线性瓶颈的想法,其中残差块的最初一个卷积在增加到初始激活之前会蕴含一个线性输入。
这就是 MobileNetv2 中的 MBConv 块也是 CoAtNet 的基本块(扩大率为 4)。除了效率之外,应用这个模块的另一个起因是雷同的扩大和缩减概念也用于 Transformers 的前馈网络(FFN)模块。
self-attention 简略介绍和了解 Vision Transformer
Transformer 是在论文 Attention Is All You Need 中首次介绍的。这些架构基于学习序列元素之间关系的自注意力机制。
具体来说,Transformer 的 Encoder 架构如下图所示(解码局部不波及,与本文目标无关)。在输出嵌入中输出被标记化,每个标记映射到词汇表中的一个整数,而后每个整数映射到模型将在训练期间学习的 k 维向量,下一步是增加基于正弦函数的地位编码来解决句子中的词序。最初通过 Nₓ 个增加了多头自注意力和前馈网络、残差连贯和层归一化层的块失去输入。
多头注意力块应用不同的权重矩阵屡次计算自注意力,而后将后果连贯在一起,应用另一个可训练矩阵将其大小调整为嵌入维度,这样能够输入与输出大小雷同的向量,并其传递到下一个块。每个嵌入必须具备三个关联的示意,查问 (Q)、键 (K) 和值 (V),它们是通过将输出乘以三个可训练的权重矩阵取得的。直观地说,Q 是以后单词的示意,用于对所有其余单词进行评分(咱们只关怀正在解决的查问)。K 就像咱们在搜寻相干词时与 Q 匹配的一堆标签。V 蕴含理论的单词示意。
能够把这个模块的操作设想成在档案中搜寻:查问 (Q) 就像主题钻研的便签。键 (K) 就像文件夹的标签。当匹配时就取出该文件夹的内容,这些内容就是值 (V) 向量。
计算 Q 和 K 的标量积,失去 Score(S)矩阵,它示意每个 key 与每个 query 的相干水平,这个矩阵被缩放并通过一个 row-wise softmax 函数。计算 S 和 V 之间的标量积以取得上下文嵌入,即 自注意力矩阵。这个矩阵在通过 dropout、和残差连贯和层归一化之后,被传递给 position-wise(意味着它一次须要一个 token,但权重是共享的,并且不同的后果重叠在一个矩阵中)FFN,它首先扩大输出,而后再压缩它,这与下面的 MBConv 块的相似(这种相似性,也是 CoAtNet 的一个特点),最初通过 ReLU 激活。
这种架构的特点是:
- 能够解决残缺的序列,从而学习近程关系
- 能够轻松并行化
- 能够扩大到高复杂度模型和大规模数据集。
所以在 NLP 畛域 Transformer 网络的发现引起了计算机视觉界的极大趣味。视觉数据遵循典型的构造,因而须要新的网络设计和训练计划。不同的作者提出了他们本人的利用于视觉的 Transformer 模型的实现,但 SOTA 还是 Vision Transformer (ViT)。这种架构专一于图像的小块,它们被视为 token。输出图像中的每个 patch 都应用线性投影矩阵进行展平,并向其中增加可学习的地位嵌入。这种地位嵌入是一维的,并将输出视为光栅程序中的 patch 序列。在 CoAtNet 中 patch 之间的绝对地位会代替相对地位,这就是绝对自留神的定义。为了进行分类,会将一个可额定学习的分类标记增加到序列中(在下图中用 * 示意)。其余局部与 ViT 的编码器的原始版本雷同,由多个自留神、归一化和具备残差连贯的全连贯层组成。在每个注意力块中,多个头能够捕捉不同的连贯模式。分类输入处的全连贯多层感知器头提供所需的类预测。
CoAtNet
以上两个简短的介绍就是 CoAtNet 架构的根底,当初咱们看看怎么整合他们
混合深度卷积和自注意力
论文中提到了的 ViT 的次要限度之一是其令人印象粗浅的数据需要。尽管 ViT 在宏大的 JFT300M 数据集上显示出令人兴奋的后果,但它在数据量少的状况下性能依然不如的经典 CNN。这表明 Transformers 可能短少 CNN 领有的泛化能力,因而须要大量数据来补救。然而与 CNN 相比,注意力模型具备更高的模型容量。
CoAtNet 的指标是将 CNN 和 Transformer 的长处交融到一个繁多的架构中,然而混合 CNN 和 Transformer 的正确办法是什么?
第一个想法是利用曾经探讨过的 MBConv 块,它采纳具备倒置残差的深度卷积,这种扩大压缩计划与 Transformer 的 FFN 模块雷同。除了这种相似性之外,depthwise convolution 和 self-attention 都能够示意为一个预约义的感触野中每个维度的加权值之和。其中深度卷积能够示意为:
其中 xᵢ 和 yᵢ 别离是地位 i 的输出和输入,wᵢ ₋ ⱼ 是地位 (i – j) 的权重矩阵,L (i) 别离是 i. 通道的部分邻域。在下图中,显示了如何计算 yᵢ 的示例,其中 i = (3,3),对于一个通道,上述公式的后果如下:
相比之下,self-attention 容许感触野不是部分邻域,并基于成对相似性计算权重,而后是 softmax 函数:
其中 G 示意全局空间,xᵢ, xⱼ 是两对(例如图像的两个 patch)。为了便于了解一个简化的版本(省略了多头 Q、K 和 V 投影)如下所示:将每个 patch 与同一图像中的每个其余 patch 进行比拟,以产生一个自注意力矩阵。
让咱们尝试剖析这两个公式的优缺点:
- Input-Adaptive Weighting:矩阵 wᵢ an 是一个与输出无关的动态值,而注意力权重 Aᵢⱼ 取决于输出的示意。这使得 self-attention 更容易捕捉输出中不同元素之间的关系,但代价是在数据无限时存在适度拟合的危险。
- Translation Equivariance:卷积权重 wᵢ ⱼ ⱼ 关怀的是 i 和 j 之间的绝对偏移,而不是 i 和 j 的具体值。这种平移不变性能够在无限大小的数据集下进步泛化能力。
- Global Receptive Field:与 CNN 的部分感触野相比,self-attention 中应用的更大感触野提供了更多的上下文信息。
综上所述,最优架构应该是自注意力的输出 + 自适应加权和全局感触野个性 + CNN 的平移不变性。所以作者提出的想法是在 softmax 初始化之后或之前将全局动态卷积核与自适应注意力矩阵相加:
论文中应用的预归一化版本也对应于咱们之前曾经提到的绝对自注意力的特定变体。
CoAtNet 的架构设计
有了下面的实践根底,下一步就是弄清楚如何重叠卷积和注意力块。作者决定只有在特色图小到能够解决之后才应用卷积来执行下采样和全局绝对注意力操作。并且执行下采样形式也有两种:
- 像在 ViT 模型中一样将图像划分为块,并重叠相干的自注意力块。该模型被用作与原始 ViT 的比拟。
- 应用渐进池化的多阶段操作。这种办法分为 5 个阶段,然而前两个阶段,即经典的卷积层和用于升高维度的 MBConv 块。为了简略起见这里将其合并为一个阶段命名为 S0。前面三个阶段能够是卷积或 Transformer 块,产生 4 种组合:S0-CCC、S0-CCT、S0-CTT 和 S0-TTT
这样产生的 5 个模型在泛化方面(训练损失和评估准确度之间的差距)和应用 1.3M 图像、超过 3B 图像的模型容量(拟合大型训练数据集的能力)进行了比拟。
泛化能力:S0-CCC ≈ S0-CCT ≥ S0-CTT> S0-TTT ≫ ViT
模型容量:S0-CTT≈S0-TTT>ViT>S0-CCT>S0-CCC
对于泛化来说:卷积层越多,差距越小。
对于模型容量:简略地增加更多的 Transformer 块并不意味着更好的泛化。下图所示的 S0-CTT 被选为这两种性能之间的最佳折衷方案。
总结
这种配置的惊人后果在本文结尾曾经形容过,上面是图表的展现。
CoAtNet 在 ImageNet21K 小规模数据集(左)上与 CNN 性能相当,并随着 JFT3B 数据集(右)的数据量减少而取得更加可观的收益。
这里有一个 pytorch 的 CoAtNet 实现,有趣味的能够看看代码学习
https://www.overfit.cn/post/b59e840f6eb74bb38785a7210c1d58f5
援用:
CoAtNet: Marrying Convolution and Attention for All Data Sizes [arxiv 2106.04803v2]
Attention Is All You Need [arxiv1706.03762]
An Image is Worth 16×16 Words: Transformers for Image Recognition at Scale [arxiv 2010.11929]
作者:Leonardo Tanzi