Network In Network
简介
Network In Network 是发表于2014年ICLR的一篇paper。这篇文章采用较少参数就取得了Alexnet的效果,Alexnet参数大小为230M,而Network In Network仅为29M。
文章的主要创新点为:
- 采用 mlpcon 的结构来代替 traditional 卷积层;
文中提出使用mlpconv网络层替代传统的convolution层。mlp层实际上是卷积加传统的mlp(多层感知器),因为convolution是线性的,而mlp是非线性的,后者能够得到更高的抽象,泛化能力更强。在跨通道(cross channel,cross feature map)情况下,mlpconv等价于卷积层+1×1卷积层,所以此时mlpconv层也叫cccp层(cascaded cross channel parametric pooling)。 - remove 卷积神经网络最后的 全连接层,采用 global average pooling 层代替;
文中提出使用Global Average Pooling取代最后的全连接层,因为全连接层参数多且易过拟合。做法即移除全连接层,在最后一层(文中使用mlpconv)层,后面加一层Average Pooling层。
以上两点,之所以重要,在于,其在较大程度上减少了参数个数,确能够得到一个较好的结果。而参数规模的减少,不仅有利用网络层数的加深(由于参数过多,网络规模过大,GPU显存等不够用而限制网络层数的增加,从而限制模型的泛化能力),而且在训练时间上也得到改进。
网络结构
Mlpconv
CNN 一般由卷积层与池化层以栈的形式交替组成,卷积层通过使用非线性激活函数以Relu激活函数为例,特征图的计算公式为:
其中 \((\mathrm{i}, \mathrm{j})\) 表示图片像素点的位置索引,\(\mathrm{Xi},j\) 表示我们卷积窗口中的图片块,\(k\)则表示我们要提取的特征图的索引。
一般来说,所要提取的特征是高度非线性的,在传统的 CNN 中尝试使用超完备的滤波器来提取各种潜在的特征,具体来说,当需要提取某个抽象特征时,我们初始化大量的滤波器去提取尽可能多的特征,将我们期望的特征也覆盖到。如此产生的结果是网络结构复杂,参数空间过大。
事实上,CNN 高层特征其实是低层特征通过某种运算的组合。于是作者就根据这个想法,提出在每个局部感受野中进行更加复杂的运算,提出了对卷积层的改进算法:MLP卷积层。相对传统的卷积层过程,Mlpconv 层可以看成是每个卷积的局部感受野中还包含了一个微型的多层网络:

从上面的图可以看到,说的简单一点呢,利用多层mlp的微型网络,对每个局部感受野的神经元进行更加复杂的运算,而以前的卷积层,局部感受野的运算仅仅只是一个单层的神经网络罢了。对于mlpconv层每张特征图的计算公式如下:
Mlpconv另一种理解方式:在原来每一层输出后加一个与通道数量相同1 x 1 的卷积层。作用:
- 相当于在通道之间做了特征融合。
- 每一层卷积之后加一个激活函数,比原结构多了一层激活函数,增加了结构的非线性表达能力。
Global Average Pooling
对于分类问题,最后一个卷积层的 Feature Map 通常与全连接层连接,最后通过 softmax 逻辑回归分类。全连接层存在的问题:
- 参数量极大,有时候一个网络超过80~90%的参数量在最后的几层FC层中。
- 容易过拟合,很多CNN网络的过拟合主要来自于最后的fc层,因为参数太多,却没有合适的regularizer;过拟合导致模型的泛化能力变弱。
- 实际应用中非常重要的一点,paper中并没有提到:FC要求输入输出是fix的,也就是说图像必须按照给定大小,而实际中,图像有大有小,fc就很不方便。
作者提出了Global Average Pooling,做法很简单,是对每一个单独的feature map取全局average。要求输出的nodes和分类category数量一致,这样后面就可以直接接softmax了。

因此使用全局平均 pooling 代替全连接层,使得最后一个多层感知卷积层获得的每一个特征图能够对应于一个输出类别,优点如下:
- 全局平均池化更原生的支持于卷积结构,通过加强特征映射与相应分(种)类的对应关系,特征映射可以很容易地解释为分类映射;
- 全局平均池化一层没有需要优化的参数,减少大量的训练参数有效避免过拟合;
- 全局平均池化汇总(求和)空间信息,因此其对空间变换是健壮的。
网络结构

上图这个NIN展示了3个mlpconv,mlpconv内部是一个三层感知机,然后是一个GAP,最后是一个目标损失层。像CNN网络和Maxout Network那样,在mlpconv之间可以增加下采样层(pooling层)。对于不同的任务,NIN中的mlpconv数量以及mlpconv中MLP层数都可以调整。
举例解释:
假设现在有一个3x3的输入patch,用\(x\)代表,卷积核大小也是3x3,向量\(w\)代表,输入channel是\(c1\),输出channel是\(c2\)。
对于一般的卷积层,直接\(x\)和\(w\)求卷积,得到1x1的1个点,有\(c2\)个kernel,得到1x1xc2;
Maxout,有\(k\)个的3x3的\(w\)(这里的\(k\)是自由设定的),分别卷积得到\(k\)个1x1的输出,然后对这\(k\)个输入求最大值,得到1个1x1的点,对每一个输出channel都要这样做;
NIN,有\(k\)个3x3的\(w\)(这里的\(k\)也是自由设定的),分别卷积得到\(k\)个1x1的输出,然后对它们都进行relu,然后再次对它们进行卷积,结果再relu。(这个过程,等效于一个小型的全连接网络)

这里建立了一个概念,全连接网络可以等价转换到1x1的卷积,这个idea在以后很多网络中都有用到 。

浙公网安备 33010602011771号