这就是神经网络 3:NIN,Inception-V1,Inception-V2,Inception-V3, Inception-V4

NIN (2014)

NIN全称是‘Network In Network’。这篇论文主要有两个改进思路:MLPconv和全局平均池化。

MLPconv全称是multilayer perceptron convolution layer(直译为:多层感知机卷积层),也就是普通卷积层+1x1卷积+ReLU激活函数。

NIN中的MLPconv是对conv+relu的改进,conv+relu构建的是一个一种广义线性模型(GLM:(Generalized linear model))。所以用CNN进行特征提取时,其实就隐含地假设了特征是线性可分的,可实际问题往往是难以线性可分的。

GLM的抽象能力是比较低水平的,自然而然地我们想到用一种抽象能力更强的模型去替换它,从而提升传统CNN的表达能力。

使用MLPconv可以抽象出更好的局部特征,增加局部模型的表达能力。下图为传统卷积操作和MLPconv的对比。
在这里插入图片描述

传统分类CNN最后都会跟全连接层,参数个数非常之多,也容易引起过拟合。NIN提出了全局平局池化,每个特征图取平均作为一个类的分类得分,省去了参数,避免过拟合。

在这里插入图片描述

作者比较了全连接和全局平均池化,发现全局平均池化效果还不错(结果是在CIFAR-10上测试的)。

在这里插入图片描述

NIN的优点:
1.更好的局部抽象能力,这是MLPconv带来的。
2.全局平均池化,不需要全连接的参数优化,避免过拟合。
3.参数更少,模型更小。

NIN中还有一个很牛的trick:1x1卷积。用来降维和进行通道间信息融合。后面inception会用到。

GoogleNet(inception V1, 2014)

GoogleNet是ILSVRC2014分类任务的冠军。

增加网络性能的方法自然是增加宽度和深度,但是随着宽度和深度的增加,参数和计算量也增加,过拟合和梯度弥散的问题也来了。GoogleNet出发点就是找到一种表达能力强、计算量小的局部网络结构(Inception模块),然后进行堆叠。

Inception模块主要受到NIN的启发,不过作者实现的方式是多种大小卷积并联,在增加宽度的同时增加网络对尺度的适应性。多种视野的卷积核并列,由网络自己学习最有用的信息。

当然在底层的Inception模块中3x3和5x5的占比较少,随着网络的加深,提取的信息抽象的层次越来越高,3x3和5x5的比例也相应的增加了。

在这里插入图片描述

原始的inception模块计算量还是比较大的,特别是3x3和5x5的部分,因此作者在这些卷积前面加入1x1的卷积来降维(减少通道数并融合各通道信息),大大减少了计算量。

训练的时候在不同深度处增加了两个loss来保证梯度回传消失的现象,推理的时候这两个loss被剔除(这个思路类似resnet)。这解决了网络加深的问题。

Inception-v1共22层,top-5错误率6.67%,15亿次浮点运算,500万参数(AlexNet 6000万)。

参赛的GoogleNet的结构如下:

在这里插入图片描述

Inception V2(2015)

一方面了加入了BN层,使每一层的输出都规范化到一个N(0,1)的高斯;另外一方面学习VGG用2个3x3的conv替代inception模块中的5x5,既降低了参数数量,也加速计算;

在这里插入图片描述

Inception V3(2016)

基本规则

规则1:要防止出现特征描述的瓶颈(representational bottleneck)。所谓特征描述的瓶颈就是中间某层对特征在空间维度进行较大比例的压缩(比如使用pooling时),导致很多特征丢失。虽然Pooling是CNN结构中必须的功能,但我们可以通过一些优化方法来减少Pooling造成的损失。

规则2:特征的数目越多收敛的越快。相互独立的特征越多,输入的信息就被分解的越彻底,分解的子特征间相关性低,子特征内部相关性高,把相关性强的聚集在了一起会更容易收敛。这点就是Hebbin原理:fire together, wire together。规则2和规则1可以组合在一起理解,特征越多能加快收敛速度,但是无法弥补Pooling造成的特征损失,Pooling造成的representational bottleneck要靠其他方法来解决。

