Google Inception Net介绍

一、Inception Net V1简介

Google Inception Net(Inception V1)首次出现是在ILSVRC 2014的比赛中,Google Inception Net以top5的错误率为6.67%获得了第一名,而VGGNet的top5错误率为7.3%。Inception V1的特点就是控制了计算量和参数量,Inception V1只有500万 的参数量,而AlexNet有6000万,Inception V1一共有22层,比VGGNet更深。 Inception V1降低参数量主要有两个目的,第一,参数量越大,需要提供模型学习的数据量越大。第二,参数越多,需要消耗的硬件资源更多。Inception V1参数少但效果好的原因除了模型层数更深、表达能力更强之外,还得益于:第一,去除了最后的全连接层,使用全局平均池化层来代替全连接层,通过平均池化将图片尺寸变为1×1,在卷积神经网络中,全连接层占据模型的参数量是最多的,使用全连接层还会引起过拟合,去除全连接层可以降低模型过拟合的同时还能加快模型的训练。用全局平均池化层来取代全连接层的思想来自于Network In Network论文。第二,在Inception V1中精心设计了Inception Module来提高参数的利用率,Inception Module其实就是大网络中的一个小网络,通过反复堆叠Inception Module来形成一个大网络。


上图就是一个Inception Module,它一共包含了4个 分支。第一个分支是一个1×1的卷积,1×1的卷积是一个非常优秀的结构,它可以跨通道组织信息,来提高网络的表达能力,同时还可以对输出通道进行升维和降维,1×1的卷积还可以进行低成本的跨通道特征变换,在Google Inception Net中大量使用了1×1的卷积。第二个分支,先使用了一个1×1的卷积,然后再连接了一个3×3的卷积,相当于进行了两次特征变换。第三个分支的结构与第二个分类相类似,只是将3×3的卷积换成了更大的5×5的卷积。最后一个分支,是先进行3×3的最大池化,然后再使用1×1的卷积。最后通过聚合操作在输出通道上将四个分支的结果进行合并。Inception Module中包含了1×1、3×3、5×5三种不同大小的卷积和一个3×3的最大池化,来增加网络对于不同尺度的适应性。

在Inception Module中,1×1卷积的比例(输出通道数占比)最高,3×3和5×5的卷积稍低。在整个网络中,堆叠了多个Inception Module,为了使得靠后的Inception Module能够捕捉到更高阶的抽象特征,所以在靠后的Inception Module的卷积空间集中度应该降低,来获取更大面积的特征。所以,越靠后的Inception Module,3×3和5×5这两种大小的卷积核占比最多。

Inception V1一共有22层,除了最后一层的输出,其中间节点的分类效果也很好。所以,在Inception Net中,还使用了辅助分类节点(auxiliary classifiers),将中间某一层的输出用作分类,并按一个较小的权重(0.3)加到最终的分类结果中。相当于做了模型融合,同时还给网络增加了方向传播的梯度信号。

二、Inception Net发展历史

Inception V1是在2014年9月的论文Going Deeper with Convolutions,其top5的错误率为6.67%。Inception V1还只是利用了CPU,使用异步的SGD训练的,学习速率每迭代8个epoch降低4%。Inception V1同样也使用了Multi-Scale、Multi-Crop等数据增强方法,并在不同的采样数据上训练了7个模型进行融合。

Inception V2是在2015年2月的论文Batch Normalization:Accelerating Deep Network Traning by reducing Internal Covariate中提出的,top5的错误率为4.8%。Inception V2借鉴了VGGNet的思想,使用两个3×3的卷积来代替5×5的卷积。Batch Normalization(简称BN)是一个非常有效的正则化方法,它可以加快大型网络的训练速度,同时还可以使得收敛后网络的分类准确率大幅度提高。BN使用在神经网络中,会对每一个batch数据进行内部的标准化处理(均值为0,方差为1),使得输出规范化到N(0,1)的正态分布,减少Internal Covariate Shift(内部神经元分布的改变)。在BN的论文中指出,传统的深度神经网络在训练的时候,每一层输入的分布都在变化,导致训练变得困难,我们只能使用一个很小的学习速率来解决这个问题。如果对每一层都使用BN之后,我们就可以有效地解决这个问题,学习速率可以增大很多倍,达到之前Inception V1的准确率需要的迭代次数只有1/14,训练时间可以大幅度缩短。在达到之前的准确率后,还可以继续训练,最终可以达到top5的错误率为4.8%,超过Inception V1,已经优于人眼水平。BN在某种意义上达到了正则化的效果,还可以减少或者取消Dropout,来简化网络结构

在使用BN的时候需要注意:如果只是单纯使用BN获得的增益还不明显,还需要做一些调整。增大学习率并加快学习衰减速度来适应BN规划后的数据;去除Dropout并减轻L2正则化;去除LRN;更彻底地对训练样本进行shuffle;减少数据增强过程中对数据的光学畸变。

Inception V3是在2015年12月的论文Rethinking the Inception Architecture for computer vision中提出的,top5错误率为3.5%。Inception V3主要有两个方面的改动:第一引入了Factorization into small convolutions的思想,将一个较大二维卷积拆成两个较小的一维卷积,如将7×7的卷积拆成1×7和7×1的卷积,比将一个7×7的卷积拆成3个3×3的卷积更节约参数,前一个只需要7+7=14个参数,后一个需要3*3*3=27个。将一个7×7的卷积拆成1×7和7×1,除了可以减少参数之外,还可以降低模型的过拟合,同时还增加了一层非线性扩展模型表达能力。这种非对称的卷积结构拆分,其结果比对称拆分为几个相同的小卷积核效果更加明显,可以处理更多、更丰富的空间特征,来增加特征的多样性。第二,Inception V3优化了Inceptin Module的结构,包含了35×35、17×17和8×8三种不同结构。


Inception V4是在2016年2月的论文inception-v4,Inception-ResNet and the impact of residual connections on learning中提出的,其top5错误率为3.08%。Inception V4相对于Inception V3主要是结合了微软的ResNet.

在下一篇文章中,将主要介绍Inception V3的实现。论文原文Inception V1-V4

猜你喜欢

转载自blog.csdn.net/sinat_29957455/article/details/80766850