AlexNet网络
现代意义上的深度卷积神经网络起源于AlexNet网络,它是深度卷积神经网络的鼻祖。这个网络相比之前的卷积网络最显著的特点是层次加深,参数规模变大。网络结构如下图所示:
这个网络有5个卷积层,它们中的一部分后面接着max-pooling层进行下采样;最后跟3个全连接层。最后一层是softmax输出层,共有1000个节点,对应ImageNet图集中 1000个图像分类。网络中部分卷基层分成2个group进行独立计算,有利于GPU并行化以及降低计算量。
这个网络有两个主要的创新点:
1. 新的**函数ReLU
2. 标准化(Local Response Normalization)
3. dropout机制。dropout的做法是在训练时随机的选择一部分神经元进行休眠,另外一些神经元参与网络的优化,起到了正则化的作用以减轻过拟合。
4. 数据增强(data augmentation)
参考:https://blog.csdn.net/guoyunfei20/article/details/78122504
ZFNet网络
通过反卷积(转置卷积)进行卷积网络层可视化的方法,以此分析卷积网络的效果,并指导网络的改进,在AlexNet网络的基础上得到了效果更好的ZFNet网络。
论文是在AlexNet基础上进行了一些细节的改动,网络结构上并没有太大的突破。该论文最大的贡献在于通过使用可视化技术揭示了神经网络各层到底在干什么,起到了什么作用。如果不知道神经网络为什么取得了如此好的效果,那么只能靠不停的实验来寻找更好的模型。使用一个多层的反卷积网络来可视化训练过程中特征的演化及发现潜在的问题;同时根据遮挡图像局部对分类结果的影响来探讨对分类任务而言到底那部分输入信息更重要。下图为典型反卷积网络示意图:
ZFNet网络结构如下图所示:
ZFNet在保留AlexNet的基本结构的同时利用反卷积网络可视化的技术对特定卷积层的卷积核尺寸进行了调整,第一层的卷积核从11*11减小到7*7,将stride从4减小到2,Top5的错误率比AlexNet比降低了1.7%。
参考:https://blog.csdn.net/qq_31531635/article/details/71104334
GoogLeNet网络
文献提出了一种称为GoogLeNet网络的结构(Inception-V1)。在AlexNet出现之后,针对图像类任务出现了大量改进的网络结构,总体来说改进的思路主要是增大网络的规模,包括深度和宽度。但是直接增加网络的规模将面临两个问题,首先,网络参数增加之后更容易出现过拟合,在训练样本有限的情况下这一问题更为突出。另一个问题是计算量的增加。GoogLeNet致力于解决上面两个问题。
GoogLeNet由Google在2014年提出,其主要创新是Inception机制,即对图像进行多尺度处理。这种机制带来的一个好处是大幅度减少了模型的参数数量,其做法是将多个不同尺度的卷积核,池化层进行整合,形成一个Inception模块。典型的Inception模块结构如下图所示:
上图的模块由3组卷积核以及一个池化单元组成,它们共同接受来自前一层的输入图像,有三种尺寸的卷积核,以及一个max pooling操作,它们并行的对输入图像进行处理,然后将输出结果按照通道拼接起来。因为卷积操作接受的输入图像大小相等,而且卷积进行了padding操作,因此输出图像的大小也相同,可以直接按照通道进行拼接。
从理论上看,Inception模块的目标是用尺寸更小的矩阵来替代大尺寸的稀疏矩阵。即用一系列小的卷积核来替代大的卷积核,而保证二者有近似的性能。
上图的卷积操作中,如果输入图像的通道数太多,则运算量太大,而且卷积核的参数太多,因此有必要进行数据降维。所有的卷积和池化操作都使用了1x1卷积进行降维,减少参数量,即降低图像的通道数。因为1x1卷积不会改变图像的高度和宽度,只会改变通道数。
GoogleNet网络结构如下图所示:
GoogleNet在ILSVRC 2014的比赛中取得分类任务的第一名,top-5错误率6.67%。相较于之前的AlexNet-like网络,GoogleNet的网络深度达到了22层,参数量减少到AlexNet的1/12,可以说是非常优秀且非常实用的模型。
为了降低网络参数作者做了2点尝试,一是去除了最后的全连接层,用全局平均池化替代。全连接层几乎占据了AlexNet中90%的参数量,而且会引起过拟合,去除全连接层后模型训练更快并且减轻了过拟合。用全局平均池化层取代全连接层的做法借鉴了Network In Network(以下简称NIN)论文。二是GoogleNet中精心设计的Inception模块提高了参数的利用效率,这一部分也借鉴了NIN的思想,形象的解释就是Inception模块本身如同大网络中的一个小网络,其结构可以反复堆叠在一起形成大网络。不过GoogleNet比NIN更进一步的是增加了分支网络。
参考:https://www.cnblogs.com/Allen-rg/p/5833919.html
VGG网络
VGG网络由著名的牛津大学视觉组(Visual Geometry Group)2014年提出,并取得了ILSVRC 2014比赛分类任务的第2名(GoogleNet第一名)和定位任务的第1名。同时VGGNet的拓展性很强,迁移到其他图片数据上的泛化性非常好。VGGNet的结构非常简洁,整个网络都使用了同样大小的卷积核尺寸(3x3)和池化尺寸(2x2)。到目前为止,VGGNet依然经常被用来提取图像特征,被广泛应用于视觉领域的各类任务。
VGG网络的主要创新是采用了小尺寸的卷积核。所有卷积层都使用3x3卷积核,并且卷积的步长为1。为了保证卷积后的图像大小不变,对图像进行了填充,四周各填充1个像素。所有池化层都采用2x2的核,步长为2。全连接层有3层,分别包括4096,4096,1000个节点。除了最后一个全连接层之外,所有层都采用了ReLU**函数。下图为VGG16结构图:
VGG与Alexnet相比,做了以下改进:
1.去掉了LRN层(局部响应归一化层),作者实验中发现深度卷积网络中LRN的作用并不明显
2.采用更小的连续3x3卷积核来模拟更大尺寸的卷积核,例如2层连续的3x3卷积层可以达到一层5x5卷积层的感受野,但是所需的参数量会更少,两个3x3卷积核有18个参数(不考虑偏置项),而一个5x5卷积核有25个参数。后续的残差网络等都延续了这一特点
残差网络(Residual Network)用跨层连接(Shortcut Connections)拟合残差项(Residual Representations)的手段来解决深层网络难以训练的问题,将网络的层数推广到了前所未有的规模,作者在ImageNet数据集上使用了一个152层的残差网络,深度是VGG网络的8倍但复杂度却更低,在ImageNet测试集上达到3.57%的top-5错误率,这个结果赢得了ILSVRC2015分类任务的第一名,另外作者还在CIFAR-10数据集上对100层和1000层的残差网络进行了分析。VGG19网络和ResNet34-plain及ResNet34-redisual网络对比如下:
之前的经验已经证明,增加网络的层数会提高网络的性能,但增加到一定程度之后,随着层次的增加,神经网络的训练误差和测试误差会增大,这和过拟合还不一样,过拟合只是在测试集上的误差大,这个问题称为退化。
为了解决这个问题,作者设计了一种称为深度残差网络的结构,这种网络通过跳层连接和拟合残差来解决层次过多带来的问题,这种做法借鉴了高速公路网络(Highway Networks)的设计思想,与LSTM有异曲同工之妙。这一结构的原理如下图所示:
后面有文献对残差网络的机制进行了分析。得出了以下结论:残差网络并不是一个单一的超深网络,而是多个网络指数级的隐式集成,由此引入了多样性的概念,它用来描述隐式集成的网络的数量;在预测时,残差网络的行为类似于集成学习;对训练时的梯度流向进行了分析,发现隐式集成大多由一些相对浅层的网络组成,因此,残差网络并不能解决梯度消失问题。
为了进一步证明残差网络的这种集成特性,并确定删除掉一部分跨层结构对网络精度的影响,作者进行了删除层的实验,在这里有两组实验,第一组是删除单个层,第二组是同时删除多个层。为了进行比较,作者使用了残差网络和VGG网络。实验结果证明,除了个别的层之外,删掉单个层对残差网络的精度影响非常小。相比之下,删掉VGG网络的单个层会导致精度的急剧下降。这个结果验证了残差网络是多个网络的集成这一结论。
第三组实验是对网络的结构进行变动,集调整层的顺序。在实验中,作者打乱某些层的顺序,这样会影响一部分路径。具体做法是,随机的交换多对层的位置,这些层接受的输入和产生的输出数据尺寸相同。同样的,随着调整的层的数量增加,错误率也平滑的上升,这和第二组实验的结果一致。
但是笔者认为作者的这种解释有些牵强。普通意义上的集成学习算法,其各个弱学习器之间是相互独立的,而这里的各个网络之间共享了一些层,极端情况下,除了一层不同之外,另外的层都相同。另外,这些网络是同时训练出来的,而且使用了相同的样本。
GoogleNet-Inception-Like网络改进系列
Inception-V2(GoogleNet-BN)
作者基于GoogleNet的基本结构进行了改进,Top1错误率相较减少了2个百分点,主要做了以下的改进:
1.加入了BN层,减少了Internal Covariate Shift(内部neuron的数据分布发生变化),使每一层的输出都规范化到一个N(0, 1)的高斯
2.学习VGG用2个3x3的conv替代Inception模块中的5x5,既降低了参数数量,也加快了计算速度。
Inception-V3
Inception-V3一个最重要的改进是卷积核分解(Factorization),将7x7的卷积核分解成两个一维的卷积(1x7,7x1),3x3也是一样(1x3,3x1),我们称为非对称分解,如下图所示。这样做既可以加速计算减少参数规模,又可以将1个卷积拆成2个卷积,使得网络深度进一步增加,增加了网络的非线性。
WRN(wide residual network)
作者认为,随着模型深度的加深,梯度反向传播时,并不能保证能够流经每一个残差模块(residual block)的权重,以至于它很难学到东西,因此在整个训练过程中,只有很少的几个残差模块能够学到有用的表达,而绝大多数的残差模块起到的作用并不大。因此作者希望使用一种较浅的,但是宽度更宽的模型,来更加有效的提升模型的性能。
ResNet原作者针对CIFAR-10所使用的的网络,包含三种Residual Block,卷积通道数量分别是16、32、64,网络的深度为6*N+2。而在这里,WRN作者给16、32、64之后都加了一个系数k,也就是说,作者是通过增加Residual Block卷积通道的数量来使模型变得更宽,从而N可以保持很小的值,就可以是网络达到很好的效果。
CIFAR-10和CIFAR -100性能对比:
上述实验表明单独增加模型的宽度是对模型的性能是有提升的。不过也不能完全的就认为宽度比深度更好,两者只有相互搭配,才能取得更好的效果。
ResNeXt
作者提出 ResNeXt 的主要原因在于:传统的提高模型准确率的做法,都是加深或加宽网络,但是随着超参数数量的增加(比如通道数,卷积核大小等),网络设计的难度和计算开销也会增加。因此本文提出的 ResNeXt 结构可以在不增加参数复杂度的前提下提高准确率。
这篇论文提出了ResNeXt网络,同时采用了VGG堆叠的思想和Inception 的 split-transform-merge 思想,但是可扩展性比较强,可以认为是在增加准确率的同时基本不改变或降低模型的复杂度。这里提到一个名词cardinality,原文的解释是the size of the set of transformations,如下图(a)(b) cardinality=32所示:
通过实验给出了下面的结论:
1.证明ResNeXt比ResNet更好,而且Cardinality越大效果越好
2.增大Cardinality比增大模型的width或者depth效果更好
当时取得了state-of-art的结果,虽然后来被其它的网络结构超越,但就在最近Facebook 在图像识别技术上又有了新突破,基于ResNeXt 101-32x48d在ImageNet测试中准确度达到创纪录的 85.4%!(使用了35亿张图像,1.7万主题标签进行模型训练,规模史无前例!!!笔者这里不下什么结论,各位看官自行体会...)
DenseNet
DenseNet 是一种具有密集连接的卷积神经网络。在该网络中,任何两层之间都有直接的连接,也就是说,网络每一层的输入都是前面所有层输出的并集,而该层所学习的特征图也会被直接传给其后面所有层作为输入。DenseNet的一个优点是网络更窄,参数更少,很大一部分原因得益于dense block的设计,后面有提到在dense block中每个卷积层的输出feature map的数量都很小(小于100),而不是像其他网络一样动不动就几百上千的宽度。同时这种连接方式使得特征和梯度的传递更加有效,网络也就更加容易训练。下面是DenseNet 的一个示意图:
DenseNet可以有效地减少网络参数规模,达到减轻过拟合的效果,对小数据集合的学习很有效果。但是由于中间输出的feature map数量是多层Concat的结果,导致网络在训练和测试的时候显存占用并没有明显的优势,计算量也没有明显的减少!
MobileNet
MobileNets是Google针对手机等嵌入式设备提出的一种轻量级的深层神经网络,网络设计的核心Separable Convolution可以在牺牲较小性能的前提下有效的减少参数量和计算量。Separable Convolution将传统的卷积运算用两步卷积运算代替:Depthwise convolution与Pointwise convolution,如下图所示:
从图中可以明确的看出,由于输入图片为三通道,Depthwise conv的filter数量只能为3,而传统的卷积方法会有3x3总共9个filter。
后续的MobileNet-v2主要增加了残差结构,同时在Depthwise convolution之前添加一层Pointwise convolution,优化了带宽的使用,进一步提高了在嵌入式设备上的性能。可分离卷积如下图所示: