这篇文章是在2014年3月份发表的,由颜水成老师等人撰写。该论文对原先常用的CNN网络结构,即先是一些卷积层和池化层,最后会展开连接一些全连接层,最终通过softmax层连接到输出层,提出了两点改进,最主要的就像论文的题目所说的是对卷积层做出了改进,不再是使用N个卷积核对每一层的输入张量做一次卷积计算,而是改成一种网络(文中用的是MLP)来做类似于这里的卷积的操作,从而捕捉到更多的非线性特征。第二点就是去掉了传统的最后的全连接层,改为对最后一次MLP卷积得到的多个特征图的每一个特征图分别做全局平均池化操作,得到一个向量,再把该向量连接到最后的softmax层预测出输出。

1. Introduction

正如前面摘要所说,CNN的特别之处主要就是由一些卷积层和池化层组成。而卷积层对前一输入层的每一个点先是通过线性过滤器linear filter和前一层的感受野receptive field做内积,然后再加上一个非线性的**函数。有几个线性过滤器就可以得到几个通道的输出层,输出的结果被称为特征图feature map。
这样一个使用固定权重的线性过滤器对前一层每一个位置的patch做内积的操作,其实就是一个广义线性模型Generalized Linear Model,作者提出这样一种简单的广义线性模型其实只能够对原输入做比较低级的特征抽象。因为这里使用了线性模型就是假设了原来的隐藏的概念可以被线性表达,但是实际上同一概念的数据往往是存在在一个非线性空间的,因而作者要用一个非线性模型来表达。所以,作者用Network in Network(NIN)来替代CNN的卷积层的这种GLM操作,从而实现对隐藏概念的非线性近似。这里的卷积层中的网络作者选的是多层感知机MLP,因而可以用误差反向传播求梯度。

论文阅读:Network in Network

显而易见的看出,原先的线性的卷积层和新提出的MLP卷积层一开始都是使用一个线性核对输入层进行卷积,但是线性卷积层对每一个感受野的输入得到的输出是同样位置的一个长度为depth的新的表达向量,这样就完事了。而MLP卷积层同样也得到这样的表达向量,但是这是他的网络中的网络的隐层的输入,同样这里也使用一个**函数,然后再全连接到下一个隐层,如此这么般,这么般如此,知道最后输出一个向量到下一层,这个整个网络也是这么的共享参数,对输入层进行平移的。那么中间的这些全连接层其实也相当于是对前一层做一个1x1的卷积,这样就可以把不同通道的信息整合,得到对某一隐藏概念的较为复杂的表达。

除了NIN这种结构的提出,另外一个就是前面说的去掉了最后用作分类的全连接层,改为在最后一个MLP卷积层输出的feature map做全局平均池化global average pooling操作。这个是什么意思呢?其实和平均池化类似的,平均池化不是有一个kernel size吗?通常是2x2的窗口,这样就把前一层的输入长宽都缩小一半。但是谁规定一定得用2x2的窗口来降采样了?也可以把窗口的大小设置成和整个feature map一样大啊,这样我得到的就是一个scalar数字了,而不是一个矩阵了。有多少个feature map来,我就可以给你输出多少个scalar,这些scalar就组成一个向量,再把这样的向量输入到最后的softmax层做分类。

那为什么要用这样的全局平均池化的方式呢?因为原先CNN中使用的全连接层,使得我之前卷积层和池化层得到的空间特征图没法直接和最后属于哪一个类别很好的联系起来,这些全连接层的加入,舍得我原先加入CNN带来的那种空间局部特征的假设的好处没法直接看出来了,这些全连接层就像是一个black box,夹在两者中间。但是全局平均池化层替代了全连接层之后呢,Bingo,这些空间特征啊就可以直接映射到后面属于哪一个类别了,这样可以有更直观的联系,显得更有意义,同时也得益于前面那些非线性的MLP卷积层能够抽取出更高级一些的概念表达,否则你还是很难把那些线性转换得到的概念表达跟类别联系起来,他们之间相对而言没那么强的联系。同时,我们直到全连接层参数很多容易过拟合,但是全局平均池化层它没参数啊,这就相当于加了一个正则化,能减少过拟合。

2. Convolutional Neural Networks

