GoogLeNet-2014

GoogleNet

Related Work

从LeNet-5开始,CNN有了一种典型的结构,也就是卷积层的堆叠(带有归一层和最大值池化层)在加上FC layers。各种各样的基于这种结构的变体出现,并且在很多数据集如MNIST, CIFAR和ImageNet上都取得了很好的成果。对于大数据集如ImageNet,最近的趋势在于增加网络的深度和宽度,然后利用dropout处理过拟合问题。
尽管最大值池化会在结果上丢弃掉很多空间信息,但是这样的结构依然在诸如定位,目标检测,人体姿态估计等任务上取得了非常的效果。
受灵长类动物的视觉皮质的神经科学模型的启发,Serre等人运用了一系列不同大小的固定Gabor滤波器来解决图像多尺度变换的问题。在这里我们也使用同样的策略。
NIN是由Lin等人提出的策略,为了增加神经网络的特征表征能力。在他们的模型中,额外的1x1卷积层被加入到网络中增加了网络深度。这个结构被运用到了我们的模型当中,然而,在我们的结构中,1x1卷积核还有另一层意图,也是最主要的意图,它被用来作为降维模块来解决计算瓶颈,如果不使用1x1卷积层会限制我们网络的大小。这样不仅增加了网络的深度,同时网络的宽度也得以保证在没有严重performance下降的情况下。
最后,最近的物体检测 state-of-the-art是Girshick等人提出的RCNN结构。R-CNN将整个物体检测任务分成了两个子问题:利用低层的特征如颜色和质地纹理去生成目标可能存在的位置信息,然后利用CNN分类器去鉴别这个位置点上物体所属分类。这样的两部结构结合了运用低层特征进行边界框划定的准确性以及CNN网络的强大的分类能力。我们也运用了相似的pipeline在我们的识别任务中。

Motivation and High Level Considerations

最为直接的方式来提高深度神经网络的performance就是增大网络,这同时包括增加网络深度——网络的层数,以及网络的宽度——每层网络的神经元数。这是获得高质量训练模型最简单也是最安全的方式,尤其是在拥有了大量带标签的训练集的情况下。然后这样的方式会带来两个很主要的弊端。
越大的网络意味着越多的参数,这会导致网络越容易过拟合,尤其当带标签的数据集大小有限时。这是最主要的一个瓶颈,因为足量的带标签的数据集的获得是费时费力且非常昂贵的,需要分类专家对各种各样精细的视觉物体进行区别(例如ImageNet数据集)。
越大的网络同时也相同的增加了对计算资源的需求。例如,在一个深度视觉网络中,如果两个卷积层相连,任意卷积核数的增加都会导致计算量以平方数增加。如果增加的计算容量没有被有效的使用(如大多数权重最后趋于0),那么大量的计算资源就被浪费了。由于计算资源预算总是有限的,即使在着重追求网络performance的时候,一个有效的计算资源的分布也会非常重要。
一个最基本的方法来同时解决上述问题就是引入稀疏性,用一个稀疏的网络层来代替FC layers,甚至在卷积里引入稀疏。如果一个数据集的概率分布可以被一个大型稀疏的深度神经网络来表示,那么最优网络拓扑结构可以由对前一层激活值进行相关性分析,将高度相关的输出进行聚合来逐层构建网络。尽管严格的数学证明需要非常强的条件,但是这个想法与著名的Hebbian principle——neurons that fire together, wire together相呼应,也就暗示着在实际中,这个潜在的想法在不那么严格的条件下也适用。
不幸的是,当下的计算基础设施,在对非均匀稀疏的数据结构进行数值计算时,非常的低效。即使算数运算操作数量下降100倍,查找和缓存未命中的开销也依然会占据主要,运用稀疏矩阵也不会有太大收益。然而这个差距会更加大,由于得到提升的更加调和的数值计算库的出现允许极速的稠密矩阵运算,还有CPU和GPU的不断开发。同样地,非均匀稀疏模型需要更加精细的工程和计算基础设施。当前绝大部分的视觉导向的机器学习系统都充分利用了卷积本身带来的空间维度的稀疏性。然而,卷积仅仅应用于网络的低层当中。为了打破网络的平衡以及提高网络的学习能力,ConvNets尝试在特征空间进行随机稀疏的连接,但是最终还是回到了全连接上为了进一步优化并行运算。当下机器视觉state-of-the-art的模型都有着一致的结构。大量的卷积核和更大的batch size来保证计算资源的充分利用。
这就带来一个问题,是否有希望进行一个折中的操作:建立一种结构能够利用理论上的卷积核层的稀疏,同时也能够充分利用当前硬件所带来的对于稠密矩阵的有效运算。大量对于稀疏矩阵运算的文献表明聚合稀疏矩阵到一个相对稠密的子矩阵会对提高稀疏矩阵乘法运算的性能。有了这个基础,那么对于利用相似方法进行非均匀深度学习结构的自动构建的想法也就变得现实了。

