本文翻译论文为深度学习经典模型之一:GoogLeNet(Inception-v1)
论文链接:http://arxiv.org/abs/1409.4842
摘要:本文提出深度卷积网络结构,称之为 Inception,该网络结构的重要特点是充分利用有限的计算资源。在计算代价不增加的情况下,通过增加网络的深度和宽度来提升网络的效果。为了得到最优的网络性能,网络的设计是基于 "Hebbian principle",以及多尺度处理。
赫布原理:突触前神经元向突触后神经元的持续重复的刺激可以导致突触传递效能的增加。
1、Introduction
过去的三年,深度卷积网络使得图像识别和目标检测获得巨大的进步。令人振奋的是,这些进步并不完全由强大的硬件、更大的数据集以及更大的模型带来的,事实上新的算法以及新的结构起到了非常大的作用。在没有新的、更多的数据集的情况下,本文提出的GoogLeNet获得更高的精度,同时参数比AlexNet少了12倍。目标检测领域的进步,并不是单纯由网络的深度以及更大模型贡献,而是将深度结构与经典的计算机视觉结合,比如R-CNN算法。
随着移动和嵌入式计算的发展,算法的性能以及内存的消耗变得越来越重要。基于这样的考虑,本文重点研究如何设计效率更高的神经网络,而不是仅仅在数字上关注网络的准确率提升。在大多数实验中,神经网络的计算代价基本保持在150 万次的乘法与加法操作,因此,我们不仅仅是学术研究,而且可以应用于实际场景中。
本文中,我们关注深度神经网络在计算机视觉上的应用,称之为 Inception,名字借鉴 "Network in network, Lin et al" 以及要设计出更深的网络。我们考虑的深度有两种含义:首先,我们引入新的网络组织结构,Inception 模块;其次,增加网络的深度;
2、Related Work
从LeNet-5卷积网络开始,卷积网络(CNN)的标准结构:堆叠的卷积层操作(中间会添加归一化层和池化层),最后几层添加全连接层。基于这种结构的变种,在MNIST、CIFAR以及ImageNet等数据集上取得优异的效果。在ImageNet的比赛中,研究着者倾向于添加网络层数以及层的宽度,并且使用Dropout来解决过拟合问题。
Network in Network 网络由 Lin提出,目的是为了提高网络的表达能力。他们在网络中添加了大量额外的 1x1Conv+ReLU 的结构。本文中也大量使用了这种网络结构,但是我们的 1x1Conv 有两方面的作用:降低模块的维度,以此移除计算的瓶颈;同时不仅仅提高了网络的深度,而且在没有网络性能损失的情况下提升了网络的宽度。
3、Motivation and High Level Consideration
提升深度神经网络的性能,最直接的方式是增大网络的容量,包括增加网络的深度(网络的层数)和网络的宽度(每一层卷积核的数量)。在给定大量标注数据的前提下,这是提升网络性能最容易、最安全的方式。但是,这种处理方式存在两个缺点。
缺点1:在标注数据有限的情况下,网络容量大意味着大量的超参数,也就更容易过拟合。实际情况下,在专家有限的情况下,创造出像ImageNet数据集那样质量高、准确度高的数据是很难的,而且代价巨大,因此数据集是神经网络性能提升的一个瓶颈。
缺点2:提高网络的容量需要大量的计算资源。例如,在深度视觉网络中,如果两个卷积层连接在一起,任何统一的增加滤波器的个数,会导致计算代价以平方的方式增长。如果增加的容量利用率比较低(比如,大部分权重接近0),那么大部分计算资源是被浪费的。
解决上述问题最基本的方式是将全连接转换为稀疏连接的结构,甚至在卷积层内部。除了模仿生物学系统,由于Arora et al 开创性的工作,这样也具有坚实的理论基础优势。他们的主要成果表明,如果数据集的概率分布可以通过一个大型、稀疏的深度神经网络表示,则最优的网络拓扑结构可以通过分析前一层激活的相关性统计和聚类高度相关的神经元输出来一层层的构建。尽管数学理论证明需要很强的条件,事实上,这种陈述与著名的 Hebbian Principle -- neurons that fire together, wire together 理论高度一致,尽管实际情况下,缺少强条件,但是这种潜在的思想仍然可以实际应用。
遗憾的是,当前的计算设施在非均匀数据结构上的数值计算是非常低效的。尽管算法层面的性能降低了100倍,但是查询和缓存丢失仍占据着主导地位,因此,很难转换到稀疏矩阵。通过使用逐步改善、高度调度优化的数值库来最大限度的快速计算稠密矩阵的乘法,以及当前设备CPU或者GPU专注于探索密集计算,使得这种距离进一步被拉开。而且,非均匀稀疏矩阵需要更加复杂的工程和计算设施。目前大多数面向视觉的机器学习系统通过采用卷积的优点来利用空域的稀疏性。但是,卷积被应用于上一层局部区域密集连接的集合。为了打破对称性,提升网络性能,卷积网络通常在特征维度上使用随机和稀疏的连接方式,为了更好的利用并行计算,卷积网络又倾向于全连接。统一的结构、大量卷积核以及更大的Batch Size能够更好的进行稠密计算。
这就提出了一个问题,下一个、中间步骤是否有希望:正如理论表明,一种结构可以利用额外的稀疏性(尽管是在滤波器层面),并且可以利用当前用于计算稠密矩阵的硬件资源。大部分稀疏矩阵的文献表面,将稀疏矩阵聚类为稠密子矩阵将会提升稀疏矩阵的计算表现。可以预见,在不久的将来,同样的方法用来自动创建非统一深度网络结构也没那么牵强。
Inception 架构开始是作为案例研究,用于评估一个复杂网络拓扑构建算法的假设输出,该算法试图近似[2]中所示的视觉网络的稀疏结构,并通过密集的、容易获得的组件来覆盖假设结果。尽管这是一项高度投机的工作,但是只有在对拓扑的精确选择上进行两次迭代之后,我们就能看到对基于【12】的参考网络结构的适度收益。在调优学习率,超参数以及改善训练方法,我们确定了 Inception 结构在定位上下文信息和目标检测方面尤其有效。有趣的是,早期的网络结构被质疑以及充分测试,但是他们至少是局部最优的。
仍需注意的是,尽管我们提出的网络结构在计算机视觉取得成功,它的质量是否可以归因于指导原则(指导构建网络)仍然是值得怀疑的。可以确定的是,我们需要更多的分析和验证:例如,如果基于指导原则的自动化构建工具是一样的,但是在视觉网络上表现更好。最令人信服的证明:如果一个自动化构建系统创建的网络拓扑能够在其它领域(使用同样的算法,但是有着不同的全局结构)产生相似的收益。至少可以肯定,沿着Inception的研究方向将是可信的。
4、Architectural Details
Inception 网络的核心是找出卷积视觉网络中的最优局部稀疏结构是如何被密集模块近似和覆盖的。需要注意的是,假设平移不变性,意味着我们的网络以卷积模块为基础进行创建。我们需要做的是找出最优的局部创建方式,并且在空间上重复。Arora的研究表明,在一个堆叠创建的网络中,我们只需分析上一层的相关统计量,并且将高度相关的单元聚类在一起。这些聚类的单元构成下一层,并且跟上一层连接。我们假设上一层的每一个单元(Unit)与输入图片的局部区域相关,这些单元被分配到滤波器组中(本文也就是Inception模块中)。在网络的浅层中(距离输入近的层),相关的单元关注局部的区域。这就意味着,将会有很多滤波器组关注同一个区域,并且他们可以被下一层的1x1卷积核覆盖,参考"Network in Network"。当然,我们也可以期望存在更少量的、空间分散的聚类(clustes)可以被更大的卷积层覆盖,并且在更大的区域上的区域块也会降低。为了避免区域块对齐的问题,当前的Inception结构固定的滤波器大小为:1x1、3x3、5x5,这样做的目的是便利性而非必要性。另外,由于池化操作对于卷积网络结构非常重要,添加池化是必要的,如图Figure 2(a).
由于这些"Inception Modules"被堆叠在一起,输出的相关统计量是变化的:更高级的抽象特征被更高的卷积层获取,它们的空间注意力会降低,那么需要增加更高层中3x3、5x5卷积核的比例。
至少在Inception基本模块的形式下(Figure2a),存在一个大的问题:适度数量的5x5卷积仍然会增加大量的卷积核数量。当池化单元加入到Inception模块后,这个问题变得更加严重:输出滤波器的数量与上一模块的卷积核数量相等。池化层和卷积层输出的合并会导致模块之间输出的数量增加。尽管该结构可以覆盖最优稀疏结构,但是会很低效,也会导致几个阶段内的计算爆炸。
这就导致了对于提出结构的第二个想法:合理的维度衰减,以及预测哪里计算量增加。这是基于嵌入式的成功:甚至低纬度的嵌入会包含大的图像块的信息。但是,嵌入式表达的密集、压缩的形式,而且压缩信息是很难建模的。我们希望在大多数地方是稀疏性的,只有对需要集中在一起的地方进行信号压缩。也就是,1x1卷积会昂贵的3x3和5x5之前降低计算。除了降低运算,他们包含的ReLUctant单元可以增加非线性表达。最终的结构如Figrue2(b)。
一般来说,Inception网络结构就是将上述模块层叠在一起,同时也会增加最大值池化(滑动 2 个像素),使得分辨率减半。为了技术的原因(训练过程中内存消耗),在底层网络使用传统的卷积风格(stem部分),在网络上层使用Inception模块。严格的说,这不是必须的,只是反映了当前应用的效率很低。
在没有增加无法控制的计算复杂度前提下,Inception 网络的优势之一是它允许增加每一阶段卷积核数量。大量降低维度的使用,使得大量输入卷积核在输入下一层之前被屏蔽,在使用大的卷积块进行卷积之前降低维度。这种设计的另一个实际的用处是:它很符合我们的常规认识,为了能在下一阶段同时处理不同尺度的抽象特征,视觉信息首先需要在不同尺度进行处理,然后聚合。
5、GoogLeNet
通过“GoogLeNet”这个名字,我们提到了在ILSVRC 2014竞赛的提交中使用的Inception架构的特例。我们也使用了一个稍微优质的更深更宽的Inception网络,但将其加入到组合中似乎只稍微提高了结果。我们忽略了该网络的细节,因为经验证据表明确切架构的参数影响相对较小。Table1说明了竞赛中使用的最常见的Inception实例。这个网络(用不同的图像块采样方法训练的)使用了我们组合中7个模型中的6个。
包括Inception 模块在内,所有卷积都使用了修正线性激活函数(ReLU)。输入图像的大小为 224 x 224,RGB 通道进行减均值处理。"# 3 x 3 reduce" 和 "# 5x5 reduce"表示在3x3和5x5卷积之前使用1x1卷积核的数量。pool proj列给出了池化层后的1x1卷积核的数量,并且也有修正线性单元。
Inception网络的设计考虑到了计算效率和实际的用处,以至于网络可以部署在个人设备(尽管这些设备的计算资源有限)。网络总共有22层,考虑池化层27层。在分类器之前使用平均池化参考了【12】,不同的是,我们使用了额外的线性层(linear layer)。针对其它类型的标签,自适应或者微调我们的网络时很简单的,只是使用的方便,我们不期望有多大的影响。实验发现,用平均池化代替全连接层可以提高0.6%的Top-1准确率,但是dropout的使用必不可少。
池化(Pooling):普通池化,设置2x2或者3x3方格对特征图区域进行池化操作;全局池化是对整张特征图进行池化操作,比如Inception主分类器中,Inception(5b)输出7x7x1024,那么全局池化的结果为:1x1x1024,方格大小为7x7,滑动为1;
给定很深的网络,如何有效的进行反向传播是值得考虑的问题。研究发现,相对浅层的网络在分类任务有着较好的表现,表明中层网络仍具有很强的判别性。通过在网络中间层添加辅助分类器,我们期待网络在低层阶段具有好的判别性,保证了梯度回传的有效性以及提供了额外的正则化。这些辅助分类器通常具有较小的卷积模块,放在(4a)与(4d)的Inception模块。在训练过程中,辅助损失添加到总损失中,并且他们的权重为0.3。在实际使用的过程中,不使用辅助分类网络结构。
确切的网络结构如下,包含辅助分类器:
- 平均池化层,尺寸5x5,滑动距离为3,结果是4a的输出4x4x512,4d的输出4x4x528
- 1x1卷积核,数量为128,用于维度降低,以及修正线性单元
- 全连接层1024个单元,以及修正线性单元
- dropout层,70%
- 线性层和softmax损失层
6、Training Methodology
我们的网络使用DistBelief 分布式机器学习系统训练,使用适量的模型和数据并行。尽管我们是用CPU训练,但还是用几块高端GPU也可以一周内训练完成,最大的限制是内存的利用。我们的训练使用的是多线程的带动量(0.9)的随机梯度下降,学习率每8epoch降低4%。Polyak 平均用来创建最终的模型。
图像的采样方式在过去竞赛的几个月发生了很大变化,而且已经收敛的模型也用了其它的设置来训练,有时改变超参数,比如丢弃(dropout)以及学习率,所以说很难给出单一、确定的方式来训练这些网络。进一步变得复杂化,受 [8] 的影响一些模型在小的裁剪图上训练,或者在大的裁剪图上训练。然而,一个经过验证的方案在竞赛后工作地很好,包括各种尺寸的图像块的采样,它的尺寸均匀分布在图像区域的8%--100%之间,高宽比限制为[3/4,4/3]之间。另外,我们发现Andrew Howard[8] 的光度扭曲对于克服训练数据成像条件的过拟合是有用的。
7、ILSVRC 2014 Classification Challenge Setup and Results
ILSVRC 2014分类挑战赛包括将图像分类到ImageNet层级中1000个叶子结点类别的任务。训练图像大约有120万张,验证图像有5万张,测试图像有10 万张。每一张图像与一个实际类别相关联,性能度量基于分类器预测的最高分。通常报告两个数字:top-1准确率,比较实际类别和第一个预测类别,top-5错误率,比较实际类别与前5个预测类别:如果图像实际类别在top-5中,则认为图像分类正确,不管它在top-5中的排名,挑战赛使用top-5错误率来进行排名。
我们参加竞赛时没有使用外部数据来训练。除了本文中前面提到的训练技术之外,我们在获得更高性能的测试中采用了一系列技巧,描述如下。
- 我们独立训练了 7个版本的相同的GoogLeNet 模型(包括一个更广泛的版本),并用它们进行了集成预测。这些模型的训练具有相同的 初始化(甚至具有相同的初始权重,主要由于监督)和学习率策略。它们仅在采样方法和随机输入图像顺序方面不同。
- 在测试中,我们采用比 Krizhevsky 等人[9] 更好的裁剪方法。具体来说,我们将图像归一化为4个尺度,其中图像较短的维度(高度或宽度)分别为256,288,320和352,取这些归一化的图像的左,中,右3个方块(在肖像图片中,我们采用顶部,中心和底部方块)。对于每个方块,我们将采用4个角以及中心 224×224 裁剪图像以及方块尺寸归一化为 224× 224,以及它们的镜像版本。每张图像会得到 4(尺度) × 3(左中右) × 6(裁剪区域) × 2(镜像) = 144 的裁剪图像。前一年的输入中,Andrew Howard[8] 采用了类似的方法,经过我们实证验证,其方法略差于我们提出的方案。我们注意到,在实际应用中,这种积极裁剪可能是不必要的,因为存在合理数量的裁剪图像后,更多裁剪图像的好处会变得很微小(正如我们后面展示的样)。
- softmax概率在多个裁剪图像上和所有单个分类器上进行平均,然后获得最终预测。在我们的实验中,我们分析了验证数据的替代方法,例如裁剪图像上的最大池化和分类器的平均,但是它们比简单平均的性能略逊。
8、论文核心点解析
论文研究目的:提高深度神经网络在有限硬件资源上的利用效率(计算复杂度低,网络精度高);如何提高利用效率?因此设计了Inception模块;
什么是Inception?
下图Inception模块,将1x1Conv、3x3Conv、5x5Conv、3x3Pooling组合到一起,卷积和池化后的尺寸相同,但是输出卷积核数量不一样,最后将通道连接(concatenate);
为什么Inception可以提升网络效率?
何为提升效率?:1、降低网络的参数;2、充分利用硬件资源;3、分类精度高;
上图的(a)图是基本的Inception模块,(b)是经过维度降低的Inception模块,可以计算(a)的参数要高于(b)的参数(参考链接:https://www.zhihu.com/question/56024942/answer/154846007);与 AlexNet(60M参数)、VGG(144M 参数),GoogLeNet(5M)相比,参数非常少;
论文中,强调将稀疏数据转化为稠密数据,可以更好利用当前的计算资源;这里的稀疏:1x1、3x3、5x5等小卷积核可以理解为稀疏的连接(稀疏的数据),将它们组合到一起(稠密的数据),这样可以充分利用当前计算资源;
GoogLeNet是ILSVRC 2014的分类冠军,网络足够优秀;Inception模块通过不同大小的卷积核,可以提取大量输入的局部信息,通过通道连接,将这些局部信息进行组合;这有利于下一层模块更好的处理不同尺度下的信息;同时网络更深,更宽也增加了网络的性能;
辅助分类器的作用?
在中间层设置辅助分类器,称之为中继监督,可以保证深层网络中梯度更新正常,避免出现梯度消失等情况;根据实验数据,发现神经网络的中间层特征也具有很强的识别能力,为了利用中间层抽象的特征,在某些中间层中添加含有多层的辅助分类器。如下图所示: