论文笔记:Going deeper with convolutions(inception v1)

来源:互联网 发布:快速提高英语口语 知乎 编辑:程序博客网 时间:2024/05/16 04:47

摘要:

论文提出了一个新的框架,这个框架的主要特点是提升了网络内计算资源的利用率。这是通过在保持计算量不变的同时,精心设计地增加网络的深度与宽度来实现的。为了优化质量,该结构的设计基于Hebbian原则和多尺度处理的直觉。

.简介:

另一个值得注意的因素是,在移动和嵌入式计算的应用的引领下,我们算法的效率-尤其是算法的能耗和内存的使用-变得越来越重要。需要注意的是正是基于这样的考虑,才设计出本文的深度网络,而不是纯粹的为了获得一个更好的准确率。我们的大多数实验模型在预测时的计算预算都控制在15亿个乘累加内。(注释:比AlexNet多了14层,但参数少了12倍,大约500万个参数

.相关工作:

Network-in-Network是由Lin[12]等人为增加神经网络表现力提出的一种方法。应用在卷积层时,该方法可以看作在ReLu层后添加一个1*1的卷积层。这样能够轻松的将它成到现有的CNN模型中。我们在模型中大量使用了NIN不过在我们的设置里,1*1卷积有两个目的:最关键的是用作降维模块来消除计算量瓶颈,否则会限制我们网络的大小。这可以在性能不下降的同时,增加网络的宽度和深度。

.动机及更高阶考虑:

提升深度神经网络性能最直接的方法就是增加网络规模。这包括增加网络深度-即网络的层数,以及网络的宽度-即各层的节点数。这是训练更高质量模型的简单而安全的方法,特别是给定了大规模的标记训练集。然而这种简单的方法有两个瓶颈

越大的规模意味着更大量的参数,这使得扩大后的网络更容易过拟合。尤其是训练集内标签数量有限的时候。这是一个最要的瓶颈。

另一个缺陷是一味地增加网络尺度会带来计算资源的暴增。例如在一个深度视觉网络中,如果2个卷积层相连,任何卷积核数量的增加会导致计算量二次方倍数的增长。如果增加的容量没有被有效利用(例如大多数权值趋近于0),则计算资源被大量浪费。因为在实际中计算资源预算有限,因此即使主要目标是提高结果的质量,有效分配计算资源也应优于盲目增加网络大小。

解决这两个问题的基本方法最终归结为使用稀疏连接代替全连接结构,甚至将其应用到卷积中。这符合Hebbian原则:neuronsthatfire together,wiretogether。但是非均匀稀疏数据结构的数值计算效率非常低。可以采用将多个稀疏矩阵合并成相关的稠密子矩阵的方法来解决。

(此处论文有很多难以理解的地方)

四.结构细节

Inception架构的主要思想是找出如何让已有的稠密组件接近与覆盖卷积视觉网络中的最佳局部稀疏结构。(注释:inception通过使用1*1,3*3,5*5卷积,近似模拟了局部的稀疏结构。稀疏:降低参数量就是引入了更多的稀疏)

采用上面的模块有一个大问题是在卷积层顶端由于滤波器太多,即使是5x5的卷积都会让计算开销过分昂贵。当pooling单元加入之后这个问题更加明显:输出滤波器的数量等于前一步中滤波器的数量。pooling层的输出和卷积层的输出融合会导致每阶段输出数量的逐步增长。即使这个架构可能包含了最优的稀疏结构,它还是会非常低效,导致计算没经过几步就崩溃。 

因此有了架构的第二个想法:在计算需求增加很多的地方使用降维和映射。即在3x3和5x5的卷积前用一个1x1的卷积用于减少计算。除了减少计算了,它还用于修正线性激活。如下图所示,左边是加入降维前的,右边是加入降维后的。


(注释:原来造神经网络,都是一条线下来,我们可以回想一下AlexNetVGG等著名网络,而IA分叉-汇聚型网络,也就是说在一层网络中存在多个不同尺度的kernels,卷积完毕后再汇聚,为了更好理解,汇聚tensorflow代码写出来是这样的:

net = tf.concat(3, [branch1x1, branch5x5, branch3x3, branch_pool])

就是简单的在kernel维度把矩阵concatenate起来。但是这么做有一个问题,会产生维度爆炸,什么意思呢?假如branch1x1branch3x3branch5x5都有256kernels,加上branch_poolkernels(假定为256),经过tf.concat操作,最终的kernels256×4=1024kernels!这没法接受啊!如果多层IA叠加起来,那kernels的数量岂不上天!!他加入了kernels数量控制方式,就是那些1×1的卷积层,这些1×1的卷积层输出kernels会比上一层要少,这样即便在经过tf.concat以后,总kernels数量不会增加太多。另外,这些1×1的卷积层还增加了网络的非线性程度。)

一般的Inception network就是把上面的Inception模块堆叠起来,中间偶尔做一下maxpool减低下分辨率。因为一些技术上原因,比较好的方式是保持低层为传统卷积方式不变,只在较高的层开始Inception模块。 

这种架构的两个主要优点:一是显著增加了每一步的单元数目,并且控制了计算复杂度。降维的普遍使用能够屏蔽最后一步到下一层的大量输入滤波器,在对它们用大的patch size卷积前首先降维。二是视觉信息在不同的尺度上进行处理然后聚合,这样下一步可以同时从不同尺度提取特征。 



阅读全文
0 0