规则3:可以压缩特征维度数,来减少计算量。inception-v1中提出的用1x1卷积先降维再作特征提取就是利用这点。不同维度的信息有相关性,降维可以理解成一种无损或低损压缩,即使维度降低了,仍然可以利用相关性恢复出原有的信息。

规则4:整个网络结构的深度和宽度(特征维度数)要做到平衡。只有等比例的增大深度和维度才能最大限度的提升网络的性能。

优化方法

以下优化方法就是根据前面的规则总结出的:

方法1:可以将大尺度的卷积分解成多个小尺度的卷积来减少计算量。比如将1个5x5的卷积分解成两个3x3的卷积串联

方法2:可以使用非对称卷积。将nxn的卷积分解成1xn和nx1卷积的串联。作者通过测试发现非对称卷积用在网络中靠中间的层级才有较好的效果

方法3:可以使用并行结构来优化Pooling。

方法4:使用Label Smoothing来对网络输出进行正则化。

新的网络组件

V3论文中的网络结构如下:

在这里插入图片描述

其中三个inception模块如下:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

前两个inception模块都是根据上面提到的规则3建立的。最后一个模块时根据规则2建立的,也就是在不同的方向上找不同的特征加速收敛。

三个inception模块的摆放位置也有学问,figure 6在中间,因为作者发现非对称卷积用在网络中靠中间的层级才有较好的效果。figure7放最后面,此时特征图抽象层次已经比较高,使用不同方向的非对称卷积生成相关性低的特征(正交),加速训练的收敛速度。

(根据规则1)除了上述三个inception模块,还有一个并行Pooling结构:

在这里插入图片描述

网络细节

在这里插入图片描述

在“Inception-v2”行,变化是累积的并且接下来的每一行都包含除了前面的变化之外的新变化。最后一行是所有的变化,称为“Inception-v3”。
(注意,这篇论文把最低配的V3称为V2,但是前面一篇讲BN的论文才是通常意义上的V2)

V3相对于V2的变化:

  • 用RMSProp训练
  • 使用Label smoothing进行模型正则
  • 非对称卷积(n=7)
  • 加入带BN的辅助分类器

总结

inception v3把结构弄的更复杂,主要想减小计算量并提高了精度。相比inception v1,参数数量和计算量增加有限(参考上面最后一个表最后一列),但是精度大为提高了。

(其它细节:inception V1的inception模块内的pool方法是max pool, 从inception V2开始都变成averange pool了)

Inception-V4、Inception-ResNet-V1、Inception-ResNet-V2(2016)

Inception V4的论文总共提出三个网络:Inception-V4、Inception-ResNet-V1、Inception-ResNet-V2。

Inception-ResNet-V1可以看做是对Inception-V3的改进,计算量和最终测试性能都差不多。Inception-ResNet-V2测试结果和Inception-V4也十分接近。

一个模型进化4次,基本套路都熟悉了,所以作者把网络的大体架构都固定下来了:

  • 入口称为Stem模块(V3里就有类似的部分,只是没作为整体拿出来讲),负责提取底层特征并把分辨率从299x299降到35x35;
  • 三种inception模块,分别在35x35、17x17和8x8上工作;
  • 然后是两种Reduction模块,放在三种inception之间

所以每个网络只要讲明白3种inception模块、2种Reduction模块和Stem模块共6个模块的细节,它就基本确定了。

Inception-V4的架构图如下:

在这里插入图片描述

Inception-ResNet-V1、Inception-ResNet-V2共用相同的架构图:

在这里插入图片描述

架构看上去比较眼熟,和Inception-V4基本一样。

由于架构上没有大的变化,所以变化的只有Stem模块、Inception模块和Reduction模块的细节。这里主要讲一下inception-V4的变化。

相对Inception-V3, inception-V4的stem模块有了较大变化:

在这里插入图片描述

这个stem模块是inception-V4和Inception-ResNet-V2共用的,相对Inception-V3简单的多层卷积核池化的累加,Inception-V4的stem模块用到了Inception-V3论文提到了一些基础原则,比如并行池化、非对称卷积等。

Inception-V4的三个inception模块和两个reduction模块,和Inception-V3基本一致(V3论文没有提到inception每个分支的宽度,通过谷歌官方的源码比较,每一种模块V4都增加了通道数,相当于网络变宽了),只是每种inception模块V4都多堆了几个,也就是在增加宽度的同时增加深度。

Inception-ResNet-V1的stem没有inception-V4那么复杂,和inception-V3基本一致(只是多了一层1x1卷积)。

Inception-ResNet-V1的三种Inception-ResNet模块、两种Reduction模块都是和Inception-ResNet-V2很像的,只是Inception-ResNet-V1的通道稍微少了一些。可以认为Inception-ResNet-V1是Inception-ResNet-V2的低配版。

这里只贴一个Inception-ResNet-V1的第一个Inception-ResNet模块,可以看到相比Inception模块,它的宽度降低了。每个Inception块后紧连接着滤波层(没有激活函数的1×1卷积)以进行维度变换,以实现输入的匹配。这样补偿了在Inception块中的维度降低。

在这里插入图片描述

本小节总结

Inception-V4:和Inception-V3共享相同的inception模块和reduction模块,但是通道数比Inception-V3多,使用的inception模块个数也多,深度和宽度相对V3都提升了,和Inception-ResNet-V2共用了相同的Stem,网络的预处理部分能力得到了加强;

Inception-ResNet-V1:和Inception-V3共享相同(其实多了一层1x1)的stem模块,和Inception-ResNet-V2共用相同的Inception-ResNet模块和Redution模块,只是网络更窄一点;

Inception-ResNet-V2:和Inception-4共用了相同的Stem;和Inception-ResNet-V1共用相同的Inception-ResNet模块和Redution模块,通道数有所增加

网络的效果对比:

在这里插入图片描述

Inception-V4和Inception-ResNet-V2相差不大。

本文给出实验证明,残差连接可以明显加速Inception网络的训练。同时实验也证明,相比没有残差连接的消耗相似的Inception网络,残差Inception网络在性能上具有微弱的优势。但是优势不明显,所以残差连接在训练深度卷积模型不是必要的。另外作者发现单个框架性能的提升不会引起组合性能大幅的提高,但是多个网络组合提升很多。

(我感觉作者有点怄气的感觉,一定要证明自己的Inception思想不弱于人)

总结

网络相对于上一个版本的改进
inception-V1相对于VGG,参数更少,计算更快,更不易过拟合
inception-V2使用BN正则化,两层3x3代替5x5,计算量更少
inception-V3总结出了深度模型的4个基本原则,并改进了inception模块和reduction模块。网络更深更宽,在增加参数不多(相对V1增加了1.5倍)的情况下实现了精度的极大提升
inception-V4优化了stem模块,inception模块更宽了,总的层数也更深,效果更好
Inception-ResNet-V1在inception-V3的基础上引入resnet思想,计算量和效果基本一致,训练更快
Inception-ResNet-V2在inception-V4的基础上引入resnet思想,计算量和效果基本一致,训练更快

论文

NIN: Network In Network

Inception-V1(2015 CVPR):Going Deeper with Convolutionsv1到v4的模型源码-tf实现

GoogLeNet论文翻译

Inception-V2(2015 ICML):Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

[Batch Normalization论文翻译](http://noahsnail.com/2017/09/04/2017-09-04-Batch Normalization论文翻译——中文版/)

Inception-V3(2016 CVPR):Rethinking the Inception Architecture for Computer Vision

Inception-V3论文翻译

Inception-V4(2016 ICLR):Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning

Inception-v4,Inception-ResNet 和残差连接对学

参考资料

Network in Network 简单理解

精读深度学习论文(4) Inception V3

Inception-v2/v3结构解析

Momenta详解ImageNet 2017夺冠架构SENet

SE-Net: 2017 ImageNet 冠军

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值