本文主要是介绍深度学习总结:常见卷积神经网络——Inception,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
深度学习总结:常见卷积神经网络(2)——Inception
- Inception v1
- Inception v2
- BN层
- Inception v3
- 非对称卷积分解
- Inception v4
- 总结
上一篇博客主要回顾了VGG和Resnet,这一篇主要回顾一下GoogLeNet系列。
Inception v1
Inception v1提出于2014年,和VGG是同一年,使用了Inception的结构。
首先inception v1的层数是22层,但他的参数量却只有Alexnet的十二分之一。提升卷积神经网络的一个有效方法就是加大网络,无非就就是从宽度和深度两方面考虑,但这样会带来两个缺点:1参数变多,同时以造成过拟合,2网络的加深,比较难训练,同时梯度消失不可避免。
Inception同时从深度和宽度两方面考虑。同时考虑逐层的构造网络,如果数据集的概率分布能够被一个神经网络所表达,那么构造这个网络的最佳方法是逐层构筑网络,即将上一层高度相关的节点连接在一起。几乎所有效果好的深度网络都具有这一点,不管AlexNet VGG堆叠多个卷积,GoogLeNet堆叠多个inception模块,还是ResNet堆叠多个resblock。在构筑网络时,还考虑了稀疏的结构:人脑的神经元连接就是稀疏的,因此大型神经网络的合理连接方式也应该是稀疏的。稀疏的结构对于大型神经网络至关重要,可以减轻计算量并减少过拟合。 卷积操作(局部连接,权值共享)本身就是一种稀疏的结构,相比于全连接网络结构是很稀疏的。
- 深度:采用了22层的结构,9个inception堆叠,同时为了避免梯度消失的问题,同时将梯度传递到较浅的层,在不同的层增加了辅助分类器输出Loss,这样做的另一个好处是在分类中考虑了中间层和浅层的特征。
另外,在网络的开始用了7×7的卷积,目的是为了降低图像的特征层的大小,减少后面的计算量。
- 宽度:Inception结构,利用 size 为 1、 3、 5 不同大小的卷积核,同一层网络在不同通道的卷积核输出结果的相关性极高,1×1的卷积核可以自然地把这些相关性高的同一位置不同通道的特征结合起来,其他尺寸的卷积核保证了特征提取的多样性。
上图即为Inception Module,其中3 × 3和 5 × 5卷积之前的1 ×1的卷积核和池化层之后的 1 × 1的卷积核的作用是为了减少网络参数,同时方便之后的concat而降维。
在Inception Module中,通常1×1的卷积比例最高,3×3和5×5的卷积稍低。在整个网络中,会有多个堆叠的Inception Module,希望靠后的Inception Module能捕捉更高阶的抽象特征,因此在靠后的Inception Module中,大卷积的占比变多。
训练和测试的trick,通过resize和crop对图像进行增强。
结论,稀疏的结构是有用的,Inception structure 提升了精度,但是计算消耗对比于更浅和更窄的网络增加的较少。
Inception v2
Inception v2 提出于2015年,其主要结构相对于Inception v1的变化不是很大,主要贡献点在于提出了BN层,即BatchNormalization。
论文的出发点在于,神经网络的在训练过程中,每一层输入数据的分布是不断变化的,网络结构需要不断的去适应由于输入数据分布带来的变化。每层数据的输入,都会受到前面所有层的影响。很小的参数的变化,都会对后面的数据输入造成很大的扰动,层数越深,扰动越大。使得我们在训练网络的时候需要更低的学习率和更小心的进行参数初始化,导致我们难以充分的训练一个具有饱满的非线性模型的结构。因此,作者认为,如果对每一层的数据输入,固定其分布,能够加速深度模型的训练。神经网络学习过程本质就是为了学习数据分布,一旦训练数据与测试数据的分布不同,那么网络的泛化能力也大大降低;另外一方面,一旦每批训练数据的分布各不相同(batch 梯度下降),那么网络就要在每次迭代都去学习适应不同的分布,这样将会大大降低网络的训练速度,这也正是为什么我们需要对数据都要做一个归一化预处理的原因。
BN层
如果对每一层的数据进行归一化,即变成零均值一方差,由于数据集中到sigmoid的近似线性部分,破坏了网络的非线性。为了解决这个问题,作者在归一化后面加入了尺度的变换和平移,保证模型的非线性能力。其中λ和β都是可以学习的。
归一化具有可导性,因此可以端到端的训练。
在inference时,
另外,归一化的过程中,由于需要减去均值的操作,z=g(Wu+b)中的b可以省去,变成z=g(BN(Wu))。
BN层的好处:
- 减小了internal covariance shift的影响,隐藏层不用浪费时间对付变化的输入分布,模型训练收敛的更快。
- 由于相对而言,优化算法面对的问题简单了,learning rate可以比没有BN的网络稍大一些,模型训练收敛的更快。
- 网络权重的初始化比没有BN的时候更容易,敏感度下降。
- minibatch的均值方差有一定统计涨落,能起到regularization的作用,可以取代dropout。
其他trick:
- 增大了学习率,因为BN层的存在,不用担心因学习率过大而导致的小变化引起的大扰动问题。
- 借鉴了VGG,采用两个3×3的卷积层代替5×5的卷积层。
- BN层具有很强的泛化能力,可以替代dropout。
- 使用了随机梯度下降SGD,作者在论文一开始就说了大段SGD的好处。
- 由于BN层的存在,可以去除LRN
结论,BN层可以解决数据分布变化的问题(covariate shift)。可以增大学习率,加快了训练的速度。
Inception v3
Inception v3提出于2015年,和v2一样,其基本框架结构和v1一致,主要是对原来结构的优化和改进。
首先,论文介绍了卷积神经网络的主要设计原则,这些原则主要是通过大量的实验的出来的:
- 要避免表示的瓶颈,尤其是在网络的前面层,网络中特征层的尺寸越来越小,但是这个过程要平稳,前面的层不能压缩的太过,
- 高维度的特征更容易处理,增加维度有利于生成更多解耦的信息,方便训练的更快。
- 在低维度进行空间的聚合,可以减少信息的损失,因为低维度空间中相近的信息相互关联。
- 要平衡好深度和宽度,虽然同时增加有利于提高网络的性能,但是会增加计算的消耗。
Inception v3的主要贡献点在于卷积的分解,同时增加了一些减少计算量的结构上的改变。
在VGG中,提出,可以用两个3×3来代替一个5×5的卷积核,可以证明,其感受野是一致的。
非对称卷积分解
受到之前vgg的启发,作者将原来3×3的卷积进一步分解,用3×1+1×3的卷积来代替3×3的卷积。如下图所示
这种卷积分解的方法可以进一步减少网络的参数,加快网络的速度。
相应的,原始版本的Inception Module也变为下图所示
实验证明,上述的结构在网络的前面几层效果一般,但是在中间层可以取得很好的效果。
其他trick:
- 辅助分类器如果加入BN层或者,dropout,网络效果会变得更好,regularizer的作用。
- 降低特征图的尺寸,双线性操作(一边卷积,一边池化),在降低特征尺度的同时,增加了channel。图10
- 在需要升维并降低特征图尺寸的地方,先池化再卷积可以减少计算量。图9
- 真对不同尺度大小的特征层,设计了几种不同的Inception块,具体见论文。
结论,作者提出了几条扩大网络规模的设计准则,同时提出了卷积核分解的方法,另外其他的trick也都提高了网络的性能。
Inception v4
之前介绍的v2,v3版本在结构上相比于v1并不是很大,而v4版本结构的变化较大,针对不同大小的特征层,针对性的提出了不同的Inception Module。论文里不仅提出了 Inception V4的,还提出了基于inception 和Resnet 的Inception-Resnet-v1和Inception-Resnet-v2,其中的Inception Module都带有残差连接。
由于Inception v4的改进主要是网络结构的改进,这里不再细说,详细结构自行查阅论文。其主要贡献点在于使用并行的结构,不对称的卷积,并且用了大量的1×1的卷积核进行维度的变换。
v4版本的inception主要有以下三种,
总结
本文主要总结了inception从v1的提出,到v2 v3 v4不同版本的改进,简单介绍了每篇论文的创新点和改进点。
这篇关于深度学习总结:常见卷积神经网络——Inception的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!