Inception结构学习笔记

一. 背景介绍

Inception 主要改进了网络中的传统卷积层,针对深度神经网络性能和计算量,主要解决了深度网络中的以下问题:

1. 参数太多,容易过拟合,若训练数据集有限;
2. 网络越大计算复杂度越大,难以应用;
3. 网络越深,梯度越往后穿越容易消失(梯度弥散),难以优化模型

Inception主要就是为了解决在增加网络深度和宽度的同时去减少参数,1*1的卷积核可以增加/减少特征map的channel:

1*1的卷积核可以降低feature map的通道维度,如下图所示:
Inception结构学习笔记

合理利用1*1的卷积核可以降低计算量:
Inception结构学习笔记
上图中整个卷积过编程过程需要进行12.4M次乘法,那如果没有11的卷积核呢? 则需要28283255192 = 120M次乘法, 最终feature map 上每一个像素对应55个区域,共有282832个像素,原始输入有192个channel,所以最终需要28283255192 = 120M次乘法
Inception结构学习笔记

二. InceptionV1结构

Inception结构学习笔记

Inception 中增加网络的宽度在于将各个尺度的卷积核,以及pooling层连接在一起。1*1的卷积核可以降低参数的计算量。

三. Inception V2模型

Inception主要改变体现在两点:

1. 学习VGG用两个3*3的卷积核代替5*5的卷积核
2. 增加了BN(Batch Normalization)层

3.1 卷积核替换

如下图所示可知:两个3´3的卷积层功能类似于一个5´5的卷积层; 作用:1. 降低计算量; 2. 引入了更多的非线性变换,使得CNN对特征的学习能力更强。

Inception结构学习笔记

3.2 Batch Normalization

BN 是一个非常有效的正则化方法,可以让大型卷积网络的训练速度加快很多倍,同时收敛后的分类准确率也可以得到大幅提高。 BN 在用于神经网络某层时,会对每一个 mini-batch 数据的内部进行标准化(normalization)处理,使输出规范化到 N(0,1) 的正态分布,减少了 Internal Covariate Shift(内部神经元分布的改变)。

BN 的论文指出,传统的深度神经网络在训练时,每一层的输入的分布都在变化,导致训练变得困难,我们只能使用一个很小的学习速率解决这个问题。而对每一层使用 BN 之后,我们就可以有效地解决这个问题,学习速率可以增大很多倍,达到之前的准确率所需要的迭代次数只有1/14,训练时间大大缩短。而达到之前的准确率后,可以继续训练,并最终取得远超于 Inception V1 模型的性能—— top-5 错误率 4.8%,已经优于人眼水平。因为 BN 某种意义上还起到了正则化的作用,所以可以减少或者取消 Dropout 和 LRN,简化网络结构。

4. InceptionV3

Inception V3的改变主要体现在两点:

  1. 将一个较大的二维卷积拆成两个较小的一维卷积,比如将7´7卷积拆成1´7卷积和7´1卷积,或者将3´3卷积拆成1´3卷积和3´1卷积。 优点:节约了大量参数,加速运算并减轻了过拟合;论文中指出,这种非对称的卷积结构拆分,其结果比对称地拆为几个相同的小卷积核效果更明显,可以处理更多、更丰富的空间特征,增加特征多样性。
  2. Inception V3 优化了 Inception Module 的结构,现在 Inception Module 有35´35、17´17和8´8三种不同结构。这些 Inception Module 只在网络的后部出现,前部还是普通的卷积层。并且 Inception V3 除了在 Inception Module 中使用分支,还在分支中使用了分支(8´8的结构中),可以说是Network In Network In Network。最终取得 top-5 错误率 3.5%。

4. InceptionV4

InceptionV4 主要是在 InceptionV3 的基础上引入了 resnet 的结构, 具体resnet的结构可以查看我之前的博客:Inception结构学习笔记