【论文分析笔记】 GoogLeNet --- Going deeper with convolutions

 Going deeper with convolutions

 

目录

1. 摘要

2. 引言

3. 相关工作

4. 动机与高层次考虑

5. 框架细节

6. GoogLeNet

 


学习总结:

卷积神经网络的问题有哪些?

       通常神经网络要效果好,最简单的做法是加深网络层或者加宽网络层。这种做法简单暴力,易于实现。但是该方法存在以下几个缺点:

a. 较大模型意味着参数数量,这使得网络更容易出现过拟合现象,特别是训练集数据量有限时。这可能成为主要的瓶颈,因为创建高质量的数据集可能是非常棘手且昂贵,尤其是区分细粒度视觉类别,比如西伯利亚哈士奇, 爱斯基摩犬。

b.  网络规模的扩大,极大的增加了计算资源的使用。例如,网络中任何形式的增加其滤波器的数量,都会导致计算的二次方增长。如果增加的容量使用率不高(例如,大多数权重最终都为0),那么大量的计算就会被浪费。

如何解决?(为啥提出GoogLeNet?)

两个问题的根本解决方法是:将全连接用到稀疏结构中,甚至是卷积内部(Inception结构)。根据Arore[2]等人的基础理论研究。结果表明,如果数据集的概率分布是由一个大的、非常稀疏的深度神经网络来表示的,那么通过分析最后一层的**和聚类的相关统计,可以逐层地构建最优的网络拓扑结构。具有高度相关输出的神经元。虽然严格的数学证明需要非常强的条件,但这是众所周知的事实。

Inception结构就是在稀疏空间中嵌入稠密连接(1*1滤波)来近似逼近大尺度卷积层效果。Inception具有以下优点:

a.  密集连接有利于并行计算

b.  不同尺度的卷积核有利于提取多尺度特征

c.  加深了网络的深度和宽度

d.  更少的参数量(VGG的1/12参数量),压缩并加速了网络

 

1. 摘要

       我们提出了一个名为Inception的深度卷积神经网络体系结构,它负责为ImageNet大尺度视觉识别挑战2014(ILSVRC14)的分类和检测的新技术设定新的标准。这种架构的主要特点是提高了网络内部计算资源的利用率。这是通过精心设计实现的,这种设计允许增加网络的深度和宽度,同时保持计算预算不变。为了优化质量,框架的设计是基于Hebbian原理和多尺度处理的灵感。在我们提交的ILSVRC14文件中使用的一个特殊的结构称为GoogLeNet,这是一个22层的深度网络,在分类和检测任务上有很高质量

2. 引言

       在过去的三年里,主要是由于深度学习的进步,导致目标检测和识别的精度以惊人的速度进步。一个令人鼓舞的消息是,大多数这些进展不仅仅是强大的硬件,更大的数据集,更大的模型,主要是一系列新的思想,算法和改进的网络架构。例如,我们提交给ILSVRC 2014的GoogLeNet 的参数比2年前(Krizhevsjy等人)少12倍,而且精度更高。对检测的最大收益不是来自对深度网络的利用或者更大的模型,而且来自深度架构与经典机器视觉的协同作用,比如Hirshick等人的R-CNN算法。

       另一个值得注意的因素是,随着移动和嵌入式计算的发展,我们的算法的效率——特别是它们的耗能和内存使用——尤其重要。值得注意的是,本文中提出的设计深层架构考虑了这个因素,而不是纯粹考虑数字精度。在大多数实验中,这些模型的设计是为了保证计算一次推理时预算在10亿 叠加乘积 (MADD,multiply-add) ,因此它们最终不会只是学术上的好奇,而是可以合理的在实现世界中使用,即使是在大型数据集上。

      本文中,我们将重点介绍一种有效的用于计算机视觉的深度神经网络体系结构,代号为Inception,它的名字源自Linetal的“network in network"论文与著名的:“we need to go deeper" 网络迷因(Internet Meme)。在我们的案例中,深度这个词有两种不同的含义:首先,我们在某种意义上引入了一个新的组织形式,即“Inception module”,同时也更直接的增加了网络的深度。通常,您可以将 Inception module 看成是从Arora等人的理论工作中得到启示和指导。该体系结构的好处在ILSVRC2014的分类和检测任务上得到了实验验证,它的性能明显优于目前的技术水平。

