学生联盟网为您提供优质参考范文! 体会工作报告法律咨询精彩演讲各类材料
当前位置: 学生联盟网 > 教案大全 > 数学教案 > resnet,alexnet,vgg,inception理解各种各样的cnn架构

resnet,alexnet,vgg,inception理解各种各样的cnn架构

时间:2021-11-28 13:31:26 来源:学生联盟网

构作者叶 虎 编辑王抒伟 本文翻译自 ResNet,AlexNet,VGG,Inception Understanding various architectures of Convolutional Networkshttp//cv- et-vgg-inception/ 原作者保留版权。卷积神经网络( CNN )在视觉识别任务上的表现令人称奇。好的 CNN 网络是带有 上百万参数和许多隐含层的“庞然怪物”。事实上,一个不好 的经验规则是网络越深,效果越好。AlexNet ,VGG ,Inception 和 ResNet 是最近一些流行的 CNN 网络。

  为什么这些网络表现如此之好它们是如何设计出来的 为什么它们设计成那样的结构回答这些问题并不简单,但 是这里我们试着去探讨上面的一些问题。

  网络结构设计是一个复杂的过程,需要花点时间去学习,甚 至更长时间去自己动手实验。首先,我们先来讨论一个基本 问题。为什么 CNN 模型战胜了传统的计算机视觉方法 1 图像分类指的是给定一个图片将其分类成预先定义好的几 个类别之一。图像分类的传统流程涉及两个模块特征提取 和分类特征提取 指的是从原始像素点中提取更高级的特征,这些特征能捕捉到各个类别间的区别。这种特征提取是使用无监督方式,从像素点中提取信息时没有用到图像的类别标 签。常用的传统特征包括 GIST,HOG,SIFT,LBP 等。特征提取 之后,使用图像的这些特征与其对应的类别标签训练一个分 类模型。常用的分类模型有 SVM ,LR ,随机森林及决策树 等。上面流程的一大问题是特征提取不能根据图像和其标签进 行调整。如果选择的特征缺乏一定的代表性来区分各个类别,模型的准确性就大打折扣,无论你采用什么样的分类策略。

  采用传统的流程,目前的一个比较好的方法是使用多种特征 提取器,然后组合它们得到一种更好的特征。但是这需要很多启发式规则和人力来根据领域不同来调整 参数使得达到一个很好的准确度,这里说的是要接近人类水 平。这也就是为什么采用传统的计算机视觉技术需要花费多年 时间才能打造一个好的计算机视觉系统(如 OCR ,人脸验 证,图像识别,物体检测等),这些系统在实际应用中可以 处理各种各样的数据。有一次,我们用了 6 周时间为一家公司打造了一个 CNN 模 型,其效果更好,采用传统的计算机视觉技术要达到这样的 效果要花费一年时间。传统流程的另外一个问题是它与人类学习识别物体的过程 是完全不一样的。自从出生之初,一个孩子就可以感知周围 环境,随着他的成长,他接触更多的数据,从而学会了识别 物体。这是深度学习背后的哲学,其中并没有建立硬编码的特征提 取器。它将特征提取和分类两个模块集成一个系统,通过识 别图像的特征来进行提取并基于有标签数据进行分类。这样的集成系统就是多层感知机,即有多层神经元密集连接 而成的神经网络。一个经典的深度网络包含很多参数,由于缺乏足够的训练样 本,基本不可能训练出一个不过拟合的模型。但是对于 CNN 模型,从头开始训练一个网络时你可以使用 一个很大的数据集如 ImageNet 。这背后的原因是 CNN 模型 的两个特点神经元间的权重共享和卷积层之间的稀疏连接。

  这可以从下图中看到。在卷积层,某一个层的神经元只是和 输入层中的神经元局部连接,而且卷积核的参数是在整个 2-D 特征图上是共享的为了理解 CNN 背后的设计哲学,你 可能会问其目标是什么 2 (1)准确度如果你在搭建一个智能系统,最重要的当然是 要尽可能地准确。公平地来说,准确度不仅取决于网路,也 取决于训练样本数量。

  因此,CNN 模型一般在一个标准数据 集 ImageNet 上做对比。ImageNet 项目仍然在继续改进,目前已经有包含 21841 类 的 14,197,122 个图片。自从 2010 年,每年都会举行 ImageNet 图像识别竞赛,比赛会提供从 ImageNet 数据集中 抽取的属于 1000 类的 120 万张图片。

  每个网络架构都是在这 120 万张图片上测试其在 1000 类上 的准确度。(2)计算量大部分的 CNN 模型都需要很大的内存和计算量,特别是在 训练过程。

  因此,计算量会成为一个重要的关注点。

  同样地,如果你想部署在移动端,训练得到的最终模型大小也需要特 别考虑。你可以想象到,为了得到更好的准确度你需要一个计算更密 集的网络。因此,准确度和计算量需要折中考虑。除了上面两个因素,还有其他需要考虑的因素,如训练的容 易度,模型的泛化能力等。下面按照提出时间介绍一些最流 行的 CNN 架构,可以看到它们准确度越来越高。AlexNet3AlexNethttp//papers.nips.cc/paper/4824-image net-classification-with-deep-convolutional-neural-networks .pdf 是一个较早应用在 ImageNet 上的深度网络,其准确度 相比传统方法有一个很大的提升。它首先是 5 个卷积层,然 后紧跟着是 3 个全连接层,如下图所示 Alex Krizhevs 提出 的 AlexNet 采用了 ReLU 激活函数,而不像传统神经网络早期所采用的Tanh或Sigmoid激活函数,ReLU数学表达为fxmax0,xReLU 相比 Sigmoid 的优势是其训练速度更快,因为 Sigmoid 的导数在稳定区会非常小,从而权重基本上不再更新。这就 是梯度消失问题。因此 AlexNet 在卷积层和全连接层后面都 使用了 ReLU 。AlexNet 的另外一个特点是其通过在每个全连接层后面加上 Dropout 层减少了模型的过拟合问题。

  Dropout 层以一定的 概率随机地关闭当前层中神经元激活值,如下图所示为什 么 Dropout 有效Dropout 背后理念和集成模型很相似。

  在 Drpout 层,不同的 神经元组合被关闭,这代表了一种不同的结构,所有这些不 同的结构使用一个的子数据集并行地带权重训练,而权重总 和为 1 。如果Dropout层有n个神经元,那么会形成2An个不同的子结构。在预测时,相当于集成这些模型并取均值。这种结 构化的模型正则化技术有利于避免过拟合。Dropout 有效的另外一个视点是 由于神经元是随机选择的,所以可以减少神经元之间的相互依赖,从而确保提取出相互 独立的重要特征。VGG164 VGG16https//arxiv.org/abs/1409.1556是牛津大学 VGG 组提出的。

  VGG16 相比 AlexNet 的一个改 进是采用连续的几个 3x3 的卷积核代替 AlexNet 中的较大卷 积核( 11x11 ,5x5 )。对于给定的感受野(与输出有关的输入图片的局部大小),采用堆积的小卷积核是优于采用大的卷积核,因为多层非线 性层可以增加网络深度来保证学习更复杂的模式,而且代价 还比较小(参数更少)。比如,3 个步长为 1 的 3x3 卷积核 连续作用在一个大小为 7的感受野,其参数总量为 3*(9CA2),如果直接使用7x7卷积核,其参数总量为49CA2,这里 C指的是输入和输出的通道数。而且 3x3 卷积核有利于更好地保持图像性质。

  VGG 网络的 架构如下表所示 可以看到 VGG-D ,其使用了一种块结构 多次重复使用同一大小的卷积核来提取更复杂和更具有表 达性的特征。这种块结构( blocks/modules )在 VGG 之后 被广泛采用。VGG 卷积层之后是 3 个全连接层。网络的通道数从较小的 64 开始,然后每经过一个下采样或者池化层成倍地增加,当 然特征图大小成倍地减小。最终其在 ImageNet 上的 Top-5 准确度为 92.3 。GoogLeNet / Inception5尽管 VGG 可以在 ImageNet 上表现很好,但是将其部署在 一个适度大小的 GPU 上是困难的,因为需要 VGG 在内存和 时间上的计算要求很高。由于卷积层的通道数过大,VGG 并不高效。比如,一个 3x3 的卷积核,如果其输入和输出的通道数均为 512 ,那么需要的计算量为 9x512x512 。在卷积操作中,输 出特征图上某一个位置,其是与所有的输入特征图是相连的,这是一种密集连接结构。GoogLeNethttps//arxiv.org/pdf/1409.4842v1.pdf 基于这样的理念在深度网路中大部分的激活值是不必要的(为 0 ),或者由于相关性是冗余。

  因此,最高效的深度网路 架构应该是激活值之间是稀疏连接的,这意味着 512 个输出 特征图是没有必要与所有的 512 输入特征图相连。

  存在一些技术可以对网络进行剪枝来得到稀疏权重或者连 接。但是稀疏卷积核的乘法在 BLAS 和 CuBlas 中并没有优 化,这反而造成稀疏连接结构比密集结构更慢。据此,GoogLeNet 设计了一种称为 inception 的模块,这个 模块使用密集结构来近似一个稀疏的 CNN ,如下图所示。

  前面说过,只有很少一部分神经元是真正有效的,所以一种 特定大小的卷积核数量设置得非常小。同时,GoogLeNet 使用了不同大小的卷积核来抓取不同大小的感受野。Inception 模块的另外一个特点是使用了一中瓶颈层 (实际上 就是 1x1 卷积)来降低计算量 这里假定 Inception 模块的输入为 192 个通道,它使用 128 个 3x3 卷积核和 32 个 5x5 卷积核。

  5x5 卷积的计算量为 25x32x192 ,但是随着网络变深,网络的通道数和卷积核数 会增加,此时计算量就暴涨了。为了避免这个问题,在使用 较大卷积核之前,先去降低输入的通道数。所以,Inception 模块中,输入首先送入只有 16 个卷积核的 1x1 层卷积层,然后再送给 5x5 卷积层。这样整体计算量会 减少为 16x19225x32x16 。这种设计允许网络可以使用更大 的通道数。(译者注之所以称 1x1 卷积层为瓶颈层,你可以想象一下 一个 1x1 卷积层拥有最少的通道数,这在 Inception 模块中 就像一个瓶子的最窄处)GoogLeNet 的另外一个特殊设计是最后的卷积层后使用全 局均值池化层替换了全连接层,所谓全局池化就是在整个 2D 特征图上取均值。这大大减少了模型的总参数量。要知道在 AlexNet 中,全连 接层参数占整个网络总参数的 90 。使用一个更深更大的网 络使得 GoogLeNet 移除全连接层之后还不影响准确度。其 在 ImageNet 上的 top-5 准确度为 93.3 ,但是速度还比 VGG 还快。ResNet 6 从前面可以看到,随着网络深度增加,网络的 准确度应该同步增加,当然要注意过拟合问题。但是网络深 度增加的一个问题在于这些增加的层是参数更新的信号,因 为梯度是从后向前传播的,增加网络深度后,比较靠前的层 梯度会很小。这意味着这些层基本上学习停滞了,这就是梯度消失问题。

  深度网络的第二个问题在于训练,当网络更深时意味着参数 空间更大,优化问题变得更难,因此简单地去增加网络深度 反而出现更高的训练误差。残差网络 ResNethttps//arxiv.org/abs/1512.03385 设计一种残差模块让我们可以训练更深的网络 深度网络的训练问题称为退化问题,残差单元可以解决退化 问题的背后逻辑在于此 想象一个网络 A ,其训练误差为 x。现在通过在A上面堆积更多的层来构建网络B ,这些新增的层什么也不做,仅仅复制前面 A 的输出。这些新增的层称为 C。这意味着网络 B 应该和 A 的训练误差一样。

  那么,如果训练 网络 B 其训练误差应该不会差于A 。但是实际上却是更差,唯一的原因是让增加的层 C 学习恒等映射并不容易。

  为了解决这个退化问题,残差模块在输入和输出之间建立了 一个直接连接,这样新增的层 C 仅仅需要在原来的输入层基 础上学习新的特征,即学习残差,会比较容易。与 GoogLeNet 类似,ResNet 也最后使用了全局均值池化层。

  利用残差模块,可以训练 152 层的残差网络。其准确度比VGG 和 GoogLeNet 要高,但是计算效率也比 VGG 高。152 层的 ResNet 其 top-5 准确度为 95.51 。ResNet 主要使用 3x3 卷积,这点与 VGG 类似。在 VGG 基 础上,短路连接插入进入形成残差网络。如下图所示残差 网络实验结果表明 34 层的普通网络比 18 层网路训练误差 还打,这就是前面所说的退化问题。但是 34 层的残差网络 比 18 层残差网络训练误差要好。总结 7 随着越来越复杂的架构的提出,一些网络可能就流 行几年就走下神坛,但是其背后的设计哲学却是值得学习的。

  这篇文章对近几年比较流行的 CNN 架构的设计原则做了一 个总结。译者注可以看到,网络的深度越来越大,以保证得到更好 的准确度。网络结构倾向采用较少的卷积核,如 1x1 和 3x3 卷积核,这说明 CNN 设计要考虑计算效率了。

  一个明显的趋势是采用模块结构,这在 GoogLeNet 和 ResNet 中可以看到,这是一种很好的设计典范,采用模块 化结构可以减少我们网络的设计空间,另外一个点是模块里 面使用瓶颈层可以降低计算量,这也是一个优势。

  这篇文章没有提到的是最近的一些移动端的轻量级 CNN 模 型,如 MobileNet ,SqueezeNet ,ShuffleNet 等,这些网络 大小非常小,而且计算很高效,可以满足移动端需求,是在 准确度和速度之间做了平衡。参考文献8http//cv- ception/ 机器学习算法全栈工程师 一个用心的公众号长按,识别,加关注 进群,学习,得帮助你的关注,我们的热度,我们一定给你 学习最大的帮助公众号商务合作请联系