常见的网络结构

随着深度学习的普及开来,设计一个网络结构变得越来越“简单”,如果一个新的网络只是简单的卷积、池化、全连接,改改其中的参数,那就大错特错了。所以网络在应用中,往往要面临的问题是:如何设计一个好的网络结构。

目前常见的网络结构:AlexNet、ZF、GoogLeNet、VGG、ResNet等等都可谓曾一战成名,它们都具有自身的特性,它们都提出了创新点。设计一个优秀网络的第一步是学习这些优秀的网络。

LeNet

是由Yann LeCun完成的具有开拓性的卷积神经网络,是大量网络结构的起点。网络给出了卷积网络的基本特性:

1.局部感知。人对外界的认知是从局部到全局的,相邻局部的像素联系较为紧密。每个神经元没必要对全局图像进行感知,只需要对局部进行感知,然后更高层将局部的信息综合起来得到全局的信息。

2.多层卷积。层数越高,学到的特征越全局化。

3.参数共享。每个卷积都是一种提取特征的方式,大大降低了参数的数目。

4.多卷积核。提取多类特征,更为丰富。

5.池化。降低向量维度,并避免过拟合。

特性1自然引出了特性2,特性3自然引出了特性4。

网络用于mnist手写体识别任务,网络结构用 http://ethereon.github.io/netscope/#editor 查看,常见网络:http://ethereon.github.io/netscope/quickstart.html 。down

AlexNet

2012年,深度学习崛起的元年,Alex Krizhevsky 发表了Alexet,它是比LeNet更深更宽的版本,并以显著优势赢得了ImageNet竞赛。贡献有:

1.使用RELU作为激活单元。

2.使用Dropout选择性忽略单个神经元,避免过拟合。

3.选择最大池化,避免平均池化的平均化效果。

AlexNet是目前应用极为广泛的网络,结构讲解见:http://blog.csdn.net/sunbaigui/article/details/39938097。 down

网络整体上给我们带来了三个结构模块:

1、单层卷积的结构:conv-relu-LRN-pool。前面的卷积步长大,快速降低featureMap的大小(较少后面的计算量),后面深层卷积保持featureMap大小不变。LRN的功能放在今天来看是无关痛痒的,并不是很强。

2、多层卷积的结构,网络更深,特征更抽象。

3、全连接的结构,drop避免过拟合。down

CaffeNet

AlexNet网络的变体,网络结构的变动主要是调整了pool和norm的位置。 down

ZFNet

由 Matthew D Zeiler和Rob Fergus于2013年在“Visualizing and Understanding Convolutional Networks”论文中提出,属于AlexNet网络的变体。论文具有重要意义,阐述了卷积网络为什么有效,ZF网络是他们顺带提出来的。ZF在faster rcnn等应用中做为特征提取模块被广泛应用,一般来讲比AlexNet略优。

主要的改动是:减少第一层卷积的size和stride(11->7、4->2),提取更多的底层特征,增加第二层卷积的步长stride(1->2)。从而取得到了和AlexNei基本相同的感知野,featureMap的大小相同,后面的卷积计算量也保持不变。 down

VGG

VGG-16又称为OxfordNet,是由牛津视觉几何组(Visual Geometry Group)开发的卷积神经网络结构。该网络赢得了ILSVR(ImageNet)2014的冠军。时至今日,VGG仍然被认为是一个杰出的视觉模型——尽管它的性能实际上已经被后来的Inception和ResNet超过了。

网络结构:http://ethereon.github.io/netscope/#/preset/vgg-16

我们就看D(VGG16)和E(VGG19)好了。因为前面的网络效果没有D和E的效果好,而且比起D和E来讲不够简洁。

VGG是把网络分为5组(模仿AlexNet的五层),然而它使用了3*3的过滤器,并把它们组合起来作为一个卷积序列进行处理。特征:

1.网络更深DCNN,channel数目更大。

2.采用多个3*3的卷积,模仿出更大的感受野的效果。这些思想也被用在了后续的网络架构中,如 Inception 与 ResNet。

NIN

NIN中的MLPconv是对conv+relu的改进,conv+relu构建的是一个广义线性模型。举例子解释:假设现在有一个3x3的输入,用一个9维的向量x代表,卷积核大小也是3x3,也9维的向量w代表。