Architectural Details

Inception结构的主要想法在于如何通过一个很好获取的(或现成的)稠密的结构去近似一个卷积视觉网络的最优局部稀疏结构。我们注意到对于图像平移不变性的假设意味着我们的网络可以由卷积块来进行构建。那么我们需要做的就是找到一个最优局部结构然后在空间上对其进行反复运用。Arora等人提出对于一个层级结构,我们需要对上一层进行相关性分析,然后将相关性高的神经元进行聚合。这些聚合的簇就形成了下一层的神经元并且与上一层的神经元进行连接。我们假设较低层的每一个神经元都与输入图像的某个区域相对应,而且这些神经元会被group起来放到一组滤波器中。在较低的层(靠近输入的层)相关的神经元会聚集在一个局部区域,因此对于一个局部区域,我们会得到很多的簇,这个可以通过一层1x1卷积层来完成,来自NIN结构。然后,我们同时也期望能够有数量较少的涵盖更大空间的簇,这个可以用过对较大patch进行卷积得到,随着涵盖的面积越大,patch的数量也会越少。为了避免patch对齐(这里的patch对齐的意思是,输入在经过卷积后,维度相同可以直接拼接)的问题,这里的inception结构只采用1x1,3x3,5x5的卷积核;这个决定更多的基于操作的方便,并不是一定要这样设置。这就意味着这个结构是将所有这些层的卷积输出进行拼接然后合并为一个输出tensor来作为下一大层(stage)的输入。另外,由于池化操作对于当前卷积网络的成功至关重要,所以最好在每个大层中增加一个并行的池化通道来来提高性能。如下图:
这里写图片描述
由于“Inception 模块”是互相堆叠的,这些模块的输出的相关性分析也会发生改变:当越来越高度抽象的特征被网络的高层捕捉到,那么这些特征的空间聚合信息也会衰减。当我们越往高层走,大卷积核(3x3,5x5)的比例就应该相应增加。
上面这个模块结构有一个很大问题,至少在一个我们设计的初始结构中,那就是即使适当数量的5x5的卷积核也会由于上一层卷积通道的过多(因为多个卷积层和池化输出的卷积通道的直接拼接)带来相当大的计算量。这个问题一旦加入池化单元加入会变得更加明显:卷积核输出通道数等于上一个大层的卷积核数。池化层和卷积层输出的合并会导致输出通道数量不可避免的随着大层增加。当这个结构可能已经是一个最优局部结构了,但是却非常的低效,近近经过几个大层,计算量就已经爆炸。
这就引入了我们对于Inception结构的第二个想法:在会引入巨大计算量的地方进行降维。这个基于嵌入的成功:即使低维的嵌入也会包含一个相对大的图片patch的很多信息。然而嵌入代表着信息会以稠密,被压缩的形式存在,但是压缩的信息很难进行处理。这就要求处理后的信息同时需要在很多地方保持稀疏,而且只有在全部信息结合的时候进行信号压缩。这也就是,1x1卷积核需要用在3x3,5x5卷积核之前。除了降维,同时1x1卷积之后也要经过ReLU函数,这使得1x1卷积核得到完成双重目的,而且同时也保证了稀疏性。最终结构如下图:
这里写图片描述
一般而言,一个Inception网络是由上图的模块反复堆叠而成,再加上偶尔的2步长的最大值池化层来减半分辨率(因为这里所有的卷积都是SAME padding模式,卷积完图像分辨率不变)。
从技术层面(训练时的存储效率),最好在高层开始使用Inception网络,在低层还是采用传统卷积模型。当然这个只是建议,并不是一定,只是简单反应了应对当前基础设施的低效的策略。
该结构的一个好处是能够大量增加每一大层的神经元数(增大网络宽度),而且同时不会使得后面层的计算量爆炸,这都得益于对于运算量大的卷积核进行提前降维。还有一点,这个设计遵从了实践中的直觉,也就是视觉信息需要进行多尺度处理然后整合,这样下一层在抽象特征时,就可以同时进行多尺度抽象。
对于计算资源的优化使用使得我们可以增加每一大层的宽度的同时还可以增加大层的数量(也就是同时增加网络深度和宽度),而不会陷入计算困境。我们发现这个网络结构在进行各种调试平衡计算资源后,往往会比拥有相近performance的不带有Inception结构的网络要快3-10倍,当然也是需要精心设计的。

GoogLeNet

