必威体育Betway必威体育官网
当前位置:首页 > IT技术

架构之美-最强卷积神经网络架构设计初想

时间:2019-08-23 09:43:19来源:IT技术作者:seo实验室小编阅读:58次「手机版」
 

架构之美

今天迎来了我家两公子周岁生日,在这美好的日子里我用“美”为主题分享一下目前非常火非常火的CNN卷积神经网络

本文目录

最美的是什么?

经典架构回顾

聊一聊这些架构有哪些优缺点

架构设计思考

什么是最美的卷积神经网络

深度学习是近几年迅速发展起来的学科,其在物体识别、检测、跟踪等任务中获得了突破性进展。卷积神经网络(Convolutional Neural Network,CNN)是深度学习中最为重要的分支之一,被大量用于检测、分割、物体识别以及图像的各个领域。

本文先回顾最近几年各种经典的CNN卷积神经网络架构,来领略一下各路大神高超的智慧,聊一聊这些架构有哪些优缺点,从中提炼出一些想法来设计最强最美的卷积神经网络架构。

一、最美的是什么?

在数学中我认为最美的符号是:

在数学中我认为最美的公式是:

这时候我想问自己一个问题,那在深度学习, 计算机视觉中,最美的卷积神经网络是什么?

先不着急,请细读下文,我会给出答案。

二、经典架构回顾

为了不让本文的遍幅过长,本节只聊重点, 只聊重点,各经典架构的详细介绍就烦请读者自行查阅。

上图是ILSVRC历年的Top-5错误率,我们就按照上图中经典架构出现的时间顺序对他们进行简单的总结。

  • LeNet (1998年)

成绩:

LeNet是卷积神经网络的祖师爷LeCun在1998年提出,用于解决手写数字识别的视觉任务。自从那时起,CNN的最基本的架构就定下来了:卷积层、池化层、全连接层。

贡献点:

  • 定义了CNN的基本组件

基本组件包括:卷积层、池化层、全连接层。

  • 层之间连接顺序

卷积层后接池化层,最后接全连接层。

  • AlexNet (2012年)

成绩:

AlexNet在2012年ImageNet竞赛中以超过第二名10.9个百分点的绝对优势一举夺冠,从此深度学习和卷积神经网络名声鹊起,深度学习的研究如雨后春笋般出现,AlexNet的出现可谓是卷积神经网络的王者归来。

贡献点:

  • 更深的网络

比LeNet的5层多了3层。

增强模型的泛化能力,避免过拟合,使用了随机裁剪的思路对原来256×256的图像进行随机裁剪。

  • ReLU

用ReLU代替Sigmoid来加快收敛。

  • 多GPU支持

利用多GPU加速训练。

  • Dropout

有效缓解过拟合。

  • ZFNet (2013年)

下图为AlexNet与ZFNet的比较:

成绩:

ZFNet是2013年ImageNet分类任务的冠军,其网络结构没什么改进,只是调了参数,性能较AlexNet提升了不少。

贡献点:

  • 使用更小的卷积核,更小的滑动步长

将AlexNet第一层卷积核由11变成7,滑动步长由4变为2。

  • VGGNet(2014年)

成绩:

VGGNet是2014年ImageNet竞赛定位任务的第一名和分类任务的第二名中的基础网络。

贡献点:

  • 使用多个小的卷积核代替大的卷积核

上图为两个3X3的卷积核代替一个5X5大的卷积核,在降低参数的同时并建立了更多的非线性变换,使得网络对特征的学习能力更强。

  • 有规则的卷积-卷积-池化操作

VGGNet包含多个conv->conv->max pool这样的结构。

成绩:

GoogLeNet在2014年的ImageNet分类任务上击败了VGGNet夺得冠军,它在加深网络的同时(22层),也在网络结构上做了创新,引入inception结构代替了单纯的卷积+激活的传统操作。

GoogLeNet包括多个版本,如下所示:

Inception V1贡献点:

  • 引入Inception结构

该Inception结构中卷积核的滑动步长为1,通过3×3池化、以及1×1、3×3和5×5这三种不同尺度的卷积核,一共4种方式对输入做特征提取。

  • 中间层的辅助loss单元

GoogLeNet网络结构中有3个loss单元,这样的网络设计是为了帮助网络的收敛,在中间层加入辅助计算的loss单元,目的是计算损失时让低层的特征也有很好的区分能力,从而让网络更好地被训练。

  • 全连接层替换为简单的全局平均pooling