3. 相关工作

       从LeNet-5卷积神经网络(CNN)开始,堆叠卷积层(可选择该层后接归一化层或者max-pool层)成为标准的结构,网络最后连接一个或者多个全连接层。以上方法的变形设计很流行,在图像分类任务(MNIST,CIFAR,Imagenet) 上取得了最好的结果。最近的趋势是增加层的深度和宽度,或者使用dropout避免过度拟合的问题。

       尽管最大池化层会导致空间信息的丢失,但是同时卷积神经网络成功应用在定位,目标检测,人体姿态估计。灵感来自苏维瓦灵长类大脑皮层神经科学Serre等人的模型。使用一系列不同大小的固定Gabor滤波器来处理多尺度,类似于Inception模型。但是,与固定的2层深度模型[15]相反,所有的Inception模型是需要学习的。此外,Inception层被多次重复使用,构成了22层的深度模型GoogLeNet。

       Network in Network 方法是由Lin等人提出,目的是增加神经网络的表示能力。当应用在卷积层时,该方法认为是在线性**的添加1*1卷积层。我们使用这种密集架构,这使得现有的CNN管道易于集成。然后,在我们的设置下,1*1卷积有双重目的:最关键的是,主要是使用降维来消除计算瓶颈,否则会限制我们的网络大小。这在没有明显的性能损失下,不止增加了深度,还增加了宽度。

      目前主要的目标检测方法是Girshick等人提出的区域性卷积神经网络(R-CNN)。R-CNN将总的检测问题分解为两个子问题:首先利用诸如颜色和超像素一致性等底层特征筛选目标候选区域,然后用CNN分离器判断该位置的类别。这样的两阶段方法利用了低层特征边界框的准确性和先进的CNNs的强大分类能力。在我们提交的检测报告中采用了类似的管道,但是强化了这两个阶段,例如multi-box[5]预测更高的bounding box 召回,和采用集成方法用于边界框候选框的更好分类。

4. 动机与高层次考虑

       提高神经网络性能的最直接方法是增加神经网络的规模,这即包括增加网络的深度--网络层数和网络的宽度--每层的通道数。这种简单又安全的方式训练更高质量的模型,特别是考虑到有大量的标注训练数据。然而,这个简单的解决方案有两个主要的缺点。

       较大的尺寸意味着较大参数数量,这使得扩大后的网络更容易出现过拟合现象,特别是训练集数据量有限时。这可能成为主要的瓶颈,因为创建高质量的数据集可能是非常棘手且昂贵,尤其是专家级人员必须在ImageNet(甚至是1000类ILSVRC子集)区分细粒度视觉类别,如图1所示

