深度学习之CNN结构解析

LENET5

 在1994年,第一个推进深度学习发展的卷积神经网络被提出,即在1988年以来有许多成功的想法被提出以后,由Yann LeCun提出命名的LeNet5

这里写图片描述

 LeNet5的网络结构是非常基础的,由于图像特征是分布在整个图像上,因此利用卷积以及少量参数来提取不同位置上的相同特征。由于当时没有GPU来帮助训练,甚至当时的CPU也是非常慢的,因此保存参数所需的内存和计算速度是一个关键需要突破的点,因此不同于以每个像素作为大型多层的神经网络输入,LeNet5认为这些不应该在第一层中使用,因为图像中像素间是高度相关的,而单独使用图像中的每个像素不会利用到这些相关性。

 LeNet5的特点总结如下:

  • 卷积神经网络中卷积层包括三个部分:卷积,池化,非线性激活函数层(tanh或者sigmoid)。
  • 使用卷积操作来提取空间特征。
  • 使用平均池化来进行下采样。
  • 多层神经网络(MLP)来作为最后的分类器。
  • 层之间利用稀疏连接矩阵来避免巨大的计算损失。
     这是最近提出的卷积神经网络结构的鼻祖,也鼓舞了许多人向这个领域发展。
     在1998年到2010年之间,神经网络有一段低谷期,大多数人进展缓慢,而且没有注意到他们自己对于神经网络发展的贡献。由于手机相机等电子设备的发展,有了越来越多可利用的数据,并且计算能力也在逐步提升,CPU变得越来越快,GPU也成为一种通用的计算工具。上述这些促使神经网络结构的进步,尽管很慢,但是大数据和计算能力使得神经网络这个领域变的更加有趣。

DAN CIRESAN NET

 在2010年,Dan Claudiu Ciresan和Jurgen Schmidhuber 提出了第一个由GPU实现的神经网络,这个达到9层的神经网络在NVIDIA GTX 280图形处理器上实现了前向后向传播算法。

ALEXNET

 在2012年,Alex Krizhevsky 提出了AlexNet,这是一个更深更宽的LeNet版本,并且赢得了当年的ImageNet竞赛第一名。

这里写图片描述

AlexNet是在LeNet基础上提出的更大的神经网络,其可以被用来学习更加复杂的目标和目标的层次结构。其特点为:
* 使用了修改线性单元ReLU来作为非线性激活函数。
* 使用了dropout理论来在训练阶段有选择性的忽视神经元从而避免模型过拟合。
* 使用重叠的最大池化操作来避免平均池化造成的平均效果。
* 使用GPU NVIDIA GTX 580图形处理器来减少训练时间。
 GPU提供了相比于CPU更多的核,在训练时间上快了将近10倍,因此可以使用更大的训练集合更大尺寸的图像。
 AlexNet的成功开启了一段小的改革,使得卷积神经网络加速了深度学习的发展,使其变成了更大的神经网络可以用来解决更加有用的任务。

OVERFEAT

 在2013年的12月,来自Yann LeCun的纽约大学实验室提出了OVERFEAT,这是AlexNet的衍生版本,这篇论文提出了学习边框的概念,但是相对于学习边框,可能做图像分割效果更好。

VGGNET

 来自牛津大学的VGG 是第一个在每个卷积层使用大量小型3x3滤波器并结合的卷积神经网络。
 这似乎是和LeNet中使用尺寸大的卷积层来提取图像中的相同特征的原则相违背,不同于AlexNet中使用9x9,11x11的滤波器,开始(至少第一层)滤波器的尺寸就很小,太接近LeNet中想要避免使用的1x1卷积操作。但是VGGNet的好处在于多种3x3的卷积串联可以模仿一个有大的感受野的卷积核,比如5x5和7x7。这些想法在最近的inception和ResNet中都被使用。
这里写图片描述

 VGGNet使用3x3卷积层来表达复杂特征,注意到VGG-E中的第3,4,5块中:256x256和512x512滤波器都被使用多次来提取更多复杂的特征并将这些特征进行结合,这个和有3个卷积层的512x512大型分类器有相同的效果。显而易见VGGNet有大量的参数和学习能力,但是训练这些网络是非常困难的,必须分成小的网络然后一个加上一个这种形式。所有的这些都因为缺乏好的正则化模型的方法,或者说由于大量的参数有点限制了提升大规模的搜索空间。
 VGGNet在大多数层中使用大型特征尺寸,因此可以推断耗费了大量的运行时间,像inception bottleneck(加1x1卷积)一样减少这些特征的数量,将保留一些计算资源。

NETWORK-IN-NETWORK

Network-in-network中大量使用简单的1x1卷积来保证更多卷积层的特征结合能力。
 NIN结构在每个卷积层后使用空间多层神经网络MLP层来在另一层之前更好的结合特征,并且再次认定1x1卷积违背了之前LeNet的原则,但是其确实以一种更好的方式(通过简单地堆叠更多的卷积层是不可能的)结合了卷积层中的特征,这不同于使用行像素作为下一层的输入,这里1x1卷积层被用来在卷积之后在特征图间空间上的结合特征,所以他们可以有效的只使用少量参数来共享这些特征的所有像素。
这里写图片描述

 MLP层可以通过结合单个卷积特征为一个更加复杂的group来增加这些特征的有效性,这个想法在之后的ResNet和inception还有他们的衍生网络中都被使用。
 NIN也使用平均池化来作为最后分类器的一部分,这样做是为了在分类之前将网络中多个输入图像产生的响应做平均。

GOOGLENET

 来自谷歌的Christian Szegedy旨于减少深度神经网络中的计算负担,因此提出了GoogLeNet the first inception结构。
 从2014年秋天直到现在,深度学习模型在分类图像和视频帧内容上变得有用,鉴于这些技术理论的有用性,像Google这样的互联网巨头们对其能在服务器架构上高效部署非常感兴趣。
 Christian想了很多减少深度神经网络计算负担的方法,他和他的团队想出了inception结构:
这里写图片描述

 乍一看就是1x1,3x3,5x5卷积滤波器的并行结合,但是这个inception结构在上述昂贵的并行块之前使用了1x1卷积块(NIN)来减少特征的数量,这通常被叫做”bottleneck”。
 GoogLeNet在初始层中没有使用inception结构,并且与NIN相同使用平均池化加上softmax来作为最后的分类器,这个分类器相对于AlexNet和VGGNet的操作次数很少,这得益于一个非常有效的网络设计

BOTTLENECK LAYER

 受到NIN的启发,inception的bottleneck层减少了每层的特征的数量和操作数,因此时间损耗不多。在将数据传送到昂贵的卷积操作之前,特征的数量就减少了4倍,这使得节省了大量的计算损耗,这就是这个结构的成功之处。
 假设有256个特征输入,如果只执行3x3卷积,那么产生256x256x3x3(589000)次乘加操作,可能超过了我们本身拥有的计算负担,在Google服务器上运行此层需要0.5毫秒。与此相反,我们想要减少特征的数量的话,可以只卷积64(256/4)大小的尺寸,即在所有inception分支上都使用64大小卷积,那么就要利用到1x1卷积滤波器来再次使64变成256大小,现在操作数变成:
* 256x64x1x1=16000s
* 64x64x3x3=36000s
* 64x256x1x1=16000s
 上述总共70000相对于最开始的600000的操作数,少了将近10倍。
 尽管我们减少了操作数,我们也没有丢失这层的泛化能力。事实上,bottleneck层已经在ImageNet数据集上证明有最好的效果。比如,在后来的ResNet结构中也用到了。
 成功的原因是因为输入特征间的相关性,因此这些冗余通过结合合适的1x1卷积滤波器来消除。然后,在卷积小数量的特征之后,他们可以再一次在下一层中扩展为有意义的组合。

INCEPTION V3(AND V2)

 Christian和他的团队在2015年2月提出了Batch-normalized inception,被称为inception V2。Batch-normalization计算一层的输出的所有特征图的均值和标准差,然后用这些值来归一化他们的响应,使得所有神经元图都在相同的范围内响应,以及零均值,这样在下一层训练不必学习输入数据的偏移,可以只专注于怎么最好的结合特征。
 在2015年12月,他们提出了一个新的inception模型及其网络结构的版本,这篇文章更好的解释了原始GoogLeNet结构,并且在设计选择上给出了更多的细节:
