- 2012年,Alex Krizhevsky、Ilya Sutskever在多伦多大学Geoff Hinton的实验室设计出了一个深层的卷积神经网络AlexNet,夺得了2012年ImageNet LSVRC的冠军,且准确率远超第二名(top5错误率为15.3%,第二名为26.2%),引起了很大的轰动。AlexNet可以说是具有历史意义的一个网络结构,在此之前,深度学习已经沉寂了很长时间,自2012年AlexNet诞生之后,后面的ImageNet冠军都是用卷积神经网络(CNN)来做的,并且层次越来越深,使得CNN成为在图像识别分类的核心算法模型,带来了深度学习的大爆发。
- 随着神经网络层数的加深,有不可避免的带来过拟合和计算量增大的困扰,谷歌团队为了减少计算量和避免过拟合,提出了Inception模型,也叫作 GoogLeNet。并在2014年,ImageNet挑战赛(ILSVRC14)中,GoogLeNet获得了第一名。GoogLeNet模型结构的特点是网络层数更深了。随着谷歌团队的研究,Inception历经了V1、V2、V3、V4等多个版本的发展,并不断趋于完善,下面简要概述。
GoogleNet 模型
为什么增加神经网络的层数,会带来计算量大和过拟合的问题?
- 一般来说,提升网络性能最直接的办法就是增加网络深度和宽度,深度指网络层次数量、宽度指神经元数量。但这种方式存在以下问题:
- (1)参数太多,如果训练数据集有限,很容易产生过拟合;
- (2)网络越大、参数越多,计算复杂度越大;
- (3)网络越深,容易出现梯度消失的问题。
- 因此Inception 以降低参数量为目的,设计了一个稀疏网络结构,但是能够产生稠密的数据,既能增加神经网络表现,又能保证计算资源使用效率的网络结构。
模型结构
模型结构的特点:
- 首先将卷积核分组处理,也就是将多个小尺寸的卷积核和一个池化操作,其目的是降低其维度,计算起来更加容易。将多个卷积核和一个池化进行堆叠(要处理成卷积、池化后的尺寸相同,然后将通道相加)。一方面增加了网络的宽度,另一方面同时网络中的卷积的大小不一样,可以增加网络对不同尺度的适应性。
模型结构的缺点
- GoogleNet虽然降低了维度,计算更加容易了,但是缺点是每一层的卷积都是上一层的输出所得来的,这就使最后一层的卷积所需要的的计算量变得非常大,因此谷歌对其进行了改善,有了正式版的 Inception-V1模型。
Inception-V1
模型结构
参数详情
- 注:上表中的“#3x3 reduce”,“#5x5 reduce”表示在3x3,5x5卷积操作之前使用了1x1卷积的数量。
模型结构的特点:
- 第一:相对于 GoogleNet 模型 Inception-V1在非的卷积核前增加了的卷积操作,用来降低feature map通道的作用,这也就形成了Inception-V1的网络结构。
- 第二:网络最后采用了average pooling来代替全连接层,事实证明这样可以提高准确率0.6%。但是,实际在最后还是加了一个全连接层,主要是为了方便对输出进行灵活调整。
- 第三:虽然移除了全连接,但是网络中依然使用了Dropout。
- 第四:为了避免梯度消失,网络额外增加了2个辅助的softmax用于向前传导梯度(辅助分类器)。辅助分类器是将中间某一层的输出用作分类,并按一个较小的权重(0.3)加到最终分类结果中,这样相当于做了模型融合,同时给网络增加了反向传播的梯度信号,也提供了额外的正则化,对于整个网络的训练不仅提高了模型的准确性还极大的减少了参数的数量。
的卷积核的作用?
-
的卷积核和正常的卷积核完全是一样的,只不过它不再感受一个局部区域,不考虑像素与像素之间的关系。1×1的卷积本身就是不同feature channel的线性叠加,从而整合了不同通道间的信息。从上面的图,我们可以知道网络结构的参数和通道数目。
- 原始结构:
- 参数:(1×1×192×64) + (3×3×192×128) + (5×5×192×32) = 153600
- 通道数:64+128+32+192 = 416
- 加入1×1卷积后:
- 参数:1×1×192×64+(1×1×192×96+3×3×96×128)+(1×1×192×16+5×5×16×32)=15872
- 通道数: 64+128+32+32=256
- 原始结构:
- 的卷积核可以实现通道数量的升维和降维,并且是低成本的特征变换。上面的计算对比,发现影响参数数目,主要是大尺寸的卷积核(上面的),如果的卷积核的通道数很大时,可以很明显的降低参数数目。
的卷积核可以降低参数和改变通道数目,为何不大量采用的卷积核
我们一层可能会有多个卷积核,在同一个位置但在不同通道的卷积核输出结果相关性极高。一个的卷积核可以很自然的把这些相关性很高,在同一个空间位置,但不同通道的特征结合起来。而其它尺寸的卷积核(比如)可以保证特征的多样性,因此也可以适量使用。
在inception module中,通常1×1的卷积比例(输出通道占比)最高,3×3和5×5的卷积稍低。在整个网络中,会有多个堆叠的inception module,希望靠后的inception module可以捕捉更高阶的抽象特征,因此靠后的inception module中,大的卷积应该占比变多。
Inception-V2
- GoogLeNet设计的初衷就是要又准又快,而如果只是单纯的堆叠网络虽然可以提高准确率,但是会导致计算效率有明显的下降,所以如何在不增加过多计算量的同时提高网络的表达能力就成为了一个问题。Inception V2版本的解决方案就是修改Inception的内部计算逻辑,提出了比较特殊的“卷积”计算结构。
- Inception-V2 论文地址
参数详情
模型结构特点
- 第一:Inception V2吸收了VGGNet的优点,利用多个小尺度卷积代替一个大尺度卷积,节省计算量。
- 第二:引入BN(Batch Normalization)避免梯度消失(inception V1中使用多个中间层loss,避免梯度消失)。
- BN是一种非常有效的正则化方法,可以让大型卷积网络的训练速度加快,同时分类准确率也可以得到提高。
- BN可以降低网络对初始化权重的不敏感。
- BN在用于神经网络某层时,会对每一个mini-batch数据的内部进行标准化处理,使得输出为N(0,1)的正态分布,减少了内部神经元分布的改变。
- BN的论文中提出,传统的深度网络再训练时,每一层的输入的分布都在变化,导致训练变得困难,我们只能使用一个很小的学习速率解决这个问题。而对每一层使用BN之后,我们就可以有效的解决这个问题,学习速率可以增大很多倍,达到之前的准确率所需要的迭代次数只有1/4,训练时间大大缩短。而且还可以继续训练,最终超过Inception V1。
- BN使训练更快,可以减少数据增强过程中对数据的光学畸形,每个样本被训练的次数更少,因此更真实的样本对训练更有帮助。
- 第三:去除Dropout并减轻L2正则化,因为BN已经起到正则化的作用。
- 第四:去除 LRN(Local Response Normalization)即局部响应归一化,LRN函数最早的出处AlexNet,其类似Dropout的功能,其防止数据过拟合而提出的一种处理方法。关于LRN在AlexNet中,再详细介绍。
- 在使用这些措施之后,Inception V2再达到Inception V1的准确率时快了14倍,并且模型在收敛时准确率的上限更高。
卷积分解(Factorizing Convolutions)
- 大尺寸的卷积核可以带来更大的感受野,但也意味着会产生更多的参数。GoogLeNet团队提出可以用2个连续的3x3卷积层组成的小网络来代替单个的5x5卷积层,即在保持感受野范围的同时又减少了参数量。如此可以有效地只使用约(3x3 + 3x3)/(5x5)=72%的计算开销。
-
一个5×5的卷积核可以由两个3×3的卷积核的表示。如下图:
-
我们可以在inception v1中所用的 inception_block 升级为了如下一种新的形式。
Inception-V3
参数详情
- 注:上表中的Figure 5指没有进化的Inception,Figure 6是指小卷积版的Inception(用3x3卷积核代替5x5卷积核),Figure 7是指不对称版的Inception(用1xn、nx1卷积核代替nxn卷积核).
模型结构特点
- 第一:将对称的conv计算分解为非对称的conv计算
-
引入了Factorization into small convolution的思想,将一个较大的二维卷积拆成两个较小的一维卷积.将7×7分解成两个一维的卷积(1×7,7×1),3×3也是一样(1×3,3×1),这样的好处,既可以加速计算,又可以将1个卷积拆成2个卷积,使得网络深度进一步增加,增加了网络的非线性(每增加一层都要进行ReLU)。这种非对称的卷积结构拆分,其结果比拆成几个相同的小卷积效果更明显,可以处理更多、更丰富的空间特征,增加特征多样性。如下图
-
- 第二:优化了Inception Module的结构
-
现在Inception Module有35×35、17×17、8×8三种结构,如下图所示。这些Inception Module 只在网络的后部出现,前部还是普通的卷积层。并且Inception V3除了在Inception Module中使用了分支,还在分支中使用了分支(8×8的结构中),可以说是Network in Network in Network。
-
- 第三:增加的分类层的作用分析
-
在inception v1中,作者为了减少深度模型中反向传播时梯度消失的问题,而提出了在模型的中间与较底部增加了两个extra 分类loss层的方案。在inception v2中,作者同样使用了extra 分类 loss层。不过他们反思了之前说过的话,觉着不大对了,果断以今日之我否定了昨日之我。他们现在(当时是2015年)觉着extra 分类 loss的真正意义在于对训练参数进行regularization。为此他们试着在这些extra 分类 loss的FC层里添加了BN或者dropout层,果然发现分类结果好了些,于是就兴冲冲地发布了这一‘重大’最新发现。
-
- 第四:更高效的下采样方案
深度CNN网络中一般会不断使用Pool层来减少feature maps size。这必然意味着传递信息的不断丢失。一般为了减少信息的过度丢失,在加入Pool层减少feature maps size的同时都会同比例扩大它的channels数目(此一思想与做法可在VGG网络中明显看到,亦已被所有的CNN网络设计所遵循)。
-
真正实行可以有两个办法。
- 左图。第一种是先做Pooling减少feature map size,然后再使用1x1 conv对其channels数目放大,不过显然首先使用Pooling的话会造成信息硬性丢失的不可避免。即违反了神经网络一般设计原则的代表性瓶颈。关于此原则原文是这样表述的【Avoid representational bottlenecks, especially early in the network. Feed-forward networks can be represented by an acyclic graph from the input layer(s) to the classifier or regressor. This defines a clear direction for the information flow. For any cut separating the inputs from the outputs, one can access the amount of information passing though the cut. One should avoid bottlenecks with extreme compression. In general the representation size should gently decrease from the inputs to the outputs before reaching the final representation used for the task at hand. Theoretically, information content can not be assessed merely by the dimensionality of the representation as it discards important factors like correlation structure; the dimensional ity merely provides a rough estimate of information content.】
-
右图。第二种将channels数目扩大(一般使用1x1 conv),然后再使用pool层来减少feature map size,不过其中1x1 conv的计算显然会有非常大的计算开销。
-
Goole团队的方法。即分别使用pool与conv直接减少feature map size,然后再将两者算出的feature maps组合起来。下图所示:
Inception-V4
- Inception V4相比V3主要结合了微软的ResNet中的bottleneck结构。
- Inception-V4 论文地址
残差连接(Residual Connection)
-
Residual connection 已被证明了利用信号的加和合并既可用于图像识别,又可用于对象检测。作者认为,残差连接本质上是训练非常深的卷积模型所必需的。
模型结构
- Inception V4主要利用残差连接(Residual Connection)来改进V3结构,得到Inception-ResNet-v1,Inception-ResNet-v2,Inception-v4网络。
-
在inception网络设计中,最开始的几层总是不建议使用inception等模块来节省计算以抽取信息的,因此它们多是只采用简单的conv层或者相对简单的inception模块。见下图
-
Inception-v4网络的总体架构,见下图
-
细节,见下图Figures 3, 4, 5, 6, 7 and 8。
- 在论文中,还有一些利用residual修改的Inception-ResNet-v1 ,Inception-ResNet-v2 ,这里就不在啰嗦了,可以阅读原论文。
总结
- Inception V1——构建了1x1、3x3、5x5的 conv 和3x3的 pooling 的分支网络module,同时使用MLPConv和全局平均池化,扩宽卷积层网络宽度,增加了网络对尺度的适应性;
- Inception V2——提出了Batch Normalization,代替Dropout和LRN,其正则化的效果让大型卷积网络的训练速度加快很多倍,同时收敛后的分类准确率也可以得到大幅提高,同时借鉴VGGNet使用两个3x3的卷积核代替5x5的卷积核,在降低参数量同时提高网络学习能力;
- Inception V3——引入了 Factorization,将一个较大的二维卷积拆成两个较小的一维卷积,比如将3x3卷积拆成1x3卷积和3x1卷积,一方面节约了大量参数,加速运算并减轻了过拟合,同时增加了一层非线性扩展模型表达能力,除了在 Inception Module 中使用分支,还在分支中使用了分支(Network In Network In Network);
- Inception V4——研究了 Inception Module 结合 Residual Connection,结合 ResNet 可以极大地加速训练,同时极大提升性能,在构建 Inception-ResNet 网络同时,还设计了一个更深更优化的 Inception v4 模型,能达到相媲美的性能。