本篇文章观点仅限于目前的理解,后续若有新的理解,还会继续更新。
1. Introduce
NIN(Network In Network)是NUS(National University of Singapore)于2014年发表在ICLR上的一篇文章中提出的,作者首先分析了传统的CNN网络的一些问题,并针对这些问题,提出了自己的改进方法,并将网络结构命名为NIN。
2. Convolutional Neural Networks
对传统的CNN网络,没有经过非线性激活函数之前的卷积操作,实际上只是一个线性操作,如果卷积结果为正,这样经过一个ReLU函数后没有影响,就相当于是一个线性卷积(对前一层receptive field的线性编码)。
作者认为,对于latent concepts
为线性可分的问题,这种线性的抽象能力已经足够,但一个好的抽象表达往往是与输入数据呈高度非线性的。
Representations that achieve good abstraction are generally highly nonlinear functions of the input data.
在CNN网络中,在每一层使用较多的卷积核以对各种latent concepts
分类,在一定程度上可以弥补网络线性抽象能力差的问题,但这样会给下一层网络带来较大的输入,网络的整体参数数量就会增加。
所以作者考虑在这里做出改进,在每一层进行卷积操作后,并不急着把feature map传入下一层,而是对feature map进行更多非线性的操作,以提取出抽象能力更强的特征。
3. Network In Network
NIN网络创新点主要包括两个方面,分别在下面进行阐述。
3.1 MLP Convolution Layers
由于传统的多层感知机网络具有较强的非线性抽象能力,所以作者考虑将经过卷积操作得到的feature map输入到一个MLP网络中,以提高其非线性抽象能力。
在多通道的feature map上进行该操作,就相当于是将各通道的信息进行混合,此时每个全连接层就相当于对feature map进行1*1
的卷积操作。
作者把这样的传统conv+1x1conv+1x1conv操作封装成一个子块,由这样的子块堆叠而成的网络就是NIN网络,如下图所示:
从目前的应用来看,1x1 Convolution效果确实非常好,此后的GoogLeNet和ResNet都借鉴了这种操作。 1x1 Convolution好用的原因应该有以下几点:
- 融合feature map各通道的信息,提高了网络的抽象能力,进而提高了网络的泛化性能;
- 可以实现对feature map层的压缩,以降低参数数量,进而可以提高网络层数;
3.2 Global Average Pooling
对传统的CNN网络分类器结构通常是:卷积层作为特征提取器,最后一层卷积输出的结果展开为向量,连接至全连接层进行分类,全连接层的输出再输入到softmax层作为最终的分类结果。
作者认为这样的操作可解释性不强,并且全连接层容易引起网络的过拟合,所以作者提出了一种全局均值池化的方法,对最后一个卷积层的输出,各通道的值直接求均值后,以该值作为softmax层的输入以进行分类,具体如下图所示:
Global Average Pooling的优点如下:
- 不引入新的参数,避免了全连接层带来的参数数量增加和过拟合;
- 增加网络的可解释性,输出的每个通道对应于一个类别;
- 通过实验发现,全局均值池化还有正则化的作用。
3.3 Overall Structure
论文中给出的网络结构如下图所示,在除最后一个block外的每一个NIN block后面,作者还使用了一个Max Pooling和Dropout层,最后一个block的输出channel数要等于类别数,以进行全局均值池化。
4. Experiments
论文中作者使用了CIFAR-10/CIFAR-100/SVHN/MNIST
这几个小数据集进行网络性能的分析,可以借鉴。