无需数学背景,理解ResNet、Inception和Xception的三种变革性架构TheThreeArchitecturesofTheWayatNeuralNetworks:ResNet,Inception,andXception。机器之心本文整理介绍。更多架构请参考机器之心文章《10 大深度学习架构:计算机视觉优秀从业者必备(附代码实现)》。在过去几年中,计算机视觉深度学习的大部分进展都可以归功于一些神经网络架构。抛开所有的数学、代码和实现细节,我想探讨一个简单的问题:这些模型如何工作以及为什么工作?在撰写本文时,Keras已将这6个预训练模型集成到库中:VGG16VGG19ResNet50Inceptionv3XceptionMobileNetVGG网络和自2012年以来的AlexNet遵循基本卷积网络的当前原型布局:一系列卷积层,首先池化和激活层,最后是一些完全连接的分类层。MobileNet本质上是针对移动应用优化的Xception架构的精简版。但其余三个真正重新定义了我们看待神经网络的方式。本文的其余部分将重点介绍ResNet、Inception和Xception架构背后的直观原则,并解释为什么它们已成为许多后续计算机视觉工作的基石。ResNetResNet诞生于一个美丽而简单的观察:为什么非常深的网络在添加更多层时表现更差?直觉上,更深的网络并不比同类型的更浅的网络表现差,对吧?至少在训练时间方面(没有过度拟合的风险时)。我们来做一个思想实验,假设我们搭建了一个n层网络,并且达到了一定的准确率。那么一个n+1层的网络至少应该能达到同样的精度——只是简单的复制前面的n层,然后在最后一层加上一层恒等映射。同样,n+2、n+3、n+4层网络都可以继续添加identitymap,达到同样的准确率。但在实践中,这些更深层次的网络基本上表现更差。ResNet的作者将这些问题归结为一个假设:直接映射很难学习。他们提出了一个解决方案:不是学习从x到H(x)的基本映射,而是学习两者之间的差异,即“残差”。然后,为了计算H(x),我们只需要将这个残差添加到输入中。假设残差为F(x)=H(x)-x,现在我们的网络不会直接学习H(x),而是学习F(x)+x。这将我们带到了著名的ResNet(残差网络)模块,您之前可能已经见过:ResNet模块ResNet的每个“块”都由一系列层和一个“快捷方式”连接组成。“快捷方式”将模块的输入和输出连接在一起。然后按元素执行“添加”操作,如果输入和输出的大小不同,则零填充或投影(通过1×1卷积)可以用于获取匹配大小。回到我们的思想实验,这可以大大简化我们对身份层的构建。直观地,学习使F(x)0并保持输出x比学习一个更容易identitytransformationfromscratch。一般来说,ResNet会给层一个“参考”点x,并根据x开始学习。这个想法在实践中出奇的好。以前,深度神经网络经常遇到梯度消失的问题,其中来自误差函数的梯度信号在反向传播回较早的层时呈指数下降。本质上,当误差信号返回较早的层时,它们变得非常小以至于网络无法学习。但是,因为gResNet的辐射信号可以通过shortcuts直接回连到前面的层,我们可以一举构建50层、101层、152层甚至1000+层的网络,而且表现依然不错。在当时,这比当时最好的网络有了巨大的飞跃——22层网络赢得了ILSVRC2014挑战。ResNet是我个人最喜欢的神经网络进步之一。许多深度学习论文通过调整数学、优化和训练过程而没有考虑模型的基本任务,取得了微小的进步。ResNet从根本上改变了我们对神经网络及其学习方式的理解。有趣的事实:上面提到的1000层网络是开源的!我不建议您尝试重新训练,但如果您这样做:https://github.com/KaimingHe/resnet-1k-layers如果您发现这很有用并且有点渴望尝试,我最近将ResNet50移植到开放源ClojureML库Cortex:https://github.com/thinktopic/cortex。你可以尝试一下,看看它与Keras相比如何!Inception如果说ResNet是为了更深层次,那么Inception家族就是为了更广泛。Inception的作者对训练大型网络的计算效率特别感兴趣。换句话说:我们如何在不增加计算成本的情况下扩展神经网络?Inception最早的论文专注于深度网络的新型构建块,现在称为“Inception模块”。该模块的核心是两个视角的交集。第一个见解与操纵图层有关。在传统的卷积网络中,每一层都从前面的层中提取信息,以便将输入数据转换为更有用的表示形式。然而,不同类型的层提取不同种类的信息。5×5卷积核的输出中的信息与3×3卷积核的输出不同,也与***池化核的输出不同……在任意给定的层,我们如何知道什么转换可以提供最“有用”的信息吗?洞察一:为什么不让模型选择?Inception模块在同一个输入映射上并行计算多个不同的转换,并将它们的结果连接到一个输出。也就是说,对于每一层,Inception都进行了5×5卷积变换、3×3卷积变换和***池化。然后模型的下一层决定是否以及如何使用每条信息。这种模型架构的信息密度更大,带来了一个突出的问题:计算成本大大增加。不仅大型(例如5×5)卷积滤波器本身的计算成本很高,而且并排堆叠多个不同的滤波器可以显着增加每层的特征图数量。而这种计算成本的增加成为了我们模型的致命瓶颈。想一想,对于每个额外的过滤器,我们都必须对所有输入映射进行卷积以计算单个输出。如下图所示:从单个过滤器创建输出图涉及对前一层的每个单独图执行计算。假设这里有M个输入映射。添加一个过滤器意味着再对M个映射进行卷积;添加N个过滤器意味着卷积N*M个地图。换句话说,正如作者所指出的:“过滤器数量的任何统一增加都会导致计算量增加4倍。”我们天真的Inception模块只是将过滤器的数量增加了三倍或四倍。但是从计算成本的角度来看,这简直就是一场灾难。这就引出了洞察2:使用1×1卷积来进行降维。为了解决上述计算瓶颈,Inception的作者使用1×1卷积来“过滤”输出的深度。1×1卷积一次只查看一个值,但在多个通道上,它可以提取空间信息并将其压缩到较低的维度。例如,使用20个1×1过滤器,可以将大小为64×64×100(具有100个特征图)的输入压缩为64×64×20。通过减少输入映射的数量,Inception可以将不同的层转换并行堆叠在一起,从而形成既深又宽的网络(许多并行操作)。这个效果如何?Inception的第一个版本是GoogLeNet,即上述赢得ILSVRC2014竞赛的22层网络。一年后,研究人员在第二篇论文中开发了Inceptionv2和v3,并在原始版本上实现了各种改进——其中最引人注目的是将较大的卷积重构为连续的较小卷积,使学习更容易。例如,在v3中,5×5卷积被两个连续的3×3卷积代替。Inception很快成为一个权威的模型架构。最新版本Inceptionv4甚至将残差连接放入每个模块中,创建了一个混合的Inception-ResNet结构。但更重要的是,Inception展示了精心设计的“网络中的网络”架构的能力,这将神经网络的表示能力提升到了一个更高的水平。有趣的事实:最初的Inception论文确实引用了电影《盗梦空间(Inception)》中的“WeNeedtoGoDeeper”网络模因作为其名称的来源,请参阅:http://knowyourmeme.com/memes/we-need-to-更深入。这一定是knowyourmeme.com(http://knowyourmeme.com/)第一次出现在Google论文的参考文献中。第二篇Inception论文(提出v2和v3)在原始ResNet论文发表后的第二天发表。2015年12月是深度学习的好日子。XceptionXception代表“极限开始”。与前两种架构一样,它重塑了我们对神经网络(尤其是卷积网络)的思考方式。正如它的名字所表达的那样,它将Inception的原则推向了极致。它的假设是:“跨通道相关性和空间相关性是完全可分离的,永远不要将它们联合映射。”这是什么意思?在传统的卷积网络中,卷积层同时寻找跨通道空间和跨深度相关性。让我们再看看标准的卷积层:在上图中,过滤器同时考虑了空间维度(每个2×2彩色方块)和跨通道或“深度”维度(4个方块的堆叠)。在输入图像的输入层,这相当于在所有3个RGB通道上查看2×2像素块的卷积滤波器。这就引出了一个问题:我们有什么理由必须同时考虑图像区域和通道?在Inception中,我们开始将两者略微分开。我们使用1×1卷积将原始输入投影到多个独立的较小输入空间,并且对于这些输入空间中的每一个,我们应用不同类型的滤波器来对较小的3D模块执行转换。Xception更进了一步。不是仅仅将输入数据分成几个压缩块,而是为每个输出通道单独映射空间相关性,然后执行1×1深度卷积以获得跨通道相关性。作者指出,这在本质上等同于一种称为“深度可分离卷积”的现有操作,它由一个深度卷积(一个单独的空间卷积)和一个点卷积(一个跨通道的1×1卷积)组成。我们可以将其视为首先在2D空间中进行关联,然后在1D空间中进行关联。可以看出,这种2D+1D的映射比全3D的映射更容易学习。它有效!Xception在ImageNet数据集上的表现略优于Inceptionv3,在具有17,000个类别的更大的图像分类数据集上表现更好。最重要的是,它拥有与Inception相同数量的模型参数,说明它的计算效率也更高。Xception非常新(2017年4月才公开),但如前所述,这种架构已经通过MobileNet为谷歌的移动视觉应用程序提供动力。有趣的事实:Xception的作者也是Keras的作者。FrancoisChollet是一位真正的大师。ResNet、Inception和Xception的未来发展!我坚信,随着这些网络在研究和工业中变得越来越普遍,我们需要对这些网络有很好的直观理解。我们甚至可以通过所谓的迁移学习在我们自己的应用程序中使用它们。迁移学习是一种机器学习技术,我们可以将一个领域(如ImageNet)的知识应用到目标领域,从而大大减少所需的数据点数量。在实践中,这通常涉及使用来自ResNet、Inception等的预训练权重初始化模型,然后将其用作特征提取器,或微调新数据集的前几层。使用迁移学习,这些模型可以重新用于我们想要执行的任何相关任务,从自动驾驶汽车的对象检测到为视频剪辑生成描述。要了解迁移学习,Keras有一个很好的模型微调指南:https://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html。如果您对此感兴趣,请不要错过!原文:https://medium.com/towards-data-science/an-intuitive-guide-to-deep-network-architectures-65fdc477db41《心》原文翻译,微信公众号《机器之心(id:almosthuman2014)》】点此查看该作者更多好文
