文章目录

简介

已知如果早期使用全连接层,可能会完全放弃表征的空间结构。而LeNet、AlexNet和VGG都有一个共同的设计模式:通过一系列的卷积层与汇聚层来提取空间结构特征;然后通过全连接层对特征的表征进行处理。 AlexNet和VGG对LeNet的改进主要在于如何扩大和加深这两个模块。这种传统的卷积层使用线性滤波器,然后是非线性激活函数来扫描输入。这样可以实现提取非线性特征。当我们提取某些特征的时候,传统的卷积层是可以实现这个功能的,但是,我们提取某些高维非线性特征的时候,可能就需要更多或者更深的这样的卷积层,这样做带来的弊端很明显,网络参数巨大,网络模型复杂。

NIN网络主要有两点创新点:

构建具有更复杂结构的微神经网络来抽象感受野内的数据(使用MLP代替广义线性模型“GLM”)。

通过微网络增强的本地建模,我们能够在分类层的特征图中利用全局平均池,这比传统的全连接层更容易解释并且更不容易过拟合。

1×1卷积核

卷积核在CNN中经常被用到,一般常见的是3×3、5×5或者11×11的。一般1×1的卷积核本质上并没有对图像做什么聚合操作,以为就是同一个w去乘以原图像上的每一个像素点,相当于做了一个放缩(scaling) 。1×1卷积核最初是在Network in Network这个网络结构中提出来的。它用了比AlexNet更少的参数,达到了跟其一样的效果。

如果输入只有一个通道,那么1×1卷积核确实就成了对输入的每个值做一次等比放缩,这并没什么用。但是,如果有多个通道,如NIN中第一次出现1×1卷积核时,它要处理54×54×96的输入,即此时有96个通道数。那么卷积核的大小就应该是1×1×96,我们如果想通过1×1卷积核增加或减少通道数至X,只需要将该卷积层设置为有X个1×1×96的卷积核就可以了。1×1卷积核相当于做了55×55次(毕竟有55×55个位置)相同位置下不同通道间元素的全连接操作。

 

因此,可以总结出1×1卷积核的作用:

1.通过跨通道聚合完成升维或者降维,注意这里的聚合是指不同通道间同一x,y坐标位置上元素之间的聚合,如对 x×x×m的输入图像,通过一次有n个 x×x×m卷积核的卷积层后可以得到x×x×n的输出。如果用其降维,可以起到减少参数的目的。

2.1×1卷积核可以在保持feature map尺度不变的(即不损失分辨率)且不会改变感受野的大小(感受野增长太快未必是一个好事)的前提下大幅增加非线性特性(利用后接的非线性激活函数),把网络做的更深。

MLPConv

传统的卷积层使用线性滤波器,然后是非线性激活函数来扫描输入。这样可以实现提取非线性特征。当我们提取某些特征的时候,传统的卷积层是可以实现这个功能的,但是,我们提取某些高维非线性特征的时候,可能就需要更多或者更深的这样的卷积层,这样做带来的弊端很明显,网络参数巨大,网络模型复杂

为了解决这个问题,则提出了MLP Convolution Layers,即构建具有更复杂结构的微神经网络来抽象感受野内的数据,这意味着在CNN的卷积层中还有一个微神经网络,也就是网络中的网络(Network In Network)。线性卷积层和MLPConv层比较图如下。其中线性卷积层包括一个线性滤波器,而 mlpconv 层包括一个微网络(以多层感知器构造)。

 

上图(b)表示的MLP是不是很眼熟,这不正是我们上文提到的1×1卷积核嘛。实际上这里的MLP(多层感知机),指的是同一层中,不同特征层之间,同一个位置上的值的MLP。因此,MLPConv layer就是一个普通的卷积层加上两个具有1×1卷积核的卷积层所构成的网络块,我们姑且将其称为NIN块。则用torch构造NIN块代码为:

此时可以再看一下原论文中摘要所说的“Instead, we build micro neural networks with more complex structures to abstract the data within the receptive field.”(构建具有更复杂结构的微神经网络来抽象感受野内的数据)。只要在同一位置下,虽然处于不同通道,但它们具有相同的感受野,MLPConv layer可以再次整合抽象这一感受野下的数据。

全局平均池化

全局平均池化(Global Average Pooling)主要为了解决全连接层参数过多的问题。早期对于分类问题,为了提取卷积层生成的图像特征,最后一个卷积层的 Feature Map 通常与全连接层连接,使用全连接层来作为特征提取器。最后通过 softmax 逻辑回归分类。全连接层带来的问题就是参数空间过大,容易过拟合。早期 Alex 采用了Dropout 的方法,来减轻过拟合,提高网络的泛化能力,但依旧无法解决参数过多问题,并且其参数主要来自最后一个卷积层与第一个全连接层的连接中。众嗦粥汁儿~全连接层是难以解释的黑盒模型,CNN加了之后使CNN也变得解释性不佳。

为了解决加入FC而带来的上述俩痛点,Global Average Pooling的做法是将全连接层去掉。在最后一层,将卷积层设为与类别数目一致,然后全局pooling,从而直接输出各个类别结果。

全局平均池化更原生的支持于卷积结构,通过加强特征映射与相应分(种)类的对应关系,特征映射可以很容易地解释为分类映射;全局平均池化一层没有需要优化的参数,减少大量的训练参数有效避免过拟合;全局平均池化汇总(求和)空间信息,因此其对空间变换是健壮的。

网络结构

最初的NiN网络是在AlexNet后不久提出的,显然从中得到了一些卷积核大小设置上的启示。 NiN使用窗口形状为11×11、5×5和3×3的卷积层,输出通道数量与AlexNet中的相同。一个11×11、5×5或3×3的卷积层加两个1×1的卷积层构成一个NIN块。前N-1个NiN块后有一个最大池化层,池化核为3×3,步幅为2,在最大池化层后可酌情添加Dropout层。最后一个NIN块会将输出的通道数变成与分类任务的总类别数目一致,然后接全局平均池化层后展平即可。(文末有代码,比文字叙述的清晰)

NIN块和微网络中的层数及每次卷积操作后通道数都是灵活的,可以针对特定任务进行调整。

 

 

示例:基于torch作MNIST的NIN架构