减少参数,提高计算效率。

Inception V2贡献点:

  • 引入BN层,减少Internal Covariate Shift问题

BATch normalization:批标准化,对每一个 Mini-batch 数据进行标准化处理,使输出规范化到 N(0,1) 的正态分布,减少了Internal Covariate Shift(内部神经元分布改变)。

  • 引用了VGGNet中使用多个小的卷积核代替大的卷积核的特性

Inception V3贡献点:

  • Factorization into small convolutions

将一个较大的二维卷积拆成两个较小的一维卷积,如下图所示:

上图为3X3卷积拆成1X3卷积和3X1卷积,也可以将7X7卷积拆成1X7卷积和7X1卷积。

Inception V4,Inception-ResNet-V1,Inception-ResNet-V2贡献点:

什么?这么多? 这些都是Inception结合了 ResNet 中的Residual Connection,或结合 ResNet 可以极大地加速训练,同时极大提升性能,是不是觉得Residual Connection, ResNet很强大,那我们就继续往下看神奇的ResNet吧。

  • ResNet(2015年)

成绩:

2015年何恺明推出的ResNet在ISLVRC和COCO上横扫所有选手,获得冠军。

贡献点:

  • 网络非常深,已经超过百层,甚至千层

设计了一种残差模块让我们可以训练更深的网络。

残差模块结构如下图所示:

上图可以看出,数据经过了两条路线,一条是常规路线,另一条则是捷径(shortcut),直接实现单位映射的路线。

上图展示了两种形态的残差模块,左图是常规残差模块,有两个3×3卷积核组成,但是随着网络进一步加深,这种残差结构在实践中并不是十分有效。针对这问题,右图的“瓶颈残差模块”(bottleneck residual block)可以有更好的效果,它依次由1×1、3×3、1×1这三个卷积层堆积而成,这里的1×1的卷积能够起降维或升维的作用,3×3的卷积可以在相对较低维度的输入上进行,以降低参数从而达到提高计算效率的目的。

  • 引入残差模块来解决退化问题

网络深度增加的一个问题在于这些增加的层是参数更新的信号,因为梯度是从后向前传播的,增加网络深度后,比较靠前的层梯度会很小。这意味着这些层基本上学习停滞了,这就是梯度消失问题。

深度网络的第二个问题在于训练,当网络更深时意味着参数空间更大,优化问题变得更难,因此简单地去增加网络深度反而出现更高的训练误差,深层网络虽然收敛了,但网络却开始退化了,即增加网络层数却导致更大的误差。

  • DenseNet(2017年)

其中Dense Block的结构图如下:

成绩:

2017最佳论文。

贡献点:

  • 密集连接:加强特征传播,鼓励特征复用

DenseNet是一种具有密集连接的卷积神经网络。在该网络中,任何两层之间都有直接的连接,也就是说,网络每一层的输入都是前面所有层输出的并集,而该层所学习的特征图也会被直接传给其后面所有层作为输入。

  • 密集连接:缓解梯度消失问题

这种Dense Connection相当于每一层都直接连接input和loss,因此就可以减轻梯度消失现象,这样更深的网络不是问题。

  • 极大的减少了参数量,提高计算效率

由于每一层都包含之前所有层的输出信息,因此它不需要再重新学习多余的特征图,仅学习少量的几层特征图就可以了。

三、聊一聊这些架构有哪些优缺点

在上面回顾部分,对经典架构中的各种优点(贡献点)简单的做了说明,那这些架构是不是也有一些没有解决或没有考虑到的问题,下面我们简单的来聊一聊。

1.AlexNet、ZFNet、VGGNet

性能比GoogLeNet、ResNet、DenseNet要差一些,所以重点来聊GoogLeNet、ResNet、DenseNet。

2.GoogLeNet

  • GoogLeNet以及 Inception的结构复杂吗?

我认为当时没有Residual Connection/Dense Connection这样神奇的设计,在网络深度很难增加时,就在网络宽度上做了创新(即引入了Inception结构),并设计各种规格来提高性能,导致网络过于复杂。

3.ResNet

  • 引入了Residual Connection训练很深的网络,是否会导致有些层没有作用?

实验表明:丢掉某些层对网络没有影响,即存在没有作用的层。

问题1:没有作用的层带来的存储及计算是浪费的?

问题2:没有作用的层如何量化?即有多少?

  • Block数量怎样的配置为最好?

ResNet50中Block数量分别是(3, 4, 6, 3)

ResNet101中Block数量分别是(3, 4, 23, 3)