这里又是对这个NIN的MLP卷积层和传统的卷积层做了些比较和分析。提到了一点,传统卷积层没办法表达通常为非线性的隐藏的概念,因为传统的卷积层是线性模型,但是传统的解决方式是什么呢?就是用很多个核,来增加对这种概念的不同的表达,然后再在后面的层得到他们的线性组合,但是这就给后面的层增加了负担,因为这些曾得考虑很多种线性组合来拟合出最优的结果。同时呢,我们知道CNN后面的卷积层的核可以映射到原先输入层的较大的区域,它是通过对较低层的概念进行组合得到后面更高级的概念。那么,我们的MLP卷积层能够提供更高级的概念表达,对后面层的进一步表达更高级概念就会更有好处。

3. Network in Network

这里也没讲什么新的,就是前面讲的这些。

3.1 MLP卷积层

  1. MLP卷积层网络从输入层到隐层,隐层再到隐层直至最后的输出层的计算公式:
    f1i,j,k1=max(w1k1Txi,j+bk1,0)

    fni,j,kn=max(wnknTfn1i,j+bkn,0)

    其中n表示MLP网络的层数,可以看出这里的**函数是ReLU。
  2. 从交叉通道池化cross channel pooling或者是交叉特征图池化cross feature map pooling的角度来看,上面第二个等式就等价于对常规的卷积层做了一个级联的交叉通道参数化池化cascaded cross channel pooling。可不是么?每一层对前面一层做了一个线性加权,然后再加一个ReLU,这样的操作是对每一个输入共享的。如此这么般,这么般如此,最后的输出就能得到对隐藏概念的更高级的表达。

3.2 Global Average Pooling

这里基本是重复,有一句说GAP因为对整个feature map做了求平均,所以对于原图中空间结构的平移操作(比如图中的猫在左边还是在右边这种平移)更加的健壮了。

4. Experiments

4.1 经典数据集上的验证

作者在CIFAR-10, CIFAR-100, SVHN, MNIST这4个数据集上对NIN模型做了验证。

这个就不细讲了,把结果的对比表格分别贴上来瞧瞧吧。
论文阅读:Network in Network

论文阅读:Network in Network

论文阅读:Network in Network

论文阅读:Network in Network

接着为了验证全局平均池化层的正则化作用,与dropout,以及两个都不使用做了比较。
论文阅读:Network in Network

注意,这里的dropout只加载了最后一个要连接到全连接层的那个卷积层的输出上。从结果看出,显然,啥都不加的话,过拟合严重一些,效果比较差一些。加了dropout好一些,但是GAP效果更优。

不过,作者也使用了原来的线性卷积层,比较看看全剧平均池化层和dropout,以及两个都不用那个好。在CIFAR-10上发现,啥都不用的错误率是17.56%,用了dropout为15.99%,改用GAP为16.46%。同样这也证明了全局平均池化层的加入能够起到正则化避免过拟合的作用,尽管效果比dropout差一些。但是作者解释说这是因为这里的卷积层使用的是低级的线性卷积层,不能很好的表达高级一些的其实往往是非线性的概念,所以这里对它们使用GAP过于苛刻啦。

4.2 NIN的可视化

作者要用可视化的方式来查看自己前面使用MLP卷积层和GAP池化层的作用,看看它们的组合威力如何,是否能直接表达出类别的特征。作者选用了最后一个MLP卷积层输出的10个feature map,看看能否对应到相应的类别,或者更进一步的,是不是有啥新的位置啊形状上的对应关系呢?就像是图像检测那样。

论文阅读:Network in Network

这里是CIFAR-10的数据集,选了20个图像来展示,每个类别2个。左边10个,右边10个。第一列是对应的原始输入图像,后面10列是它在最后一个MLP卷积层输出的10个feature map的像素图。很明显的看到,它们都只在对应类别上有很强烈的感应。并且,位置也跟类别对应在原图的位置差不多,尤其是很有结构的物体,比如第二行,第10行的汽车。

5. Conclusions

作者提出一种叫做Network In Network(NIN)的新型深度网络结构用于分类任务。这种网络由MLP卷积层对每一层的输入进行卷积,并且把后面的全连接层替换为全局平均池化层。其中MLP网络卷积层起到了对局部特征更好的建模的作用,而全局平均池化层起到了正则化防止过拟合的作用。作者使用前述数据集以及NIN的可视化表明了NIN中最后一个MLP网络卷积层输出的特征图就是类别的置信图,因而这种NIN可以被尝试用于目标检测。

相关文章: