《Going Deeper with Convolutions》论文解读
本文提出了GoogLeNet的网络结构,在ILSVRC2014取得了最好的成绩。本文和Network In Network一样,对网络中的传统卷积层进行了修改,提出了被称为Inception的结构。
Motivation
提高深度神经网络性能的关键在于增加深度和宽度。但是大的网络存在3个主要问题:发生过拟合,计算资源不足,稀疏的数据结构带来计算性能低下。
Inception
本文修改了传统的卷积层,提出了被称为Inception的结构。
Inception module的提出主要考虑多个不同size的卷积核能够hold图像当中不同cluster的信息,为方便计算,paper中分别使用1*1,3*3,5*5,同时加入3*3 max pooling模块。
文章指出这种naive的结构存在着问题:每一层Inception module的输出的filters将是分支所有filters数量的和,经过多层之后,最终model的数量将会变得巨大,naive的inception会对计算资源有更大的依赖。
根据Network-in-Network模型,1*1的卷积能够有效进行降维,所以文章提出了Inception module with dimension reduction,在不损失模型特征表示能力的前提下,尽量减少filters的数量,达到减少model复杂度的目的:
1*1卷积如何降维?只要设置1*1卷积核数量比上层feature map数量少,这样1*1卷积输出的feature map就比输入的维度低,也就实现了降维。
Filter concatenation如何进行?把4个卷积输出的feature map直接进行堆叠就可以了。
GoogLeNet
完整的GoogLeNet结构:
在前面几层仍然是传统的卷积层和池化层,在后面引入了Inception的结构。观察一下输出层:在inception(5b)后面使用了7*7大小的avg pool,这个和Network in Network结构是一样的,再将这1024个输出和softmax层连接,这里的参数只有1000k个。对比AlexNet,虽然网络层数增加了很多,但是参数数量却少很多的原因就在于此:大部分的参数都在全连接层。
看inception(3a)就是一个完整的inception结构。它的输出是28*28*256,这个256层是怎么来的呢?64+128+32+32=256,也就是说这个inception的输出是由4个卷积层结果直接堆叠形成的。再看#3*3 reduce,输出是96层,而输入时192层,也就实现了降维的目的。
效果
取得了6.67%的最好成绩。
总结
和NIN相似,本文修改传统的卷积层结构,使网络获得更大的深度和宽度。