1.对于常规卷积层,直接x和w求卷积,然后relu一下就好了。
2.maxout,有k个的3x3的w(这里的k是自由设定的),分别卷积得到k个1x1的输出,然后对这k个输入求最大值
3.NIN,有k个3x3的w(这里的k也是自由设定的),分别卷积得到k个1x1的输出,然后对它们都进行relu,然后再次对它们进行卷积,结果再relu。(这个过程,等效于一个1*1的卷积网络

maxout想表明它能够拟合任何凸函数,也就能够拟合任何的激活函数;NIN想表明它不仅能够拟合任何凸函数,而且能够拟合任何函数。

使用多层感知机这种微网络结构后,可以抽象出更好的局部特征,增加局部模型的表达能力。基于MLPconv,在最后类别输出时可以不采用全连接操作,而是将特征图和类别之间建立一致性,采用全局平均池化的方法,每个特征图的平均值即为每个类别的置信度。

例如:一共有100类,那么在最后一层的输出feature map则为100,计算这100张feature map的平均值,作为这100类的置信度。

NIN的优点:

1.更好的局部抽象能力,这是MLPconv带来的。
2.全局平均池化,不需要全连接的参数优化,避免过拟合。
3.参数更少,模型更小。

网络结构见:http://ethereon.github.io/netscope/#/preset/nin

GoogLeNet

Christian Szegedy开始追求减少深度神经网络的计算开销,并于2014年设计出 GoogLeNet——第一个 Inception 架构。

“Going Deeper with Convolutions”中google提出了Inception模块:

受NIN的启发,Inception的思路是减少每一层的特征过滤器的数目,从而减少运算量。用 1*1的卷积块在昂贵的并行模块之前减少特征的数量,比 AlexNet 与 VGG 的分类器的运算数量少得多。这种做法一般称为瓶颈层(Bottleneck)。

而且,尽管我们做了更好的运算,我们在此层也没有损失其通用性(generality)。事实证明瓶颈层在 ImageNet 这样的数据集上已经表现出了顶尖水平,而且它也被用于接下来介绍的 ResNet 这样的架构中。

它之所以成功是因为输入特征是相关联的,因此可通过将它们与 1×1 卷积适当结合来减少冗余。然后,在小数量的特征进行卷积之后,它们能在下一层被再次扩展成有意义的结合。down

Inception

Christian 和他的团队都是非常高产的研究人员。2015 年 2 月,Batch-normalized Inception 被引入作为 Inception V2(论文:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift)。Batch-normalization 在一层的输出上计算所有特征映射的均值和标准差,并且使用这些值规范化它们的响应。因此使得所有神经图(neural maps)在同样范围有响应,而且是零均值,这有助于训练,还能重点关注如何最好的结合这些特征。

2015 年 12 月,该团队发布 Inception 模块和类似架构的一个新版本V3(论文:Rethinking the Inception Architecture for Computer Vision)。该论文更好地解释了原始的 GoogLeNet 架构,在设计选择上给出了更多的细节。

1.通过谨慎建筑网络,平衡深度与宽度,从而最大化进入网络的信息流。
2.当深度增加时,网络层的深度或者特征的数量也系统性的增加。使用每一层深度增加在下一层之前增加特征的结合。
3.只使用 3×3 的卷积,可能的情况下给定的 5×5 和 7×7 过滤器能分成多个 3×3。新的Inception结构为:

也可以通过将卷积平整进更多复杂的模块中而分拆过滤器:将3*3拆分为3*1和1*3的两个过滤器。在进行 inception 计算的同时,Inception 模块也能通过提供池化降低数据的大小。

ResNet

2015 年 12 月又出现了新的变革,这和 Inception V3 出现的时间一样。ResNet 有着简单的思路:供给两个连续卷积层的输出,并分流(bypassing)输入进入下一层(论文:Deep Residual Learning for Image Recognition),在imagenet2015夺得冠军。

计算机视觉领域,特征随着网络加深而愈加抽象,而且深层网络也会带来梯度弥散/爆炸等问题。而且在实践中,深层网络(很深)的性能会劣于浅层网络,这反映了一个事实:非线性网络无法逼近恒等映射网络(y=x)。所以我们转而去学习恒等映射的扰动。

ResNet要学习的便是残差函数:,残差块的结构是:

这是第一次网络层数超过一百,甚至还能训练出 1000 层的网络。实际中,考虑计算的成本,对残差块做了计算优化,即将两个3x3的卷积层替换为1x1 + 3x3 + 1x1。

通过首先是由带有更小输出(通常是输入的 1/4)的 1×1 卷积较少特征的数量,然后使用一个 3×3 的层,再使用 1×1 的层处理更大量的特征。类似于 Inception 模块,这样做能保证计算量低,同时提供丰富的特征结合。

Inception V4

Inception V4 也结合了 Inception 模块和 ResNet 模块:

满满的启发式应用,很难给出良好的解释,考虑到网络的间接性,ResNet就很不错了。

时间: 2024-11-09 15:46:47

常见的网络结构的相关文章

Open stack生产环境中几种常见的网络结构

一.概述 想必接触过Open stack的人都知道,Opens stack中最复杂的是网络部份,在实际的生产环境中更是如此,实际场景下往往不仅有Open stack网络,还有外部网络(Open stack将其无法管理的网络统称为外部网络),即便在Open stack内部,客户也有不同的网络诉求,本文选取2个案例对常见的网络模型进行说明. 二.案例说明 1.运营商网络和租户网络 Open stack是面向众多租户提供服务的云操作系统,由租户自行创建的网络称为租户网络,但有时候会出现以下这种情况:

深度神经网络可视化工具集锦

深度神经网络可视化工具集锦 雷锋网按:原文作者zhwhong,载于作者的个人博客,雷锋网(公众号:雷锋网)经授权发布.  TensorBoard:TensorFlow集成可视化工具 GitHub官方项目:https://github.com/tensorflow/tensorflow/tree/master/tensorflow/tensorboard TensorBoard 涉及到的运算,通常是在训练庞大的深度神经网络中出现的复杂而又难以理解的运算. 为了更方便 TensorFlow 程序的理

使用深度RNN模型构建语义搜索引擎

/* 版权声明:可以任意转载,转载时请标明文章原始出处和作者信息 .*/ author: 张俊林 本文讨论如何用深度学习系统来构造语义搜索引擎的问题.这里所谓的语义搜索,是指的能做用户查询和搜索网页之间的语义级别匹配,比如说,用户输入"Iphone",虽然某篇文章讲到了"苹果公司正在试图做新型的手机",但是没有明确说iphone的字样,那么即使如此也能够将这篇文章找出来.传统的搜索引擎对于这种情况是无能为力的,因为它们基本上还是基于字面匹配作为排序的基础的,没有任何

TensorFlow与主流深度学习框架对比

引言:AlphaGo在2017年年初化身Master,在弈城和野狐等平台上横扫中日韩围棋高手,取得60连胜,未尝败绩.AlphaGo背后神秘的推动力就是TensorFlow--Google于2015年11月开源的机器学习及深度学习框架. TensorFlow在2015年年底一出现就受到了极大的关注,在一个月内获得了GitHub上超过一万颗星的关注,目前在所有的机器学习.深度学习项目中排名第一,甚至在所有的Python项目中也排名第一.本文将带我们简单了解下TensorFlow,并与其他主流深度学

TensorFlow学习路径【转】

作者:黄璞链接:https://www.zhihu.com/question/41667903/answer/109611087来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 前言:其实TensorFlow本身仅仅是一个分布式的高性能计算框架,想要用TF做深度学习,仅仅学习这个框架本身是没有太大意义的.因此应该将TF看作技术路线中的一个核心点,去掌握整个开发所需要的必要技术,知识.尤其是深度学习的基本原理,这对日后搭建模型,模型调参以至提出新的模型都是极其有用的.

【论文笔记】A Review on Deep Learning Techniques Applied to Semantic Segmentation

A Review on Deep Learning Techniques Applied to Semantic Segmentation 2018-02-22  10:38:12   1. Introduction: 语义分割是计算机视觉当中非常重要的一个课题,其广泛的应用于各种类型的数据,如:2D image,video,and even 3D or volumetric data. 最近基于 deep learning 的方法,取得了非常巨大的进展,在语义分割上也是遥遥领先于传统算法. 本

深度学习中几种常用的模型

最近再从事深度学习方面的工作,感觉还有很多东西不是很了解,各种网络模型的结构的由来还不是很清晰,在我看来所有的网络都是一层层的卷积像搭积木一样打起来的,由于还没实际跑所以还没很深刻感受到几种网络类型的区别,在此我想梳理一下几种常见的网络结构,加深一下理解. 本文转自此文https://www.cnblogs.com/houkai/p/6553221.html,此文条理清晰,总结较为到位. 目前常见的网络结构:AlexNet.ZF.GoogLeNet.VGG.ResNet等等都可谓曾一战成名,它们

Tensorflow 与Caffe(转)

TensorFlow TensorFlow 是相对高阶的机器学习库,用户可以方便地用它设计神经网络结构,而不必为了追求高效率的实现亲自写 C++或 CUDA 代码.它和 Theano 一样都支持自动求导,用户不需要再通过反向传播求解梯度.其核心代码和 Caffe 一样是用 C++编写的,使用 C++简化了线上部署的复杂度,并让手机这种内存和CPU资源都紧张的设备可以运行复杂模型(Python 则会比较消耗资源,并且执行效率不高).除了核心代码的 C++接口,TensorFlow 还有官方的 Py

主流深度学习框架对比

深度学习研究的热潮持续高涨,各种开源深度学习框架也层出不穷,其中包括TensorFlow.Caffe.Keras.CNTK.Torch7.MXNet.Leaf.Theano.DeepLearning4.Lasagne.Neon,等等.然而TensorFlow却杀出重围,在关注度和用户数上都占据绝对优势,大有一统江湖之势.表2-1所示为各个开源框架在GitHub上的数据统计(数据统计于2017年1月3日),可以看到TensorFlow在star数量.fork数量.contributor数量这三个数