对于“GoogLeNet”这个名字,我们指的是参加ILSVRC 2014比赛提交的结构。下图展示了网络结构。(经过自己运算和多方查证,个人觉得网络第一层对于params和ops的运算可能有误,应该是params:(3x7x7+1)x64=9472, ops=9472x112x112=119M,关于这个ops的计算不一定准确哈,但应该差不多,跟连接数是一个数量级)具体的参数变化过程就不再这里详述了。
这里写图片描述
所有的卷积,包括Inception模块里的,都是用ReLU。
输出为0均值的224x224的三通道RGB图像。
“#3x3 reduce”和“#5x5 reduce”代表在进行大卷积核卷积之前的1x1的卷积核数量。相应的“pool proj”对应池化后的,1x1卷积核的数量,同样这些降维/映射层也使用ReLU。
网络拥有22层当指考虑带参数的层(如果加入池化一共27层)。这个网络一共用到的网络层数(包括独立的构建单元)大约100层。对于进入分类器前使用平均池化,是基于NIN结构。我们额外增加了一层FC,这个线性层能够让网络适应任何的分类数目,这一层的添加只是为了方便,我们并不期待它会带来太大的影响。
对于相对深的网络来说,梯度是否能够有效地反向传播是一个需要考虑的问题。浅层网络的strong performance说明中间层的提取的特征应该非常具有区分性。通过在中间层连接一个额外的分类器,来保留低层stages的特征带来的区分度。这将用来对抗梯度消失问题,同时也引入一定的正则化效果。这些分类器将通过小卷积网络连接在Inception(4a)和Inception(4d)的输出上面。在训练时,它们的loss将会有权(0.3的权重)地叠加在网络的整个loss上。在样本预测时,这些额外的网络将会被废弃。后面的实验展示了这个额外网络带来的效果很小(大约0.5%),而且只要有一个就能够达到同样的效果(这里用了两个)。
这个额外网络的准确结构是(包括分类器):

  • 一个5x5,3步长的平均池化层,(4a)得到4x4x512的输出,(4d)得到4x4x528的输出
  • 一个128通道的1x1卷积层完成降维,然后经过ReLU
  • 一个有1024神经元的FC层,然后经过ReLU
  • 对FC层进行70%的dropout泛化
  • 一个带有softmax作为分类器的线性层。
    下图为详细的网络结构。
    这里写图片描述
Training Methodology

采用异步随机梯度下降算法,带有0.9的momentum,固定learning rate衰减策略(每8个epoch下降4%)。在inference的时候采用Ployak averaging来构建最后的模型。
在图片采样方法上,对图像的多种大小的patch进行采样,这些patch的大小均匀分布在图像原大小的8%至100%并且保证 [ 3 4 , 4 3 ] [\frac{3}{4}, \frac{4}{3}] [43,34]的patch长宽比。同时我们还发现对图像进行光度扭曲会有效对抗过拟合。

ILSVRC 2014 Classification Challenge Setup and Results

ILSVRC 2014 classificaiton challenge 要求对图像进行分类,一共有1000个类别。1.2M的训练集,5W的验证集以及10W的测试集。
我们没有使用额外的数据进行training。除了上面提到的训练时用到的技术,我们在测试时也使用了一些技术来提高performance。

  1. 我们分开训练了7个相同的GoogLeNet模型,初始化权重以及lr策略完全相同,只是图像采样方法以及输入图像顺序不同,最后结合这7个模型进行预测。
  2. 测试的时候,相比于AlexNet,我们采取了更加复杂的裁剪策略,先将图像resize为4种大小,短边分别为256,288,320,352,然后分别对resize后的图像的左,中,右部分进行方形裁取。然后对于每个裁取出的方形图像,我们取4个角以及中间的224x224的大小的区域以及再将这个裁取出的方形图像resize为224x224,一共6个,最后再取它们的镜面对称图像。所以每一张原始图像就会有4(4种大小)x3(左,中,右)x6(6种裁取)x2(镜面对称)=144个裁取图片。当然实际中,可能不需要这么多。
  3. 最后对所有的裁取图片在所有分类器上的输出求取平均完成最后预测。
总结

为了追求神经网络更好的表现,增加网络的深度和宽度是不可避免的,这也就会带来更多的参数导致过拟合以及计算量的增大,那么解决这两个问题的共同办法就是引入稀疏,用稀疏连接代替全连接甚至卷积里也引入稀疏,然而前人对于稀疏连接的实验表明其不能很好地利用并行运算优化,所以最终还是回到全连接。于是转换思路,考虑聚合稀疏矩阵到一个相对稠密的矩阵中来同时利用卷积带来的稀疏性以及当前软硬件对于稠密矩阵运算的高效性来完成突破。在这个想法的基础上,构思出了Inception模块,不仅完成了稀疏矩阵的聚合,还通过引入多尺度的卷积核来处理图像多尺度问题提高性能,同时还利用1x1卷积核加大网络深度,引入非线性的同时,完成了Inception模块内的降维,使得Inception计算量大大减小。还引入多分类器来处理梯度消失问题,虽然效果不是很好。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值