【论文分析笔记】 GoogLeNet --- Going deeper with convolutions

       另外一个缺点是网络规模的扩大,极大的增加了计算资源的使用。例如,深度视觉网络,两个卷积层被链接起来,任何形式的增加其滤波器的数量,都会导致计算的二次方增长。如果增加的容量使用率不高(例如,大多数权重最终都为0),那么大量的计算就会被浪费。由于实际计算资源总是有限的,所以即使主要目标是提高结果的质量,但是从计算资源的有效分配方面来讲,还是最好不随意增加计算量。

       两个问题的根本解决方法是将全连接用到稀疏结构中,甚至是卷积内部。除了模仿生物系统,还归于Arore[2]等人在基础理论上的创新性研究。他们的主要结果表明,如果数据集的概率分布是由一个大的、非常稀疏的深度神经网络来表示的,那么通过分析最后一层的**和聚类的相关统计,可以逐层地构建最优的网络拓扑结构。具有高度相关输出的神经元。虽然严格的数学证明需要非常强的条件,但这一事实与众所周知的HebBi原理(fire together, wire together)这一事实表明,即使在较不严格的条件下,其基本思想也是适用的。

      不利的方面,今天的计算基础设施对于非均匀稀疏数据结构的数值计算是非常低效的。即使算术运算量级减少了100×,查找和高速缓存未命中的开销是占主导地位的,切换到稀疏矩阵不会得到回报。通过使用稳定改进的、高度调谐的数值计算库,允许使用非常快的密集矩阵乘法,利用底层CPU或GPU硬件的微小细节,进一步扩大了计算速度差距。此外,非均匀稀疏模型需要更复杂的工程和计算基础设施。目前大多数面向视觉的机器学习系统利用卷积的优点仅仅在空间域中利用稀疏性。然而,现在的趋势是恢复全连接[9]为了更好的优化并行计算。均匀的结构 和 大量的滤波器 和 更大的batchs 都有利于高效的稠密计算。

       这就提出了一个问题:一个框架,它将稀疏矩阵聚类成相对稠密的子矩阵,利用硬件加速。在不久的将来,类似的方法将被用于深度学习网络结构的自动化构建。

       Inception结构对输出的复杂网络拓扑结构进行了案例研究,该算法尝试了近似稀疏结构的隐含层网络,嵌入了密集连接层。在精选的拓扑结构上进行两次迭代之后,基于Inception结构的网络已经可以看到一定的收益[12]。在进一步调优超参数和改进训练方法之后,我们确定所得到的Inception在上下文定位和目标检测方面特别有用[6]和[5]。

       需要谨慎的一点:尽管提出的架构已经在计算机视觉领域取得成功,但它的质量(这种结构具有指导原则)仍然值得怀疑。需要更彻底的分析和验证才能确保万无一失:例如,用自动化工具找到更好的视觉网络拓扑。最有说服力的证据是,一个自动化系统使用相同的算法创建的网络拓扑,在其他领域中获得相似的增益,但具有非常不同的全局架构。最起码,Inception结构目前的成功为未来的令人兴奋的工作提供了坚实的动力。

5. 框架细节

       Inception架构的主要思想是基于如何近似找出卷积视觉网络中的最佳局部稀疏结构和容易获取覆盖的密集分量。请注意,转换一致性意味着我们用卷积堆叠模式来搭建网络。我们所需要的是找到最佳的局部结构并在空间上重复它。Arora等人[2]提出一种逐层构造的方法,分析最后一层的相关统计,并将它们组成具有相关性的单元。这些units形成下一层的单元,并连接前一层中的单元。我们假设早期层的每个units对应于输入图像的某些区域,并且这些units组成滤波器簇。在较低层(接近输入的)中,相关units将集中在局部区域。这意味着,我们最终会有许多units集中在一个区域中,并且它们可以被一层1*1卷积连接到下一层中,正如在[12]中所建议的。然而,人们也希望,在较大的patches上会有更小数量的空间离散的units,它们可以被卷积连接,并且在越大区域上会有越少数量的patches。之所以卷积核大小采用1、3和5,主要是为了方便对齐。设定卷积步长stride=1之后,只要分别设定pad=0、1、2,那么卷积之后便可以得到相同维度的特征,然后这些特征就可以直接拼接在一起了。此外,由于池化操作对于当前的卷积网络的成功是必不可少的,它建议在每个这样的阶段添加另外一个pool有额外的有益效果(见图2(a))。

       当这些“Inception 模块“ 被堆叠在彼此之上时,它们的输出相关性统计量必然变化:网络越到后面,特征越抽象,而且每个特征所涉及的感受野也更大了,因此随着层数的增加,3x3和5x5卷积的比例也要增加。

       以上模块的一个大问题是,使用5*5的卷积核,计算代价是很昂贵的。当pool层和3*3卷积层合并时,它的问题就变得更加明显:pool层与卷积层的合并将不可以避免的导致输出通道不断增加。即使这种架构可能逼近最佳稀疏结构,但它会非常低效,有可能导致计算量爆炸。例如:上一层的输出为100x100x128,经过具有256个输出的5x5卷积层之后(stride=1,pad=2),输出数据为100x100x256。其中,卷积层的参数为128x5x5x256。假如上一层输出先经过具有32个输出的1x1卷积层,再经过具有256个输出的5x5卷积层,那么最终的输出数据仍为为100x100x256,但卷积参数量已经减少为128x1x1x32 + 32x5x5x256,大约减少了4倍。

【论文分析笔记】 GoogLeNet --- Going deeper with convolutions

       Inception图2(b)的改进版:在代价昂贵的3*3和5*5卷积层之前,使用1*1的卷积来简化计算。每层后面还使用Rule**。最后的结果如图 2(b) 所示

       一般来说,Inception网络是由上面描述的模块堆叠组成的网络,偶尔使用max-pool层将图像的分辨率减半。由于技术原因(在训练过程中的内存使用效率),在高层使用Inception模块似乎是更有益得,同时在较低层保持使用传统卷积方式。这不是严格必要的,如果不这么做,在我们当前的模型中,效率会更低。

       这种体系结构的主要优点之一是,它允许在每个阶段显著增加单元的数量,而不是在计算复杂度中不受控制地爆炸。普遍使用降维可以避免大量的输入滤波器最后一级输出到下一级。首先减少它们的维度,然后在大的patch size上做卷积。该设计的另一个实际有用的方面是,它与视觉信息对齐,在不同的尺度下处理视觉信息,然后聚合,以便下一阶段能够同时从不同的尺度抽象特征。

       计算资源的改进允许在不陷入计算困然的情况下增加每个stage的宽度以及stage的数目。Inception架构的另一种方法是创建稍微差但是计算成本更低的版本,我们已经发现,所有包含(knobs和levers的控制资源的平衡 --- 硬件优化术语)可以导致网络的速度比类似的具有Inception的网络块2到3倍,但是这一点需要仔细的手动设计。

6. GoogLeNet

       在ILVRSC14比赛中,我们选择了GoogLeNet作为我们的团队名称。这个名字是对 Yann LeCuns 开创性的LeNET5网络[10]的敬意。我们还使用GoogLeNet来代表我们在竞赛中使用的Inception架构的具体化身,我们还使用了一个更深,更广泛的Inception网络,其质量稍微差,但稍微提高了结果。我们忽略了该网络的细节,因为在我们的实验表明,抽取的架构参数的影响相对较小。这里,最成功的特定实例(命名为GoogLeNet)在表1中描述用于演示目的。完全相同的拓扑结构(用不同的采样方式训练)被用于我们的7个模型中的6个。

【论文分析笔记】 GoogLeNet --- Going deeper with convolutions

       所有的卷积,包括在Inception模块内部的卷积,都使用ReLu**。我们的网络输入感受野是224*224,采用RGB彩色通道减去均值的方法。

 

GoogLeNet有以下特性:

1 . GoogLeNet采用了模块化的结构,方便增添和修改; 
2 . 网络最后采用了average pooling来代替全连接层,想法来自NIN,事实证明可以将TOP1 accuracy提高0.6%。但是,实际在最后还是加了一个全连接层,主要是为了方便以后大家finetune;
3 . 虽然移除了全连接,但是网络中依然使用了Dropout ; 
4 . 为了避免梯度消失,网络额外增加了2个辅助的softmax用于向前传导梯度。文章中说这两个辅助的分类器的loss应该加一个衰减系数,但看caffe中的model也没有加任何衰减。此外,实际测试的时候,这两个额外的softmax会被去掉。

 

GoogleNet网络结构如下:

【论文分析笔记】 GoogLeNet --- Going deeper with convolutions