热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于深度学习:论文导读CoAtNet是如何完美结合-CNN-和-Transformer的

这篇文章次要介绍Z.Dai等人的论文CoAtNet:MarryingConvolutionandAttentionforAllDataSizes。(2021年)。

这篇文章次要介绍 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


推荐阅读
  • 本文介绍了腾讯最近开源的BERT推理模型TurboTransformers,该模型在推理速度上比PyTorch快1~4倍。TurboTransformers采用了分层设计的思想,通过简化问题和加速开发,实现了快速推理能力。同时,文章还探讨了PyTorch在中间层延迟和深度神经网络中存在的问题,并提出了合并计算的解决方案。 ... [详细]
  • 【论文】ICLR 2020 九篇满分论文!!!
    点击上方,选择星标或置顶,每天给你送干货!阅读大概需要11分钟跟随小博主,每天进步一丢丢来自:深度学习技术前沿 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 2016 linux发行版排行_灵越7590 安装 linux (manjarognome)
    RT之前做了一次灵越7590黑苹果炒作业的文章,希望能够分享给更多不想折腾的人。kawauso:教你如何给灵越7590黑苹果抄作业​zhuanlan.z ... [详细]
  • 深入理解线程、进程、多线程、线程池
    本文以QT的方式来走进线程池的应用、线程、进程、线程池、线程锁、互斥量、信号量、线程同步等的详解,一文让你小白变大神!为什么要使用多线程、线程锁、互斥量、信号量?为什么需要线程 ... [详细]
  • 论文阅读:《Bag of Tricks for LongTailed Visual Recognition with Deep Convolutional Neural Networks》
    基于深度卷积神经网络的长尾视觉识别技巧包摘要近年来,挑战性长尾分布上的视觉识别技术取得了很大的进展,主要基于各种复杂的范式(如元学习)。除了这些复杂 ... [详细]
  • PyTorch框架中有一个非常重要且好用的包:torchvision,该包主要由3个子包组成,分别是:torchvision.datasets、torchvision.models、torchv ... [详细]
  • SLAM优秀开源工程最全汇总
    https:zhuanlan.zhihu.comp145750808 1、CartographerCartographer是一个系统,可跨多个平台和传感器配置以2D和3D形式提供实 ... [详细]
  • 第四单元和课程总结:简单的架构设计意识
    一、第四单元架构设计总结第一次作业由于需要按名查找类图模型,于是建立"Class"类进行管理由于方法具有参数导致类中存在二级结构 ... [详细]
  • 深度学习与神经网络——邱锡鹏
    深度学习与神经网络——邱锡鹏-一、绪论人工智能的一个子领域神经网络:一种以(人工))神经元为基本单元的模型深度学习:一类机器学习问题,主要解决贡献度分配问题知识结构:路线图:顶 ... [详细]
  • 出现_史上最大漏洞出现,你的安卓iPhone电脑都不安全了!
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了史上最大漏洞出现,你的安卓iPhone电脑都不安全了!相关的知识,希望对你有一定的参考价值。 ... [详细]
  • conda下安装pytorch最详细教程 // 安装pytorch踩坑记录 // cuda11.5下pytorch安装 // torch.cuda.is_available()输出False解决办法
    几点说在前面!!!!!我踩的坑:1、一开始入坑使用pytorch框架没有用anaconda,现在非常后悔!!!conda对小白管理环境真的巨好用!!!2、安装时候torch版本不对 ... [详细]
author-avatar
手机用户2502910523
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有