摘要
网络从轻量级的LeNet到更深层结构的经典AlexNet、VGG等网络结构,对于无论是recognition还是classification的精确度都有了一个很好的提升,但随之而来也带来了许多问题。例如在训练中常常会遇到的梯度弥散/爆炸、过拟合、欠拟合、泛华性能差、准确度退化等等,以及随着网络变深带来的运算时间、空间的代价剧增。尽管显卡的运算性能也在不断提升,但是从根本算法上解决才是最为行之有效的办法;并且现在的一个研究方向是将深度学习的算法应用于移动端,这就需要学界从网络block结构入手发生改变。网络压缩优化的两个方向主要是迁移学习(例如MobileID)和网络稀疏,事实上也创造出来了更多的优秀的网络,如ResNet、InceptionV2-4、Xception、ResNext、MobileNet、ShuffleNet、DenseNet,在正文中会对这些网络做一个中心思想的介绍。
关键词:Inception V1-4,ResNet,Xception,ResNeXt,MobileNe,,ShuffleNet,DenseNet
一、引言
LeNet5 诞生于 1994 年,是最早的卷积神经网络之一,并且推动了深度学习领域的发展。现在更多的网络结构从简单的层堆砌更多的从根本结构上发生变化,模型简化思路总体来说是基于Conv层内部的有大量冗余而进行的模型压缩,目前学界里常用的方法主要是:参数稀疏、矩阵分解、Depthwise卷积、分组卷积等等。从ResNet开始,InceptionV4、Xception、ResNext、MobileNet、ShuffleNet,以及2017CVPR的best paper的DenseNet都是借用了ResNet的思想,是被称之为“神来之笔”的一种思想。本篇文献综述即以ResNet为入手点,着手阅读了一系列最近的关于网络结构优化的优秀论文,在正文部分对这些网络的主要贡献、核心思路、体现在网络结构的变化这三个方面进行较为详细的叙述,并且对它们的进化史做一个梳理。
二、优化模型进化史介绍:
(1)Inception V1:
即是我们熟知的GoogleNet,它的核心思想在于增加网络深度和宽度,来提高CNN网络性能,而这也就意味着巨量的参数容易产生过拟合也会大大增加计算量。
GoogleNet认为解决上述两个缺点的根本方法就是将全连接甚至一般的卷积都转化为稀疏连接。一方面现实生物神经系统的连接也是稀疏的,另一方面有文献表明:对于大规模稀疏的神经网络,可以通过分析激活值的统计特性和对高度相关的输出进行聚类来逐层构建出一个最优网络。这点表明臃肿的稀疏网络可能被不失性能地简化。 虽然数学证明有着严格的条件限制,但Hebbian准则有力地支持了这一点:fire together,wire together。
早些的时候,为了打破网络对称性和提高学习能力,传统的网络都使用了随机稀疏连接。但是,计算机软硬件对非均匀稀疏数据的计算效率很差,所以在AlexNet中又重新启用了全连接层,目的是为了更好地优化并行运算。GoogleNet就是为了找到一种能保持网络结构的稀疏性,又能利用密集矩阵的高计算性能的方法。
Inception module的中心思想,就是把稀疏结构近似成几个密集的子矩阵,从而在减少参数的同时,更加有效地利用计算资源。
同一层网络结构里面,有1*1,3*3,5*5不同的卷积模板,可以在不同size的感受野做卷积特征提取,整个网络的计算量变大,但是层次又没有变深。
具体操作是,在3*3、5*5卷积前面先做1*1的卷积,来降低input的channel的数量,,1*1的卷积核起到的就是降维的作用;并且由于网络到后面所提取的特征变得更加抽象,所涉及的感受野也变得更大,kernel为3*3、5*5的卷积比例也要增加。
网络核心结构如下图所示:
最终Google的参数相比于AlexNet少了12倍,相对于VGG-16少了3倍,在当时已经是非常优秀的网络了,但是研究远不仅如此。
(2)Inception V2:
Inception V2最主要的贡献就是提出了batch normalization,目的主要在于加快训练速度。网络训练过程中参数不断改变导致后续每一层输入的分布也发生变化,而学习的过程又要使每一层适应输入的分布,因此我们不得不降低学习率、小心地初始化。作者将分布发生变化称之为internal covariate shift。
网络结构也发生了变化,用两层堆叠3*3或者5*5,比起V1来说参数量少了,计算量少了,但层数增加,效果更好,如下:
(3)Inception V3:
Inception V3的目的是研究如何在增加网络规模的同时保证计算高效率,这篇论文中还提出了一些CNN调参的经验型规则。
1、避免特征表征的瓶颈,特征表征就是指图像在CNN某层的激活值,特征表征的大小在CNN中应该是缓慢的减小的。
2、高维的特征更容易处理,在高维特征上训练更快,更容易收敛
3、低维嵌入空间上进行空间汇聚,损失并不是很大。这个的解释是相邻的神经单元之间具有很强的相关性,信息具有冗余。
4、平衡的网络的深度和宽度。宽度和深度适宜的话可以让网络应用到分布式上时具有比较平衡的computational budget。
网络结构最大的变化则是用了1*n结合n*1来代替n*n的卷积,结构如下:
(4)ResNet:
ResNet主要解决的问题,就是在深度网络中的退化的问题。作者在论文中明确表明,在深度学习的领域中,常规网络的堆叠并不会是越深效果则越好,在超过一定深度以后,准确度开始下降,并且由于训练集的准确度也在降低,证明了不是由于过拟合的原因。
在ResNet中增加一个identity mapping(恒等映射),将原始所需要学的函数H(x)转换成F(x)+x,而作者认为这两种表达的效果相同,但是优化的难度却并不相同,作者假设F(x)的优化 会比H(x)简单的多。这一想法也是源于图像处理中的残差向量编码,通过一个reformulation,将一个问题分解成多个尺度直接的残差问题,能够很好的起到优化训练的效果。具体论文笔记在此博客论文笔记中有详细解释。
核心block结构如下:
(5)Inception V4:
Inception V4主要利用残差连接(Residual Connection),也就是ResNet的核心思想来改进V3结构。证明了Inception模块结合Residual Connection可以极大地加速训练,同时性能也有提升,得到一个Inception-ResNet V2网络,同时还设计了一个更深更优化的Inception v4模型,能达到与Inception-ResNet V2相媲美的性能。
(6)ResNeXt:
ResNeXt是ResNet的极限版本,代表着the next dimension。ResNeXt的论文证明了增大Cardinality(即ResNeXt中module个数)比增大模型的width或者depth效果更好,与ResNet相比参数更少,效果也更好,结构简单方便设计。
(7)Xception:
Xception是Inception系列网络的极限版本,作者提出来一个最为重要的方法是Depthwise Separable Convlution,这在后面的MobileNet中也有体现,核心思想在于空间变换、通道变换。和Inception V3不同是先做1*1的卷积,再做3*3的卷积,这样就先将通道进行了合并,即通道卷积,然后再进行空间卷积,而Xception则正好相反,先进行空间的3*3卷积,再进行通道的1*1卷积,区别如下:
(8)MobileNet:
MobileNets其实就是Xception思想的应用。区别就是Exception文章重点在提高精度,而MobileNets重点在压缩模型,同时保证精度。Depthwiseseparable convolutions的思想就是,分解一个标准的卷积为一个depthwise convolutions和一个pointwise convolution。简单理解就是矩阵的因式分解,具体步骤如下图左所示。
与传统卷积的深度分离卷积的结构block的区别如下图右所示:
假设,输入的feature map大小为DF * DF,维度为M,滤波器的大小为DK * DK,维度为N,并且假设padding为1,stride为1。则,原始的卷积操作,需要进行的矩阵运算次数为DK*DK*M*N*DF*DF,卷积核参数为DK *DK *N。
Depthwise separable convolutions需要进行的矩阵运算次数为DK*DK*M*DF*DF + M *N *DF*DF,卷积核参数为DK *DK *M+N。
由于卷积的过程,主要是一个spatial dimensions减少,channel dimension增加的过程,即N>M,所以,DK *DK *N> DK *DK *M+N。
因此,depthwiseseparable convolutions在模型大小上和模型计算量上都进行了大量的压缩,使得模型速度快,计算开销少,准确性好。
(9)ShuffleNet:
这篇文章在mobileNet的基础上主要做了1点改进:mobileNet只做了3*3卷积的deepwiseconvolution,而1*1的卷积还是传统的卷积方式,还存在大量冗余,ShuffleNet则在此基础上,将1*1卷积做了shuffle和group操作,实现了channel shuffle 和pointwise group convolution操作,最终使得速度和精度都比mobileNet有提升。
具体结构如下图所示:
(a)是原始的mobileNet的框架,各个group之间相互没有信息的交流。
(b)将feature map做了shuffle操作
(c)是经过channel shuffle之后的结果。
shufflenet中也采用了分组卷积的思想,效果非常显著,间接说明了,实际上一种高效的神经网络结构设计就是应该是分组的,而不是和一般的Conv或者InnerProduct那样全部连接在一起——类似信息应该被共享,不需要重复提取;不同的分组会承担不同的功能,并且这些功能是可以被训练的。这能够告诉我们,信息是需要浓缩的。
(10)DenseNet:
DenseNet是最近的2017CVPR的best paper,尽管是基于ResNet,但是不同的是为了最大化网络中所有层之间的信息流,作者将网络中的所有层两两都进行了连接,使得网络中每一层都接受它前面所有层的特征作为输入。由于网络中存在着大量密集的连接,作者将这种网络结构称为 DenseNet,结构如下图左所示:
它主要拥有以下两个特性:
1、一定程度上减轻在训练过程中梯度消散的问题。因为从上左图我们可以看出,在反传时每一层都会接受其后所有层的梯度信号,所以不会随着网络深度的增加,靠近输入层的梯度会变得越来越小。
2、由于大量的特征被复用,使得使用少量的卷积核就可以生成大量的特征,最终模型的尺寸也比较小。
一个完整的DesNet结构如下图:
论文对网络进行设计的几个要点也进行了说明如下:
1、为了进行特征复用,在跨层连接时使用的是在特征维度上的 Concatenate 操作,而不是 Element-wise Addition操作。
2、由于不需要进行 Elewise-wise 操作,所以在每个单元模块的最后不需要一个 1X1 的卷积来将特征层数升维到和输入的特征维度一致。
3、采用 Pre-activation 的策略来设计单元,将 BN 操作从主支上移到分支之前。(BN->ReLU->1x1Conv->BN->ReLU->3x3Conv)。
4、由于网络中每层都接受前面所有层的特征作为输入,为了避免随着网络层数的增加,后面层的特征维度增长过快,在每个阶段之后进行下采样的时候,首先通过一个卷积层将特征维度压缩至当前输入的一半,然后再进行 Pooling 的操作。
5、增长率的设置。增长率指的是每个单元模块最后那个 3x3 的卷积核的数量,记为 k。由于每个单元模块最后是以 Concatenate 的方式来进行连接的,所以每经过一个单元模块,下一层的特征维度就会增长 k。它的值越大意味着在网络中流通的信息也越大,相应地网络的能力也越强,但是整个模型的尺寸和计算量也会变大。作者在本文中使用了 k=32 和 k=48 两种设置。
三、总结与展望:
本文基于ResNet入手,将ResNet前后优秀的网络结构设计进行了梳理和核心点的概括。总的来看,近年来在会议上有越来越多的手工设计网络的出现,一步步取代传统的网络单纯变深的思路,学界也越来越关注于寻找模型压缩和优化的方法用于处理recognition与classification这两个计算机视觉方面最为重要的问题。不要是要让accuracy更小、mAP更高、收敛曲线更好,同时还要减少计算的空间和成本。从MobileNet我们也可以看出,由于更多框架的搭建,更少的减少卷积层的内部冗余,提高运算性能和网络性能,在业界这也为深度学习向移动端发展提供了可能。
手动设计网络结构的不断演进,喷井式的网络结构优化论文的发辫,我们目前谈论的手工设计的神经网络结构将会被很快淘汰。但从前人的论文中我们应该吸收他们的创意和思路,并且寻找到新的方法。对未来的设想是随着网络的不断进化,以后甚至可以自动根据训练数据学习得到的“更适合”的网络结构所代替,只是固定网络的基本结构,而整个神经网络的拓扑结构可以在训练中被自动发现、设计,而不再是手动设计,这样的网络可以不断在场景中升级演化。
四、参考文献(对应正文第二部分的顺序):
[1] Szegedy C, Liu W, Jia Y, et al. Going deeper with convolutions[C]// IEEE Conference on Computer Vision and Pattern Recognition. IEEE Computer Society, 2015:1-9.
[2] Ioffe S, Szegedy C. Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift[J]. 2015:448-456.
[3] Szegedy C, Vanhoucke V, Ioffe S, et al. Rethinking the Inception Architecture for Computer Vision[J]. 2015:2818-2826.
[4] He K, Zhang X, Ren S, et al. Deep Residual Learning for Image Recognition[J]. 2015:770-778.
[5] Szegedy C, Ioffe S, Vanhoucke V, et al. Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning[J]. 2016.
[6] Xie S, Girshick R, Dollar P, et al. Aggregated Residual Transformations for Deep Neural Networks[J]. 2016.
[7] Chollet F. Xception: Deep Learning with Depthwise Separable Convolutions[C]// IEEE Conference on Computer Vision and Pattern Recognition. IEEE Computer Society, 2017:1800-1807.
[8] Howard A G, Zhu M, Chen B, et al. MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications[J]. 2017.
[9] Zhang X, Zhou X, Lin M, et al. ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices[J]. 2017.
[10] Huang G, Liu Z, Maaten L V D, et al. Densely Connected Convolutional Networks[J]. 2016.