问题1:手动配置很难是最好的,那是否有更优的方案

4.DenseNet

  • 引入了Dense Connection每一层的输入为前面所有层输出特征图的堆叠,这些输入的特征图都全部利用上了吗?

实验表明:存在某些层没有全部利用输入的所有特征图。

问题1:没有利用上的特征图带来的计算是浪费的?

问题2:没有利用上的特征图如何量化?即有多少?

  • Dense Connection的设计只能在Dense Block内吗?

问题1:Block与Block之间的特征图没有得到很好复用?

  • Block数量怎样的配置为最好吗?

DenseNet121中Block数量分别是(6, 12, 24, 16)

DenseNet169中Block数量分别是(6, 12, 32, 32)

问题1:手动配置很难是最好的,那是否有更优的方案?

5.共存的问题

  • 简单/一般/复杂的任务都要经过这么复杂的网络吗?

问题1:很明显,简单的任务几层的网络就可以做到,那是否有更优的方案?

问题2:某个场景只有一些简单的任务,但由于内存等原因不能加载这么复杂的网络,是否可以通过卸载该网络某些能力,就可以使用?

问题3:如果有更复杂的任务,该网络是否有通过扩展使它的能力更强?

四、架构设计思考

从AlexNet到ZFNet到VGGNet、GoogLeNet再到ResNet和DenseNet,网络越来越深、越来越宽、越来越复杂、性能也越来越高、解决反向传播时梯度消失的方法也越来越巧妙,但如果让我们来设计强大的网络我们会采用什么样的方法呢?当然最快最好的方法就是把各路大神的成果直接拿来使用:

  • 数据增广
  • BN
  • ReLU
  • 全连接层替换为简单的全局平均pooling
  • 引入Residual Connection
  • 引入Dense Connection
  • 引入Inception相似结构

这里不完全采用GoogLeNet中的Inception结构,而是做了简化,如今网络在深度方面已不是问题,再加上已通过大量实验表明,多个小的卷积替换大的卷积是可行的,并且多个小的卷积增加了更多的非线性变换,使得网络对特征的学习能力更强,因此我认为网络在深度/宽度上堆叠如下简单结构可以达到各种神奇的效果:

想降低参数或想升维/降维就可以在前面增加一个Conv 1X1如下图所示:

还缺什么?

现已经在网络深度、网络宽度都得到很好的解决,想一想还缺什么?

也许你想到了,还缺网络广度。

网络广度? 网络广度是什么?请继续看下面的内容

五、SmartNet

SmartNet是什么?是一个新的网络架构,从网络深度、网络宽度、网络广度等方面来提高网络的性能,并来解决上面所提到的问题。

1.SmartNet架构

  • 该架构怎么看上去很像DenseNet,但又多了许多连接?

对,很像DenseNet,其实图中的Smart Block就跟Dense Block几乎差不多,只是把Connection连接也引用到Block与Block之间,使得特征图最大化复用。同时把Dense Connection改名为Smart Connection,把Dense Block改名为Smart Block。

  • 为什么把Dense Connection改名为Smart Connection?

这里利用Smart Connection连接,来解决(“没有利用上的特征图带来的计算是浪费的?”)的问题,即通过Smart Connection连接表示没有利用上的特征图不参与计算,细心的读者可能已看到了箭头线是虚线。

  • 该架构中只看到第一层与后面的层有Smart Connection连接?

其实每一个Smart Block的输入与前面所有的Smart Block的输出都有Smart Connection连接,图中只是省略了,画太多连线就不好看了(给自己找一个借口,其实就是画不好嘛!)。

  • 为什么把Dense Block改名为Smart Block?

先不着急,下面会有详细的解释。

  • 架构中还有许多方向路标?DenseNet只有一个前进方向,SmartNet怎么有两个方向?

嗯,细心的读者可能已发现,图中上面的行所画的特征图比下面的行所画的特征图多,即想表达的意思让该网格在图中向右方向,表示的是网络的深度越来越深,性能也越来越高,在图中向下方向,表示的是只要能达到目标就找最近的出口出来,如下图所示:

这也是本文所指的网络广度(网络需要自己学习根据任务的难易程度自动选择最优的路径)。

举例子可能更容易理解,架构图中第一行Smart Block学习4个特征图(这里4是虚似值,实际可能是8,16,32,64,128等),下面我们假设Smart Block学习的特征图数写在特征图右上角,并假设这个值为每个Smart Block运行时间单位数(可以这样理解,学习1个特征图需要1个时间单位,学习8个特征图就需要8个时间单位),如下图所示:

2.特征图上三角矩阵

什么?特征图上三角矩阵?之前只知道特征金字塔。

嗯,FPN就是近些年其中一种特别火也特别有用的特征金字塔网络,但与这个特征图上三角矩阵可不是同一个东西。该特征图上三角矩阵是统一存储(网络学习出来的)特征图的地方并共享给后面所有Block来使用。

3.网络中几个关键点

  • 最优的路径?

网络需要自己学习选择最优的路径。(这个可以考虑使用Condition GAN来训练生成一些隐信息来控制或使用强化学习)。

  • Smart Connection?

网络需要自己学习选择对Block有用的特征图。

  • Smart Block?

为了更加智能,Block中的层数最强的网络应该是自己学习得到的,这也就是为什么把Dense Block改名为Smart Block的原因。

  • 每组Block输出的特征图尺寸不一样?

可以采用不同大小的pooling或采用Fast/faster RCNN中的ROI Pooling对不同大小的特征图映射到固定的大小。

  • 网络的参数?

这个同DenseNet一样,由于每一层都包含之前所有层的输出信息,因此它不需要再重新学习多余的特征图,仅学习少量的几层特征图就可以了。

  • 多个出口?

后一个出口是对前一个出口的增强。

即input4>input3>input2>input1。

  • 增减衣服最简易操作原则?

该网络符合我们从小都懂的一个增减衣服最简易操作原则,即天热时,减去最外层的衣服,天冷时,在最外层基础上增加一层衣服。

这样的网络优势很多,网络可以按出口存储,按出口加载。

对于一般的任务,只加载前几个出口相关的参数即可,甚至以后网络还有类似GC功能(垃圾回收器),动态加载与回收出口相关的参数来提高运行效率。

  • 如何训练?

一个出口一个出口训练。

题外话:众所都知目前的人工神经网络只学习W与b参数,可能还存在另外的参数需要学习,来使得我们的网络更强。

4.总结

为了我们的人工智能更加智能,最强的网络应该是在我们给定的目标下(如:内存、计算时间、正确率等),网络会自动初化化如上面所说的特征图上三角矩阵大小,甚至通过学习来调整特征图上三角矩阵的大小,并学习选择最优的路径。这个时候我们好像只需要给定几个超参数,其余的一切网络都会自己学习到。

在这里我们把这最强的网络赋能给原始的CNN。

有了这样的网络我们是不是不用关心AlexNet、VGGNet、GoogLeNet、ResNet、DenseNet、SmartNet、甚至是已在路上的XXXNet或未来的YYYNet,只需要关心的是我们使用CNN卷积神经网络就可以了。

多管齐下、化繁为简、岂不美哉!!!

是时候给出开头问题的答案了。

最美的卷积神经网络是什么?

我认为最美的卷积神经网络是:

在CNN中我认为最美的卷积是:

以上网络还有很多问题值得去思考,这里只是抛出想法,本人在这方面资历尚浅,可能有许多不准确或不正确的地方,欢迎指正及提出您们宝贵的意见与建议。

文章是原创,若是转载,请标明出处。

知乎上连接 https://zhuanlan.zhihu.com/p/39120334

相关阅读

卷积神经网络(CNN)中的卷积核 概念 原理

作者:Tim Dettmers(Understanding Convolution in Deep Learning) 原文地址: http://www.yangqiu.cn/aicapital/2382000.html 有太

基于卷积神经网络的推荐算法

基于卷积神经网络的推荐算法论文信息:华南理工大学   吴浠  16年硕毕论目的:将卷积神经网络应用到推荐系统,缩短训练时间。为此工

卷积神经网络(CNN)基本原理和公式推导

卷积神经网络是一种前馈型神经网络, 受生物自然视觉认知机制启发而来的. 现在, CNN 已经成为众多科学领域的研究热点之一, 特别是

变形卷积核、可分离卷积?卷积神经网络中十大拍案叫绝的

总结的非常好,故转来,如果侵权,请告知,会及时删掉。大家还是去看原文好,作者的文章都不错:https://zhuanlan.zhihu.com/p/28749411https

卷积神经网络概念和理解

卷积神经网络的基本概念受Hubel和Wiesel对猫视觉皮层电生理研究启发,有人提出卷积神经网络(CNN),Yann Lecun 最早将CNN用于手写数字识

分享到:

栏目导航

推荐阅读

热门阅读