* 最大化进入网络的信息流,谨慎地构建网络来平衡其宽度和深度,在每次池化之前,增加特征图的数量。
* 当深度增加时,特征的数量或者层的宽度也同时增加。
* 在每层增加宽度来在下一层之前增加特征的结合。
* 只使用3x3卷积。5x5,7x7都可以如下图一样分解成3x3的串联。

  • 新的inception结构因此变成:

    这里写图片描述

  • 滤波器也可以分解成扁平卷积(flattened convolutions):

    这里写图片描述

  • inception结构也可以通过在执行inception计算时提供池化操作来减少数据的尺寸,这与的执行卷积操作并行执行一个简单的池化层是基本相同的。

    这里写图片描述

 inception仍然使用池化操作加上softmax来作为最后的分类器。

RESNET

 在2015年12月,与inception V3同一时间,ResNet被提出,其有一个简单的想法:在两个卷积层的输出之后加上一个来自输入的旁路。

这里写图片描述

 这个结构相似于一个老想法,但是这里的旁路通过了两个卷积层并且运用到了一个更大的规模的神经网络上。用到两层卷积层是关键性直觉,因为旁路只通过一个卷积层并没有带来多大性能上的提升。两层可以被看作一个小型的分类器,或者Network-in-Network。这也是第一次层数大于100层甚至1000层。ResNet有非常大数量的层数,因此也利用了相似于inception结构中的bottleneck层。

这里写图片描述

 这层减少了每层的特征数量通过首先使用1x1卷积得到小的输出(通常是输入的1/4),然后使用3x3卷积,然后再次使用1x1卷积来得到一个大数量的特征,就像inception结构中一样。这使得计算量低的同时提供丰富的特征组合。
 ResNet在输入时使用相对简单的初始层:一个带池化层的7x7卷积层,这与inception V3 V4相反,更加复杂且不够直观。
 ResNet也使用了池化层架上softmax来作为最后的分类器。
* ResNet可以被看作并行又串联的模块,通过将输入看作同时进入多个模块,而每个模块的输出串联连接。
* ResNet也可以被看作并行或者串行模块的多种组合
* ResNet通常在相对小的深度(20~30层)的块中进行操作,表现为并行而不是整个网络长度的串联。
* ResNet,当输出传到输入时,就像RNN一样了,网络可以看作一个更好的生物似真的脑皮层模型

INCEPTION V4

 Christian和团队再一次提出了一个inception的新版本。这个inception结构相似于inception V3。

这里写图片描述

 他们结合了inception结构和ResNet模块。

这里写图片描述

 在我看来,这一次的解决方案不太优雅并且更复杂,但也是透明的启发式。很难理解为什么这么选择,作者也很难理解这些选择。

SQUEEZENET

SqueezeNet是最近被提出的,他是一个借鉴ResNet和inception中许多概念的re-hash。一个好的结构的设计在不需要复杂的压缩算法的情况下可以提供小的网络尺寸和参数。

ENET

 结合最近的网络结构的所有特征到一个更加有效轻量的网络,并且使用更少的参数和计算来实现最好的结果,这就是ENet
 ENet是一个编码器加上解码器的网络,编码器就是常规的CNN设计用来分类,同时解码器是一个上采样网络,设计用来传播分类结果返回到原始图像大小来进行分割。
 ENet在一开始就旨在使用尽可能少的资源,因此他实现了这样一个占内存小,编码器和解码器一起只占用了具有fp16精度的0.7MB的网络,即使只用到了这么小的内存,但是ENet与其他上述纯神经网络解决分割问题的精度相同。

AN ANALYSIS OF MODULES

 一个CNN模块的系统评估
* 使用ELU非线性激活函数而不是用batchnorm或ReLU。
* 应用一个学习到的RGB的颜色转换空间。
* 使用线性学习率衰减策略。
* 使用池化操作和最大池化。
* 使用mini-batch尺寸为128或者256,如果对于你的GPU还大的话,适当减少对应与batch尺寸的学习率。
* 使用全连接层并且平均来作为作为最后的决策结果。
* 当增大训练集尺寸的时候,检查是否能达到plateau,数据的干净度比其尺寸更加重要。
* 如果不能增加输入图像的尺寸,减少卷积层的移动步长能大约达到相同的效果。
* 如果你的网络结构和像GoogLeNet一样复杂且高度优化,那么请谨慎修改。

XCEPTION

Xception在inception结构上做了优化,并且有一个更加简单优雅的网络结构:

这里写图片描述

这里写图片描述

 这个网络结构有36个卷积阶段,使得其相似于ResNet-34,但是模型和编码比ResNet简单并且相比于inception V4更好理解。

FRACTALNET

FractalNet使用一个递归结构,是一个更通用的ResNet的衍生版本。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值