文章提出在每个局部感受野中进行更加复杂的运算,提出了对卷积层的改进算法:MLP卷积层。传统的卷积神经网络一般来说是由:线性卷积层、池化层、全连接层堆叠起来的网络,卷积层通过线性滤波器进行线性卷积运算,然后在接个非线性激活函数,最终生成特征图。
一、论文翻译
摘要
我们提出了一种新型的深度网络结构,称为“Network In Network”(NIN),它可以增强模型在感受野(receptive field)内对局部区域(local patches)的辨别能力。传统的卷积层使用线性滤波器来扫描输入,后面接一个非线性激活函数。而我们则构建了一些结构稍复杂的微型神经网络来抽象receptive field内的数据。 我们用多层感知器实例化微型神经网络,这是一种有效的函数逼近器。特征图可以通过微型神经网络在输入上滑动得到,类似于CNN;接下来特征图被传入下一层。深度NIN可以通过堆叠上述结构实现。通过微型网络增强局部模型,我们就可以在分类层中利用所有特征图的全局平均池化层(GAP),这样更容易解释且比传统的全连接层更不容易过拟合。我们证明了NIN在CIFAR-10和CIFAR-100上得到了有史以来最佳的表现以及在SVHN和MNIST数据集上合理的表现。
1 介绍
卷积神经网络(CNN)由卷积层和池化层交替组成。卷积层使用线性滤波器和底层receptive field做内积,然后接一个非线性的激活函数,得到的输出称作特征图(feature map)。
CNN的卷积滤波器是底层数据块的广义线性模型(generalized linear model )(GLM),而且我们认为它的抽象程度较低。这里的抽象较低是指该特征对同一概念的变体是不变的。用更有效的非线性函数逼近器代替GLM可以增强局部模型的抽象能力。当样本的隐含概念(latent concept)线性可分时,GLM可以达到很好的抽象程度,例如:这些概念的变体都在GLM分割平面的同一边,而传统的CNN就默认了这个假设——认为隐含概念(latent concept)是线性可分的。然而,同一概念的数据通常是非线性流形的(nonlinear manifold),捕捉这些概念的表达通常都是输入的高维非线性函数。在NIN中,GLM用“微型网络”结构替代,该结构是一个非线性函数逼近器。在本项研究中,我们选择多层感知器实例化微型网络,该感知器是一个通用函数逼近器,也是一个通过反向传播训练的神经网络。
最终结构我们称为“mlpconv”层,与CNN的比较见图1.
图1 线性卷积层与mlpconv层的比较。线性卷积层包含线性滤波器,而mlpconv层包含的是微型网络(本文选择多层感知器)。两种层都将局部感受野映射到了隐含概念的置信度值
线性卷积层和mlpconv层都从局部感受野(receptive field)映射到了输出特征向量。mlpconv 层将局部块的输入通过一个由全连接层和非线性激活函数组成的多层感知器(MLP)映射到了输出的特征向量。MLP在所有局部感受野中共享。特征图通过用像CNN一样的方式在输入上滑动MLP得到,NIN的总体结构是一系列mplconv层的堆叠。被称作“Network In Network”(NIN),因为内部含有MLP。
我们没有采用传统CNN的全连接层进行分类,而是直接通过全局平均池化层(GAP)输出最后一个mlpconv层特征图的空间平均值作为类别的置信度值,然后将得到的向量输入softmax层。在传统的CNN中,很难解释如何将来自分类层(objective cost layer)的分类信息传递回前一个卷积层,因为全连接层像一个黑盒一样。相比之下,全局平均池化层(GAP)更有意义且容易解释,因为它强化了特征图与分类的对应关系,这是通过使用微型网络构成的局部建模器实现的。此外,全连接层更容易过拟合且严重依赖于dropout正则化,而GAP则本身就是一个结构化的正则化器,能避免整体结构的过拟合。
2 卷积神经网络
经典卷积神经网络由卷积层和空间池化层交替堆叠产生。卷积层通过线性卷积滤波器接一个非线性激活函数(如rectifier,sigmoid,tanh等等)生成特征图。例如使用rectifier激活函数,特征图的计算如下:
$$f_{i,j,k} = max(w^T_kx_{ij},0) \tag{1}$$
这里的$(i, j)$是特征图像素的索引,$x_{ij}$代表以位置$(i, j)$为中心的输入块,$k$用来索引特征图的颜色通道。
当隐含概念线性可分时,这种线性卷积足以用于抽象,但是要想得到更好的抽象,应该是用输入数据的高度非线性函数。在传统的CNN中,这可以通过利用一套完整的滤波器来弥补,覆盖所有隐含概念的变化。也就是说,单独的线性滤波器可以学习检测同一概念的不同变化。但是同一概念使用太多的滤波器会给下一层带来额外的负担,需要考虑来自前一层的所有变化的组合,来自更高层的滤波器会映射到原始输入的更大区域,它通过结合下层的较低级概念生成较高级的概念,因此,我们认为在每一个局部块结合生成更高级概念之前就作出更好的抽象是更有益的。
在最近的maxout网络中,特征图的数目通过在affine feature maps上做最大池化来减少(affine feature maps是线性卷积未通过激活函数的直接结果)。线性函数的最大化使分段线性逼近器能逼近任何凸函数。与执行线性可分的传统卷积层相比,maxout网络更有效,因为它能分离在凸集内的概念。这种改进使maxout网络在几个基准数据集上表现出色。
但是maxout网络加了一个前提:隐含概念位于输入空间的凸集内,而这是不一定的。因此应该使用一个更通用的函数逼近器,在隐含概念处于更复杂的分布时也依然能用。我们通过使用新的“Network In Network”结构在实现这个需求,在每个卷积层内引入一个微型网络,来计计算和抽象每个局部块的特征。
在输入上滑动微型网络已经在之前的研究中提出过。比如,Sturctured Multilayer Perceptron(SMLP)在输入图片的不同块中使用了共享的多层感知器;在另一项研究中,基于神经网络的滤波器被训练以用于面部检测。但是,他们都是针对某个特定问题设计的,且滑动的网络结构都只有一层。NIN则从一个通用的角度上提出,微型网络被整合到CNN结构中,以追求对各级特征的更好的抽象。
3 网络中的网络
我们首先强调提出的“Network In Network”结构的关键组成:3.1节和3.2节分别介绍了MLP卷积层和全局平均池化层。然后我们在3.3节详细介绍NIN整体。
3.1 MLP卷积层
由于隐含概念的分布一开始并不知道,所以用一个通用函数逼近器做局部块的特征提取,因为它能逼近隐含概念的更多抽象表示。Radial basis network和多层感知器是两个众所周知的通用函数逼近器。我们使用多层感知器,有两个原因,首先,多层感知器与卷积神经网络的结构一样,都是通过反向传播训练。其次多层感知器本身就是一个深度模型,符合特征再利用的精神。这种多层感知器层在文本被称作mlpconv,我们用它来替代GLM(general linear model)在输入上做卷积。图1展示了线性卷积层和mplconv层的不同。mlpconv层的计算如下:
$$
f^1_{i,j,k_1} = max({w_{k_1}^1}^{T}x_{ij}+b_{k_1},0) \ \tag{2}\
\cdots\\
f^n_{i,j,k_n} = max({w_{k_n}^n}^{T}f_{ij}^{n-1}+b_{k_n},0)
$$
这里n是多层感知器中的层编号。rectified为多层感知器的激活函数。
从cross channel(cross feature map)池化的角度来看,公式2等效于级联普通卷积层的cross channel parametric pooling。每个池化层在输入特征图上做加权线性重组,然后通过rectifier函数。池化了的cross channel特征图又在下一层池化,如此一遍又一遍重复。级联的cross channel parameteric pooling结构允许复杂的和可学习的cross channel信息进行交互。
cross channel parametric pooling层也等效于一个1x1卷积核的卷积层。这个解释可以更直观的理解NIN的结构。
与maxout层的比较: maxout网络中的maxout层在affine feature maps上做了最大池化,maxout层的特征图计算如下:
$$f_{i,j,k} = \mathop{max}\limits_{m}({w^T_{k_m}}x_{ij}) \tag{3}$$
maxout线性函数形成了一个分段线性函数,可以给任何凸函数建模。对于一个凸函数来说,函数值在特定阈值下的样本点形成一个凸集,因此,通过拟合局部块的凸函数,可以形成样本点在凸集内的概念的分割超平面(例如,l2 balls, convex cones)。mlpconv层和maxout层的不同之处在与见凸函数拟合器用通用函数拟合器替代,使其能对更多的隐含概念分布建模。
3.2 全局平均池
传统卷积神经网络在网络的较低层执行卷积。对于分类任务,最后一个卷积层得到的特征图被向量化然后送入全连接层,接一个softmax逻辑回归层。这种结构将卷积结构与传统神经网络分类器连接起来,见卷积层作为特征提取器,得到的特征用传统方式进行分类。
但是,全连接层容易过拟合,从而阻碍了整个网络的泛化能力。后来dropout被Hinton等人提出,用于正则化,在训练过程中随机地将全连接层的一半激活值置零,改善了它的泛化能力并且很大程度地预防了过拟合。
在本文中,我们提出了另一个策略,叫做全局平均池化层,用它来替代CNN中的全连接层。想法是在最后一个mlpconv层生成一个分类任务中相应类别的特征图。我们没有在特征图最顶端增加全连接层,而是求每个特征图的平均值,得到的结果向量直接输入softmax层。GAP相比全连接层的优点在于通过增强特征图与类比间的对应关系使卷积结构保留的更好,使特征图分类是可信的得到很好的解释;另一个优点是GAP层中没有参数设置,因此避免了过拟合;此外,GAP汇聚了空间信息,所以对输入的空间转换更鲁棒。
我们可以看到GAP作为一个正则化器,加强了特征图与概念(类别)的可信度的联系。这是通过mlpconv层实现的,因为他们比GLM更好逼近置信图(conficence maps)。
3.3 网络中的网络结构
NIN的整体结构是一系列mlpconve层的堆叠,最上层接一个GAP层和分类层。mlpconv层间的子层可以被相加,像CNN和maxout网络一样。图2展示了一个包含三个mlpconv层的NIN。每个mlpconv层,包含一个三层的感知器,NIN和微型网络的层数都是灵活的,可以根据具体任务微调。
图2 NIN的整体结构。本文的NIN由三个mlpconve层和一个GAP层堆叠而成。
4 实验
4.1 概况
我们在四个基准数据集上评估了NIN:CIFAR-10,CIFAR-100,SVHN和MNIST。网络在这些数据上都使用三层堆叠mplconv层结构,mlpconv层后面都跟随一个最大池化层,把原输入样本缩减一倍。作为正则化器,除了最后一个mlpconv层外所有输出都加一个dropout。除非特别说明,否则实验部分的所有全连接层都用全局平均池化层替代。另一个正则化方法是和Krizhevsky等人一样的权重衰减。图2展示了本节所用的NIN网络整体结构,详细的参数设置在补充材料中。我们使用由AlexKrizhevsky开发的超快速cuda-convnet代码来实现我们的网络。数据预处理和训练集验证集的拆分同Goodfellow。
我们的训练过程同Krizhevsky等人一样。也就是说,我们手动初始化了权重以及学习率,使用128小批次训练。训练层初始化权重和学习率开始,直到训练集上的准确率停止改善,然后损失率减少10倍,再继续训练,重复直到学习率衰减到1%。
4.2 CIFAR-10
CIFAR-10数据集由10类自然图片组成,有50000张训练图片,10000张测试图片,每张图片是32x32的RGB图片。对于这个数据集,我们使用与Goodfellow在maxout network中相同的global contrast normalization和ZCA白化。我们用训练集的最后10000张图片做验证集。
实验中每个mlpconv层的特征图数与maxout网络相同。有两个超参数用验证集微调,如局部感受野(local receptive field)的大小和权重衰减。超参数调整好后固定,然后重新在训练集合验证集上训练,将最终模型用于测试集。我们在测试集上得到了10.41%的错误率,比当前最优结果降低1%。
表1展示了与先前方法的对比。
我们实验证明,mlpconv层间使用dropout可以通过增加模型泛化能力来提升模型表现。如图3所示,在mlpconv层间引用dropout层错误率减少了20%多。这一结果与Goodfellow等人的一致,所以本文的所有模型mlpconv层间都加了dropout。没有dropout的模型在CIFAR-10数据集上错误率是14.5%,已经超过之前最好的使用正则化的模型(除了maxout)。由于没有dropout的maxout不可靠,所以本文只与有dropout正则器的版本比较。
与先前一样,我们也在做了位移和水平翻转的数据增强的CIFAR-10数据集上对我们的方法做了评估,在测试集上达到了8.81%的错误率,创了新纪录。
4.3 CIFAR-100
CIFAR-100和CIFAR-10数据规模一样,只是分为100类。因此每一类图的数目是CIFAR-10的1/10。对于CIFAR-100,我们不调整超参数,而是使用和CIFAR-10一样的设置。位移的不同是最后一个mlpconv层输出100个特征图。CIFAR-100在测试集上的错误率为35.68%,超了当前不做数据增强最好的表现1%多。详细的表现比较见表2。
4.4 Street View House Numbers
SVHN数据集由630,420 32x32的彩图组成,分为训练集、测试集和额外集。这个数据集的任务是识别出每张图中间的数字。训练和测试过程同Goodfellow,也就是说,每一类从训练集中选择400张图,从额外集中选200张图作为验证集。剩余的训练集和额外集用于训练。验证集只用于调整超参数,不用于训练。
数据集的预处理也同Goodfellow,即local contrast normalization。用于SVHN的结构和参数设置同CIFAR-10一样,由三个mlpconv层加GAP组成。我们在这个数据集上得到2.35%的错误率。我们将结果与其他没有做数据增强的方法结果进行比较,如表3所示。
4.5 MNIST
MNIST数据集由28x28的0-9手写数字组成。有60000张训练集图片和10000张测试集图片。对于这个数据集,网络结构同CIFAR-10一样,只是每个mlpconv层的特征图数减少了,因为MNIST比CIFAR-10简单。与先前使用卷积神经网络的结果对比如表4.
我们得到了0.47%的表现,但是没有当前最好的0.45%好,因为MNIST的错误率已经非常低了。
4.6 作为正则化器的全局平均池
GAP层和全连接层很相似,都对特征向量做了线性转换。不同的是转换矩阵。GAP的转换矩阵是事先定义的并且仅在共享相同值的块对角线元素上是非零的。全连接层可以有复杂矩阵变换且值是通过反向传播设置的。为了研究GAP的正则化影响,我们用GAP替换全连接层,模型其他部分相同。我们评估了全连接层前面有dropout和没有dropout的模型,都在CIFAR-10上测试,表现比较如表5.
如表5所示,全连接层没有dropout的表现最差,11.59%,与预期一样,全连接层没有正则化器会过拟合。全连接层前增加了dropout后测试集错误率为10.88%。GAP在三者比较中得到了最低错误率10.41%。
然后我们探索了GAP对传统CNN来说是否也有同样的正则化影响。我们实例化了一个像Hiton等人描述的传统CNN,由三个卷积层和一个局部连接层(local connection layer)组成。局部连接层生成16个特征图,传给没有dropout的全连接层。为了比较的公正性,我们把局部连接层的特征图数从16减到了10,因为GAP的每个类别只允许一个特征图。GAP的等价网络由dropout+带有GAP的全连接层替代,表现在CIFAR-10上测试。
全连接层的CNN模型只能得到17.56%的错误率,添加dropout后与Hinton等人提到的表现相近——15.99%。用GAP替换全连接层,我们达到16.46%的错误率,与没有dropout的CNN相比提升了1%。这又一次验证了GAP层作为正则化器的有效性。尽管比dropout稍差一些,但是我们认为GAP可能对线性卷积要求过高,因为它需要带有rectified激活函数的线性滤波器来为类别的置信图建模。
4.7 NIN的可视化
我们通过GAP来增强NIN最后一个mlpconv层的特征图,使其作为分类是可信的,这可能会加强局部感受野的建模。为了知道这个目标实现了多少,我们提取和可视化了在CIFAR-10上训练的模型的来自最后一个mlpconv层的特征图。
图4展示了CIFAR-10上测试集上选择的10类的一些示例图和相关特征图。如预期,特征图的最大激活区域和输入的相关真实分类吻合,这明显是GAP加强过的。在真实分类的特征图内,可以看到最大的激活区域出现在与原物体相同的区域,在结构化物体中尤其如此,例如图4第二行的车。注意这些特征图的分类只用类别信息进行训练,如果使用有边界框标注的图片效果会更好。
可视化证明了NIN的有效性,通过用mlpconv层建模得到一个更强的局部感受野,使其有效,然后GAP增强了特征图类别的学习。下一步研究可以用于物体侦测,侦测结果可以基于与Farabet等人的场景标记工作相同的类别级特征图来实现。
5 结论
我们提出了一个新的深度网络,叫做“Network In Network”(NIN),用于分类任务。这个新结构有mlpconv层组成,使用多层感知器对输入进行卷积,用GAP代替传统CNN中的全连接层。mlpconv层对局部块建模更好,GAP充当结构化正则化器,防止了过拟合。用NIN的这两个组件,我们得到了当前在CIFAR-10,CIFAR-100和SVHN数据集上最好的表现。通过可视化特征图,我们证明了来自NIN的最后一个mlpconv层的特征图得到的分类是可信的,并且使通过NIN做物体侦测变成了可能。
二、论文解读
1 Network In Network
CNN高层特征其实是低层特征通过某种运算的组合, 至于这个运算的目的就是提取高维特征, 线性卷积层采用的是离散卷积运算, 那么能不能改进这个运算使得特征提取更加高效呢, 基于这种思想, 文章提出在每个局部感受野中进行更加复杂的运算,提出了对卷积层的改进算法:MLP卷积层
传统的卷积神经网络一般来说是由:线性卷积层、池化层、全连接层堆叠起来的网络,卷积层通过线性滤波器进行线性卷积运算,然后在接个非线性激活函数,最终生成特征图。一般来说线性卷积层用来提取线性可分的特征,但所提取的特征高度非线性时,需要更加多的filters来提取各种潜在的特征,这样就导致filters太多,使得网络参数太多,网络过于复杂对于计算压力太大且容易过拟合。这就产生了传统卷积网络的两个痛点:
- 线性卷积层在处理高度非线性的底层特征时, 使得网络参数过多
- 传统的CNN最后一层都是全连接层,参数个数非常之多,容易引起过拟合
2 MLP卷积层
如下图所示:
(a): 左图是一个线性卷积层, 该层在局部感受野上的运算可以理解为一个单层的网络
(b): 右图是一个MLP卷积层, 该层可以看成是每个卷积的局部感受野中还包含了一个微型的多层网络, 使得计算比传统CNN更加复杂, 从而提高对非线性特征的提取能力
MLP卷积层可以理解为在一个传统的CNN卷积层的基础上把网络在局部感受野的尺度上做深, 增加单个NIN的特征表示能力
3 全局均值池化
传统的卷积神经网络卷积运算一般是出现在低层网络。对于分类问题,最后一个卷积层的特征图通过量化然后与全连接层连接,最后在接一个softmax逻辑回归分类层。这种网络结构,使得卷积层和传统的神经网络层连接在一起。我们可以把卷积层看做是特征提取器,然后得到的特征再用传统的神经网络进行分类。传统CNN网络中最后全连接层参数过多很容易导致过拟合,造成网络的泛化能力差,Alexnet中使用dropout来防止过拟合提高网络的泛化能力。
文章提出采用全局均值池化的方法,替代传统CNN中的全连接层。与传统的全连接层不同,对每个特征图(feature map)的整张图片进行全局均值池化,这样每张特征图都可以得到一个输出。采用均值池化,可以大大减小网络的参数数量,避免模型过拟合,另一方面它有一个特点,每张特征图相当于一个输出特征,然后这个特征就表示了输出类的特征。这样如果我们在做1000个分类任务的时候,我们网络在设计的时候,最后一层的特征图个数就要选择1000
网络结构
在全局结构图中我们可看到:
- 在局部网络中, 在局部感受野进行卷积运算的基础上又加了两层小的全连接层
- NIN的实现方式
由Caffe的prototxt文件可知, 在实现NIN的时候, 全连接层的实现方式为:设置一个滤波器大小为1,步长为1的卷积层实现全连接层
由输出尺寸公式得, 内部小网络的增加并不改变输出数据体的大小:
$$\frac{W−F+2P}{S}+1=\frac{W−1+0}{1}+1=W$$
- 全局均值池化
- 在Alexnet网络中最后一个卷积层输出的特征图大小是6∗6, pooling的大小选择6,方法选择:AVE进行全局均值池化
综上, 在AlexNet的基础上, 只需要简简单单的把卷积核的大小变一下,然后最后一层的全连接层直接用avg pooling替换一下就可以实现了
参考: