Network In Network

来源:互联网 发布:qq飞车帝王数据 编辑:程序博客网 时间:2024/06/05 18:35

arXiv:4 Mar 2014

文章目的:主要是对于CNN结构进行改进,使得CNN能够学习到更加抽象和有效的非线性特征

论文地址:https://arxiv.org/abs/1312.4400

《一》、Abstract

为了增强模型在感知野内对局部patches的辨别力:

卷积层:线性滤波器+非线性激活函数对输入进行扫描;网络中的网络NIN:

1、提出在卷积层使用非线性代替现有的线性模型。
2、使用一个由MLP组成的micro neural网络作为非线性模型去扫描输入以提取特征图(feature map)
3、deep NIN就是将micro neural以栈的形式组合而成。
4、通过micro network提升local model,在分类层可以进行全局平均池化,这样Deep NIN不易过拟合

《二》、Introduction

1、cnn由卷积层与池化层组成。
卷积层对下层的数据快来说是一个GLM(generalized linear model,广义线性模型),作者认为广义线性模型的抽象层次较低。作者认为“特征是不变的”,即相同概念下的变量特征是相同。GLM能够获取较好的抽象,当潜在概念的样本是线性可分的时候。因此,作者认为cnn其实有一个假设就是潜在的概念是线性可分的。然而,相同概念的数据一般是存在于一个非线性的流形中,因此,捕捉真实数据的表示一般使用非线性模型。

用一个MLP代替卷积层的线性卷积操作,MLP是一个通用近似函数而且可由神经网络使用反向传播进行训练。
这里写图片描述

线性卷积层与mlpconv层都与receptive field相连接以用输出特征向量
mlpconv使用一个mlp连接input与output
mlp被共享于所有的局部感受野。
特征映射被包含通过滑动mlp以cnn相同处理方式(扫描)
整个网络结构作者给个名字叫“Network in Network”(好俗气的名字,像村里的二丫一样带感,真是任性啊)

《三》、CNN

1、CNN一般由卷积层与空间池化层以栈的形式交替组成,卷积层通过使用非线性激活函数(如:rectifier,sigmoid,tanh)的线性组合产生特征图。
这里写图片描述

i,j是像素索引,xij代表输入补丁集中在位置(i,j),k用于索引的通道特性图。

当潜在概念的实例是线性可分时,线性卷积用于抽取是足够的,然而,好的抽象表示一般是高度非线性函数。在传统cnn,这一点可以用超完备过滤的方式。即:增加过滤器,但增加过滤器会增加下层的计算负担
2、Maxout

《四》、NIN

1、MLP
作者认为,在不知道潜在目标的先验分布时使用通用近似函数是比较好的方法。
径向基函数Radial basis network与多层感知机mlp是两个通用近似函数。
选MLP的原因:

MLP与cnn结构相兼容(用BP进行训练)MLP可自行深度化

这里写图片描述

这里写图片描述

举例子解释

maxout:http://blog.csdn.net/julialove102123/article/details/72824120

假设现在有一个3x3的输入,用一个9维的向量x代表,卷积核大小也是3x3,也9维的向量w代表。

对于常规卷积层,直接x和w求卷积,然后relu一下就好了。
maxout,有k个的3x3的w(这里的k是自由设定的),分别卷积得到k个1x1的输出,然后对这k个输入求最大值
NIN,有k个3x3的w(这里的k也是自由设定的),分别卷积得到k个1x1的输出,然后对它们都进行relu,然后再次对它们进行卷积,结果再relu。(这个过程,等效于一个小型的全连接网络)
这里写图片描述

总结

maxout和NIN都是对传统conv+relu的改进。

maxout想表明它能够拟合任何凸函数,也就能够拟合任何的激活函数(默认了激活函数都是凸的)

NIN想表明它不仅能够拟合任何凸函数,而且能够拟合任何函数,因为它本质上可以说是一个小型的全连接神经网络
2、GAP
传统的cnn是在较低层使用卷积,如分类任务中,最后的卷积层所得feature map被矢量化进行全连接层,然后使用softmax 回归进行分类。一般来说,在卷积的末端完成的卷积与传统分类器的桥接。全连接阶段易于过拟合,妨碍整个网络的泛化能力,一般也有一些规则方法来处理过拟合;
文中作者使用了GAP来代替全连接层,其思想为:在MLPconv的最后一层为每一个分类任务的相应种类生成一个特征映射。
作者说这样有两个优点,
GAP的优点:
1.使用全局平均pooling能够强化特征图与类别的关系;
2.全局平均pooling没有参数需要进行优化,因此,可以避免在这一层出现Overfitting。
3、汇合了spatial information,所以对于输入的空间变换(spatial translation of the input)有更好的鲁棒性。
作者说,全局平均池化作为一个结构化正则化矩阵可以明确的用于加强特征映射到类别映射的信任度。
全局平均pooling的过程是:对于每一个特征图求出其平均数,然后将这些平均数组成一个特征向量,输入到softmax层中。
全连接层和全局pooling层的结构:
这里写图片描述
可以将全局平均pooling看做一个结构惩罚项,用于显性强迫特征图成为类别的置信度图。
2.1、Droupout:
http://blog.csdn.net/julialove102123/article/details/72979539
3、NIN Struct
全局的NIN结构就是一个栈式组合的MLPconv,然后,用全局平均池化替换全连接层,用MLPconv代替卷积操作,仍旧用子采样分隔MLPconv
优点:
这里写图片描述
1.更好的局部抽象;
2.更小的全局Overfitting;
3.更少的参数(没有全连接层)

《五》、Experiments

作者用四个数据集进行实验。CIFAR-10/100,SVHN,MNIST。

网络结构为:三层MLPconv+空间最大池化+下采样+全局平均池化,除最后一个MLPconv层外,其余层使用dropout进行正则化。

训练过程:手动设置参数–〉最小batch=128–〉初始化权重与学习率,重复进行,直到在训练集上的准确率停止改善,并且学习率最终为初始值的百分之一。

所有的实验都使用3个mlpconv层,每一个mlpconv层后接一个最大池化层(降采样为一半)。除了最后一个mlpconv层,每个mlpconv层后都有dropout。顶层全部使用全局平均池化代替全连接MLP。正则项使用权值衰减(weight decay)同ImageNet Classification with Deep Convolutional Neural Networks。预处理、验证集分割同Maxout Network。

1、CIFAR 10
CIFAR-10数据集由10个类别的近50k幅训练和10k测试自然图片组成,每一张图片为RGB彩色,32x32大小。

作者使用相同于Maxout一文方法的全局对比度归一化与ZCA白化。

每个MLPconv层的特征映射数量被设计成相同,使用验证集进行两个参数的调优操作(局部感受野大小与权重衰减)。当两个hyper-parameters是固定的,我们从头开始重新训练网络训练集和验证集。
1.1、白化
http://blog.csdn.net/julialove102123/article/details/72979614
2、CIFAR 100
CIFAR-100数据库中的图片大小与格式与CIFAR-10相同,但是包含了100个分类。因此,C-100中每一分类的数据就是C-10的十分之一。对于CIFAR-100数据库,作者没有训练超参数,而是直接使用了CIFAR-10所训练好的超参数直接进行训练。模型与CIFAR-10的唯一区别就是最后一个MLPconv层的输出为100个特征映射。作者训练后得到的错误率为35.68%,作者声称已超越现存对手。见下图。
这里写图片描述
3、SVHN街景

SVHN数据库由630420个32x32的彩色图片组成。分成训练集、测试集和额外集extra。数据集的任务是用于分类定位图片中心的数字。作者训练和测试的过程与Goodfellow相同。具体而言是,对于每一类类,从训练集中选择400个样本,再从额外集中选择200个样本用于验证,训练集与和额外集中其余的样本用于训练,组成的验证集仅仅用于超参的选择,不会在训练过程中使用。

作者仍旧采用Goodfellow等人的预处理过程,即就是局部对比度正则化。其训练模型的结构与参数与CIFAR-10的模型相似,三层MLPconv+全局平均池化。作者的模型达到了2.35%,比较结果见下图。
这里写图片描述
4、MNIST
MNIST数据库由0-9个数字的图片组成,图片大小为28x28,约有60k张训练图片和10k张测试图片。作者仍旧使用CIFAR-10的模型进行训练,只是将每个MLPconv层生成的特征映射数量减少[心语:md,减少多少啊!],减少的原因是MNIST与CIFAR-10相比较是一个简单的数据库,只需要较少的参数。作者测试其方法没有使用数据集扩充(data augmentation),其结果如下图。作者的模型所得测试误差为0.47%,比当前最好的结果Conv with Maxout+Dropout略差。
这里写图片描述
5、正则化 GAP
从作者的使用角度来说,全局平均池化层的作用与全连接层相似,两者都是将矢量化的特征映射进行线性变换。两者区别在于其变换矩阵(transformation matrix)。对于全局平均池化来说,转换矩阵被置于前面(前缀)并且其块对角元素是非零相同值,而全连接层可以有dense转换矩阵并且其值易于反向传播优化。为研究全局平均池化的正则效果,作者使用全局平均池化代替了全连接层,并且保持模型其它部分是相同的。两个模型都使用CIFAR-10进行训练,其结果对比如下图。从图中可以看出,全连接层without Dropout的是最差(高)的,而且作者的模型是最好(少)的。作者给出的结论是全连接层容易过拟合
这里写图片描述
作者进一步研究全局平均池化是否与传统的cnn具有相同的正则能力。作者实现一个hinton所说的传统cnn模型,其由三个卷积层和一个局部连接层组成。局部连接层产生16个特征映射并被输入到with dropout的全连接层中。为公平起见,作者将局部连接层的特征映射由16减至10,这样与其所提出的模型一致(在作者全局平均池化模式中,每个类中只有一个特征映射被允许),通过用全局平均池化代替dropout+fully connection layer,作者创建了一个等价的带有全局平均池化的网络模型。

经过训练,传统cnn模型(没有dropout的)误差率为17.56%,增加dropout的cnn为15.99%[此值非作者实验得出,是hinton文章所述],作者所用的,即替换后的模型其误差率为16.46%,比传统cnn减少了百分之一。作者认为,其结果比dropout要差(高)一些,是因为全局平均池化层对线性卷积的要求比较高(demanding,苛刻)
6、NIN可视化
作者将最后一个MLPconv层中的特征映射显式的执行为类别的置信图,通过全局平均池化方法(只得到唯一的一个强烈的局部感受野模型)。作者抽取并直接显示了用于CIFAR10上的模型中最后一层MLPconv的特征映射(图),见下图。
这里写图片描述
NIN模型通过使用MLPconv可以收到一个更为强烈的局部感受野模型,全局平均池化可以提高

《六》、总结

NIN主要用于分类任务,NIN由mlpconv layer(用MLP卷积输入)和global average pooling layer(代替cnn中的全连接层)组成。MLP:model the local patches; GAP:regulatizer.

《七》、知识拓展

1.重点核心:

1×1卷积的使用
文中提出使用mlpconv网络层替代传统的convolution层。mlp层实际上是卷积加传统的mlp(多层感知器),因为convolution是线性的,而mlp是非线性的,后者能够得到更高的抽象,泛化能力更强。在跨通道(cross channel,cross feature map)情况下,mlpconv等价于卷积层+1×1卷积层,所以此时mlpconv层也叫cccp层(cascaded cross channel parametric pooling)。

Global Average Pooling
文中提出使用Global Average Pooling取代最后的全连接层,因为全连接层参数多且易过拟合。做法即移除全连接层,在最后一层(文中使用mlpconv)层,后面加一层Average Pooling层。

理由:较大程度上减少了参数个数,这样不仅有利用网络层数的加深(由于参数过多,网络规模过大,GPU显存等不够用而限制网络层数的增加,从而限制模型的泛化能力),而且在训练时间上也得到改进。

2.网络结构

传统的convolution层
这里写图片描述

单通道mlpconv层
这里写图片描述

跨通道mlpconv层(cccp层)

这里写图片描述

这里写图片描述
由图可知,mlpconv=convolution+mlp(图中为2层的mlp)。

在caffe中实现上,mlpconv=convolution+1×1convolution+1×1convolution(2层的mlp)

3.Caffe中的实现

原文3层mlpconv的完整网络结构

这里写图片描述
Caffe中4层网络示意图(ImageNet)
这里写图片描述

说明:
1.方框为网络层,椭圆为blob
2.黄色pool4为Average Pooling

caffe网络数据数据如下(crop size=224)

这里写图片描述
对于crop size = 227,则input size的变化为227, 55, 27, 13, 6, 1。
caffe结构代码:

  1. 1×1卷积的作用
    摘抄自:http://www.caffecn.cn/?/question/136

问:发现很多网络使用了1X1卷积核,这能起到什么作用呢?另外我一直觉得,1X1卷积核就是对输入的一个比例缩放,因为1X1卷积核只有一个参数,这个核在输入上滑动,就相当于给输入数据乘以一个系数。不知道我理解的是否正确

答1:
对于单通道的feature map和单个卷积核之间的卷积来说,题主的理解是对的,CNN里的卷积大都是多通道的feature map和多通道的卷积核之间的操作(输入的多通道的feature map和一组卷积核做卷积求和得到一个输出的feature map),如果使用1x1的卷积核,这个操作实现的就是多个feature map的线性组合,可以实现feature map在通道个数上的变化。接在普通的卷积层的后面,配合激活函数,就可以实现network in network的结构了(本内容作者仅授权给CaffeCN社区(caffecn.cn)使用,如需转载请附上内容来源说明。)

答2:
我来说说我的理解,我认为1×1的卷积大概有两个方面的作用吧:
1. 实现跨通道的交互和信息整合
2. 进行卷积核通道数的降维和升维

下面详细解释一下:
1. 这一点孙琳钧童鞋讲的很清楚。1×1的卷积层(可能)引起人们的重视是在NIN的结构中,论文中林敏师兄的想法是利用MLP代替传统的线性卷积核,从而提高网络的表达能力。文中同时利用了跨通道pooling的角度解释,认为文中提出的MLP其实等价于在传统卷积核后面接cccp层,从而实现多个feature map的线性组合,实现跨通道的信息整合。而cccp层是等价于1×1卷积的,因此细看NIN的caffe实现,就是在每个传统卷积层后面接了两个cccp层(其实就是接了两个1×1的卷积层)。
2. 进行降维和升维引起人们重视的(可能)是在GoogLeNet里。对于每一个Inception模块(如下图),原始模块是左图,右图中是加入了1×1卷积进行降维的。虽然左图的卷积核都比较小,但是当输入和输出的通道数很大时,乘起来也会使得卷积核参数变的很大,而右图加入1×1卷积后可以降低输入的通道数,卷积核参数、运算复杂度也就跟着降下来了。以GoogLeNet的3a模块为例,输入的feature map是28×28×192,3a模块中1×1卷积通道为64,3×3卷积通道为128,5×5卷积通道为32,如果是左图结构,那么卷积核参数为1×1×192×64+3×3×192×128+5×5×192×32,而右图对3×3和5×5卷积层前分别加入了通道数为96和16的1×1卷积层,这样卷积核参数就变成了1×1×192×64+(1×1×192×96+3×3×96×128)+(1×1×192×16+5×5×16×32),参数大约减少到原来的三分之一。同时在并行pooling层后面加入1×1卷积层后也可以降低输出的feature map数量,左图pooling后feature map是不变的,再加卷积层得到的feature map,会使输出的feature map扩大到416,如果每个模块都这样,网络的输出会越来越大。而右图在pooling后面加了通道为32的1×1卷积,使得输出的feature map数降到了256。GoogLeNet利用1×1的卷积降维后,得到了更为紧凑的网络结构,虽然总共有22层,但是参数数量却只是8层的AlexNet的十二分之一(当然也有很大一部分原因是去掉了全连接层)。

这里写图片描述
最近大热的MSRA的ResNet同样也利用了1×1卷积,并且是在3×3卷积层的前后都使用了,不仅进行了降维,还进行了升维,使得卷积层的输入和输出的通道数都减小,参数数量进一步减少,如下图的结构。(不然真不敢想象152层的网络要怎么跑起来TAT)
这里写图片描述

[1]. https://gist.github.com/mavenlin/d802a5849de39225bcc6
[2]. http://www.caffecn.cn/?/question/136

原创粉丝点击