1 前言
在上一篇文章中笔者介绍了一种可复用的网络模型VGG,在接下来的这篇文章中将向大家介绍另外一种网络模型“Network in Network,NiN(网络中的网络)”。这是一篇是新加坡国立大学2014年发表在顶会ICLR上的一篇论文[1]。笔者在写这篇文章之前其实也没有看过这篇论文,不过当笔者看完这篇论文后发现其动机真的不错,哪怕是放到现在笔者感觉也不会过时。下面就让我们一起来看看这篇论文。公众号后台回复“论文”即可获得下载链接!
2 动机
笔者一直都认为,决定一篇论文的质量很大程度上会依赖于论文作者对于论文动机的描述。这也就是说为什么要写这篇论文?目的是什么?因此,首先我们就来看看今天要介绍的这个模型的动机在哪儿。
作者在论文的摘要部分描述到:传统的卷积层使用的都是“卷积+非线性变换”的组合来对输入的数据进行特征提取;而作者们却同时在卷积层之间还加入了一个小的微型网络来提取更加抽象的特征。那作者为什么要这么做呢?在介绍部分作者继续提到:传统CNN中的卷积核都是可以看作是一种泛化的线性模型(GLM),它并不足以应付更加抽象的特征提取。什么意思呢?你是不是想要说“卷积+非线性变换”怎么还能说它是线性模型?作者继续说到:
By abstraction we mean that the feature is invariant to the variants of the same concept. GLM can achieve a good extent of abstraction when the samples of the latent concepts are linearly separable. Thus conventional CNN implicitly makes the assumption that the latent concepts are linearly separable.
本来就晕晕乎乎的你,读完这几句话你肯定更是不知所云了。什么叫“invariant to the variants of the same concept”?什么又是“ samples of the latent concepts”?CNN解决的怎么就是线性可分的问题了,难道你之前学的是一个假的CNN?
笔者一开始读到这句的时候同样也是云里雾里的,经过反复多次的阅读与揣摩结合一些资料[2] [3] [4],才算是理解了作者想要表达的内容是什么。要理解这几句话的关键就在于要弄明白“invariant to the variants of the same concept”的含义。在这里"concept"指的应该是在特征提取过程中所形成的某一类特征元素。因此,作者认为传统的GLM在特征提取的过程中根本不能区分这些中间过程里所形成的特征元素,除非这些特征元素是线性可分的。所以,在作者的眼里,传统CNN有效的一个假设就是这些特征元素能够线性可分。
例如在一个用于识别汽车图片的卷积网络模型中,靠前的卷积层会被用于提取一些粗糙的原始的特征(如:线段、棱角等);而靠后的卷积层则会以前面的为基础提取到更为高级一些的特征(如:轮胎、车门等)。同时,在每个阶段里所形的这些特征原始都被称之为 “latent concept”,因为事实上还有很多抽像的特征我们人类是无法辨认的(它可能是有用的特征,也可能不是),所以被称为“latent”。作者认为,传统的GLM在进行每一阶段的特征提取中,根本不足以区分这些特征元素——例如某个卷积层可能提取得到了很多“轮胎”这一类的same concept,但是GLM区分不了这些非线性的特征(到底是哪一类汽车的轮胎)——所以导致最终的任务精度不那么的尽如人意。
到此,对于作者的动机我们总算是弄清楚了,接下来我们再来看看作者是以什么样的技术手段来实现这一动机的。
3 技术手段
任何一篇论文在提出一个合理动机之后都会给出一种相应的技术方案来实现这一动机。那NIN实现动机的技术方案又是什么呢?简单来说就是通过在原始CNN的网络层之间,再插入一些浅层的全连接网络。之所以这么做是因为作者认为:可以先利用这个浅层的网络来对各个阶段里所形成的非线性特征元素进行特征表示,然后再通过卷积层来完成分类类别间线性不可分的抽象表示,以此来提高模型最后的任务精度。
如图2所示便是NIN的网络结构图,可以明显的发现每个卷积层之间的多了一些全连接层操作。同时,在NiN最后的分类部分,作者还摒弃了传统的通过多次全连接来进行分类的处理,采用的是将最后输出的特征图以全局最大池化的方式来获得样本属于每个类别的置信度值,接着通过softmax层完成分类。
3.1 MLP Convolution Layers
在NIN中,作者采用了一个三层的全连接网络来作为一个block插入到卷积层之间,但其具体的细节又是怎么样的呢?是将整个特征图reshape成一个向量进行处理吗?从作者在论文介绍部分和MLP Convolution Layers部分的介绍可知,这里的全连接操作实质上就等价于卷积核窗口为 [ 1 × 1 ] [1\times1] [1×1]的卷积操作。因此,我们在实现这个网络的时候也并不需要做任何的全连接操作,只需要做多次窗口大小为 [ 1 × 1 ] [1\times1] [1×1]的卷积即可,这也就相当于在整个特征图的角度做了一次全连接操作。
同时作者还说到,之所以使用全连接网络来作为这个block原因有两点:①全连接网络能够很好的与卷积网络进行转换,即用 [ 1 × 1 ] [1\times1] [1×1]的卷积就可以等价的代替全连接;②全连接网络可以很容易的到达较深的深度,以此来得到更加抽象的特征表示。
最后,作者还从跨通道组合的角度来解释了 [ 1 × 1 ] [1\times1] [1×1]卷积的合理性。这是因为 [ 1 × 1 ] [1\times1] [1×1]窗口的卷积核在执行卷积的过程中,实际上就是对不同通道上同一位置处的特征值进行了一次线性组合。因此,这就可以根据最终训练得到的这个 [ 1 × 1 ] [1\times1] [1×1]的卷积核权重参数来确定每个特征通道的重要性占比(有点注意力机制的味道),并进行融合形成一个通道。作者认为,这种做法的好处就是能够使得模型具有跨特征图交互的能力。那如果要从跨通道交互的角度来解释论文的动机,又该怎么理解呢?欢迎各位读者加群进行交流。
3.2 Global Average Pooling
在传统的卷积网络中,模型在最后进行分类的时候往往都是将最后一层卷积的输出变形成一个向量,然后再将其输入到一个全连接网络中来完成分类任务。但是作者认为这样做的弊端在于最后这部分的全连接网络及其容易过拟合(因为最后一个卷积层reshape后的向量可能高达数十万维),进而限制了模型的整体泛化能力。
在这篇文章中,作者提出了通过以全局平均池化的方式来代替这部分全连接网络。如图3所示,全局平均池化的具体做法是取最后卷积输出的特征图中每一个特征图的均值来作为其中一个类别的logit值。然后再将其输入到softmax分类层进行分类。因此,这也就意味着如果你需要完成的是一个 k k k分类的任务,那么模型最后的卷积输出一定得含有 k k k个通道数。