设为首页 收藏本站
查看: 2361|回复: 0

[经验分享] CV:object recognition(NIN)

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2017-6-22 10:16:33 | 显示全部楼层 |阅读模式
  NIN指的就是network in network,该结构成为之后googlenet,DRN,VGG改进版本的核心思想,其实也影响了前一篇overfeat,所以说是一篇很牛逼的文章,值得精读。分两部分讲解,第一部分为论文讲解,第二部分为模型解析。
  一、论文讲解
  摘要:


  • 提出一个NIN(网络中的网络)的深度网络结构用以增强模型在感知野在局部图像块的辨别力。
  • 提出在卷积层使用非线性代替现有的线性模型。
  • 使用一个由MLP组成的micro neural网络作为非线性模型去扫描输入以提取特征图(feature map)
  • deep NIN就是将micro neural以栈的形式组合而成。
  作者说,Deep NIN的形式相比于传统的卷积神经网络来说不易过拟合,而且可以进行全局平均池化。

1.introduction
  cnn由卷积层与池化层组成。
卷积层对下层的数据快来说是一个GLM(generalized linear model,广义线性模型),作者认为广义线性模型的抽象层次较低。作者认为“特征是不变的”,即相同概念下的变量特征是相同。GLM能够获取较好的抽象,当潜在概念的样本是线性可分的时候。因此,作者认为cnn其实有一个假设就是潜在的概念是线性可分的。然而,相同概念的数据一般是存在于一个非线性的流形中,因此,捕捉真实数据的表示一般使用非线性模型。
  作者使用一个MLP代替卷积层的线性卷积操作,作者之所以选择是因为MLP是一个通用近似函数而且可由神经网络使用反向传播进行训练。
  由此产生的结构作者命名为mlpconv。


DSC0000.jpg

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

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


DSC0001.jpg   i,j是像素索引,xij代表输入补丁集中在位置(i,j),k用于索引的通道特性图。
  当潜在概念的实例是线性可分时,线性卷积用于抽取是足够的,然而,好的抽象表示一般是高度非线性函数。在传统cnn,这一点可以用超完备过滤的方式。即:增加过滤器,但增加过滤器会增加下层的计算负担。
  引入Maxout

  maxout出现在ICML2013上,作者Goodfellow将maxout和dropout结合后,号称在MNIST, CIFAR-10, CIFAR-100, SVHN这4个数据上都取得了start-of-art的识别率。
  从论文中可以看出,maxout其实一种激发函数形式。通常情况下,如果激发函数采用sigmoid函数的话,在前向传播过程中,隐含层节点的输出表达式为:


DSC0002.jpg   其中W一般是2维的,这里表示取出的是第i列,下标i前的省略号表示对应第i列中的所有行。
  如果是maxout激发函数,则其隐含层节点的输出表达式为:


DSC0003.jpg

DSC0004.jpg   这里的W是3维的,尺寸为d m k,

  其中
  d表示输入层节点的个数,
  m表示隐含层节点的个数,
  k表示每个隐含层节点对应了k个”隐隐含层”节点,
  这k个“隐隐含层”节点都是线性输出的,而maxout的每个节点就是取这k个“隐隐含层”节点输出值中最大的那个值。因为激发函数中有了max操作,所以整个maxout网络也是一种非线性的变换。
  因此当我们看到常规结构的神经网络时,如果它使用了maxout激发,则我们头脑中应该自动将这个”隐隐含层”节点加入。
  参考一个日文的maxout ppt 中的一页ppt如下:


DSC0005.jpg   maxout的拟合能力是非常强的,它可以拟合任意的的凸函数。
  最直观的解释就是任意的凸函数都可以由分段线性函数以任意精度拟合(学过高等数学应该能明白),
  而maxout又是取k个隐隐含层节点的最大值,这些”隐隐含层"节点也是线性的,所以在不同的取值范围下,最大值也可以看做是分段线性的(分段的个数与k值有关)。论文中的图1如下(它表达的意思就是可以拟合任意凸函数,当然也包括了ReLU了)


DSC0006.jpg   作者从数学的角度上也证明了这个结论,即只需2个maxout节点就可以拟合任意的凸函数了(相减),前提是“隐隐含层”节点的个数可以任意多,如下图所示


DSC0007.jpg
  maxout的一个假设是潜在概念的实例是位于输入空间的凸集中。

3.Network in Network
  3.1 MLP卷积层
径向基函数与多层感知机是两个通用近似函数。
作者认为,在不知道潜在目标的先验分布时使用通用近似函数是比较好的方法。作者选择MLP,其原因是:


  • MLP与cnn相兼容
  • MLP可自行深度化
  计算公式:


DSC0008.jpg   网络结构


DSC0009.jpg   计算过程见下面图例中的NIN部分。


举例子解释
  假设现在有一个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:


DSC00010.jpg
总结
  maxout和NIN都是对传统conv+relu的改进。
  maxout想表明它能够拟合任何凸函数,也就能够拟合任何的激活函数(默认了激活函数都是凸的)
  NIN想表明它不仅能够拟合任何凸函数,而且能够拟合任何函数,因为它本质上可以说是一个小型的全连接神经网络
  3.2 全局平均池化
  传统的cnn是在较低层使用卷积,如分类任务中,最后的卷积层所得feature map被矢量化进行全连接层,然后使用softmax 回归进行分类。一般来说,在卷积的末端完成的卷积与传统分类器的桥接。全连接阶段易于过拟合,妨碍整个网络的泛化能力,一般应有一些规则方法来处理过拟合。

Dropout

  Dropout是hintion最近2年提出的,源于其文章Improving neural networks by preventing co-adaptation of feature detectors.中文大意为:通过阻止特征检测器的共同作用来提高神经网络的性能。
  Dropout是指在模型训练时随机让网络某些隐含层节点的权重不工作,不工作的那些节点可以暂时认为不是网络结构的一部分,但是将其权重保留下来(只是暂时不更新而已),因为下次样本输入时它又可以工作了(有点抽象,具体实现看后面的实验部分)。
  按照hinton的文章,他使用Dropout时训练阶段和测试阶段做了如下操作:

  在样本的训练阶段,
  没有采用pre-training的网络时(Dropout当然可以结合pre-training一起使用),hintion并不是像通常那样对权值采用L2范数惩罚,而是对每个隐含节点的权值L2范数设置一个上限bound,
  当训练过程中如果该节点不满足bound约束,则用该bound值对权值进行一个规范化操作(即同时除以该L2范数值),说是这样可以让权值更新初始的时候有个大的学习率供衰减,并且可以搜索更多的权值空间(没理解)。
  在模型的测试阶段,使用“mean network(均值网络)”来得到隐含层的输出,其实就是在网络前向传播到输出层前时隐含层节点的输出值都要减半(如果dropout的比例为50%),其理由文章说了一些,可以去查看(没理解)。
  关于Dropout,文章中没有给出任何数学解释,Hintion的直观解释和理由如下:


  •   由于每次用输入网络的样本进行权值更新时,隐含节点都是以一定概率随机出现,因此不能保证每2个隐含节点每次都同时出现,这样权值的更新不再依赖于有固定关系隐含节点的共同作用,阻止了某些特征仅仅在其它特定特征下才有效果的情况。

  •   可以将dropout看作是模型平均的一种。对于每次输入到网络中的样本(可能是一个样本,也可能是一个batch的样本),其对应的网络结构都是不同的,但所有的这些不同的网络结构又同时share隐含节点的权值。这样不同的样本就对应不同的模型,是bagging的一种极端情况。个人感觉这个解释稍微靠谱些,和bagging,boosting理论有点像,但又不完全相同。

  •   native bayes是dropout的一个特例。Native bayes有个错误的前提,即假设各个特征之间相互独立,这样在训练样本比较少的情况下,单独对每个特征进行学习,测试时将所有的特征都相乘,且在实际应用时效果还不错。而Droput每次不是训练一个特征,而是一部分隐含层特征。

  •   还有一个比较有意思的解释是,Dropout类似于性别在生物进化中的角色,物种为了使适应不断变化的环境,性别的出现有效的阻止了过拟合,即避免环境改变时物种可能面临的灭亡。
  介绍了半天,作者准备在全连接层做文章了,作者提出一个新的策略,名为“全局平均池化”,用来代替cnn中传统的全连接层。
  其思想为:在MLPconv的最后一层为每一个分类任务的相应种类生成一个特征映射。
作者说这样有两个优点,


  • 全局平均池化更原生的支持于卷积结构,通过加强特征映射与相应分(种)类的对应关系,因此,特征映射可以很容易地解释为分类映射。
  • 全局平均池化一层没有需要优化的参数,因此在这一层可以避免过拟合。
  • 全局平均池化汇总(求和)空间信息,因此其对空间变换是健壮的。
  作者说,全局平均池化作为一个结构化正则化矩阵可以明确的用于加强特征映射到类别映射的信任度。

  cnn的全连接层有什么问题,大家都在这里做文章?
  印象中有一种说法是全连接层是简单的将特征映射变成矢量按顺序编排输入到softmax回归中,这种方法破坏了卷积层中提取特征时保留下来的位置信息。
  具体的使用有待学习。To Be Continue...
  3.3 Network In Network结构
  全局的NIN结构就是一个栈式组合的MLPconv,然后,用全局平均池化替换全连接层,用MLPconv代替卷积操作,仍旧用子采样分隔MLPconv

4 实验
  4.1 介绍
  作者用四个数据集进行实验。CIFAR-10/100,SVHN,MNIST。
  网络结构为:三层MLPconv+空间最大池化+下采样+全局平均池化,除最后一个MLPconv层外,其余层使用dropout进行正则化。
  训练过程:手动设置参数--〉最小batch=128--〉初始化权重与学习率,重复进行,直到在训练集上的准确率停止改善,并且学习率最终为初始值的百分之一。
  4.2 CIFAR-10
  CIFAR-10数据集由10个类别的近50k幅训练和10k测试自然图片组成,每一张图片为RGB彩色,32x32大小。
  作者使用相同于Maxout一文方法的全局对比度归一化与ZCA白化。
  每个MLPconv层的特征映射数量被设计成相同,使用验证集进行两个参数的调优操作(局部感受野大小与权重衰减)。当两个hyper-parameters是固定的,我们从头开始重新训练网络训练集和验证集。

白化

  白化是一种重要的预处理过程,其目的就是降低输入数据的冗余性,使得经过白化处理的输入数据具有如下性质:


  • (i) 特征之间相关性较低;
  • (ii) 所有特征具有相同的方差。
  白化处理分PCA白化和ZCA白化,PCA白化保证数据各维度的方差为1,而ZCA白化保证数据各维度的方差相同。
  PCA白化可以用于降维也可以去相关性,而ZCA白化主要用于去相关性,且尽量使白化后的数据接近原始输入数据。
  1.PCA白化
  根据白化的两个要求,我们首先是降低特征之间的相关性。
  在PCA中,我们选取前K大的特征值的特征向量作为投影方向,如果K的大小为数据的维度n,把这K个特征向量组成选择矩阵U(每一列为一个特征向量),


DSC00011.jpg   为旋转后的数据。

如果K<n,就是PCA降维,如果K=n,则降低特征间相关性降低。
  原始数据分布


DSC00012.jpg   PCA旋转后数据分布


DSC00013.jpg   上图显示了原始数据和经过PCA旋转之后的数据,可以发现数据之间的相对位置都没有改变,仅仅改变了数据的基,但这种方法就降低了数据之后的相关性。(原始数据的相关性为正,因为x1增加时,x2也增加;而处理之后的数据的相关性明显降低)
  第二个要求是每个输入特征具有单位方差,以


DSC00014.jpg   直接使用作为缩放因子来缩放每个特征


DSC00015.jpg   ,计算公式


DSC00016.jpg   ,经过PCA白化处理的数据分布如下图所示,此时的协方差矩阵为单位矩阵I。
  PCA白化与ZCA白化对比
PCA白化


DSC00017.jpg   ZCA白化


DSC00018.jpg   2.ZCA白化
  ZCA白化的定义为:


DSC00019.jpg   ZCA白化只是在PCA白化的基础上做了一个旋转操作,使得白化之后的数据更加的接近原始数据。
  ZCA白化首先通过PCA去除了各个特征之间的相关性,然后是输入特征具有单位方差,此时得到PCA白化后的处理结果,然后再把数据旋转回去,得到ZCA白化的处理结果,感觉这个过程让数据的特征之间有具有的一定的相关性,
  下面实验进行验证。
  在实验中,我分别计算了原始数据,旋转后数据,PCA白化以及ZCA白化的协方差矩阵,数据用的是UFLDL的实验数据,是个协方差矩阵分别为:


DSC00020.jpg   <---仅是分隔作用--->


DSC00021.jpg   从上面的4个协方差矩阵可以发现,正如上面所述,旋转之后降低了特征之间的相关性,rotate协方差矩阵的主对角线以外的值都接近零。
  猜测ZCA白化后的数据的相关性会比PCA白化的要强,在该实验室中表明好像感觉是对的,ZCA白化后主对角线以外的值的绝对值大于PCA白化后(今天看了下发现这个有问题),虽然这种比较可以忽略不计,应该他们的值都是非常的接近的。
  3.PCA白化和ZCA白化的区别
  PCA白化ZCA白化都降低了特征之间相关性较低,同时使得所有特征具有相同的方差。


  • PCA白化需要保证数据各维度的方差为1,ZCA白化只需保证方差相等。
  • PCA白化可进行降维也可以去相关性,而ZCA白化主要用于去相关性。
  • ZCA白化相比于PCA白化使得处理后的数据更加的接近原始数据。
  4.正则化
实践中需要实现PCA白化或ZCA白化时,有时一些特征值


DSC00022.jpg   在数值上接近于0,这样在缩放步骤时我们除以


DSC00023.jpg   将导致除以一个接近0的值,这可能使数据上溢 (赋为大数值)或造成数值不稳定。因而在实践中,我们使用少量的正则化实现这个缩放过程,即在取平方根和倒数之前给特征值加上一个很小的常数


DSC00024.jpg   :
当x在区间 [-1,1] 上时, 一般取值为


DSC00025.jpg   。


参数

  Deep Learning 优化方法总结 By YuFeiGan 更新日期:2015-07-01
  1.Stochastic Gradient Descent (SGD)
  1.1 SGD的参数
  在使用随机梯度下降(SGD)的学习方法时,一般来说有以下几个可供调节的参数:


  • Learning Rate 学习率
  • Weight Decay 权值衰减
  • Momentum 动量
  •   Learning Rate Decay 学习率衰减
      ps:
    再此之中只有第一的参数(Learning Rate)是必须的,其余部分都是为了提高自适应性的参数,也就是说后3个参数不需要时可以设为0。
  1.1.1 Learning Rate
  学习率决定了权值更新的速度,设置得太大会使结果越过最优值,太小会使下降速度过慢。
仅靠人为干预调整参数需要不断修改学习率,因此后面3种参数都是基于自适应的思路提出的解决方案。


DSC00026.jpg   1.1.2 Weight decay
  在实际运用中,为了避免模型的over-fitting,需要对cost function加入规范项。

Weight decay adds a penalty term to the error function.
  在SGD中我们加入 −ηλWi 这一项来对cost function进行规范化。


DSC00027.jpg   这个公式的基本思路是减小不重要的参数对结果的影响,而有用的权重则不会受到Weight decay的影响,这种思路与Dropout的思路原理上十分相似。

  大家都知道DNN常有overfiting的问题,有人会想到为何有些算法(比如DT/最近邻等)在training data上很快达到100%,而NN却需要不停训练却一直达不到。原因之一是相对训练数据中模式,网络参数过多且不加合理区分,导致判决边界调谐到特定训练数据上,并非表现一般特性。由于初始weight is small, neur执行在线性范围,随着training,nonlinear才逐渐显现,decision boundary变弯。但gradient descent完成之前停止training则可避免overfiting。
  其实在dropout被叫响之前,它有个哥们叫weight decay技术,对于非常多weight的NN,along with training,decay all weights。小权值网络更适于做线性判别模型。weight decay具体公式有需要的可以找我。有人会问有价值的weight是不是也会decay。其实BP算法本质能对降低error function意义不大的weight变的越来越小,对于如此小的值,可以完全discard(是不是想起了dropout,呵)。而真正解决问题的weight不会随便被decay。还有些其他本质我们后续再讨论。
  对于activation function的选择是个技巧,但有规律可循。其实很多人忽视了sigmoid的2个参数gamma和phi,直接用“裸体的”sigmoid。想了解“穿着衣服的"sigmoid的可以再联系我。如果有prior information,比如分布有GMD引起的,则gaussian形式的函数将是个好选择(有没有想到ReLU的曲线与sigmoid的曲线分布类似,至于对x<0的y限制为0的本质下回分解吧)。没有这些prior时,有三个基本原则(但不是死的):非线性,saturability,连续光滑性(这点有待再探讨)。nonlinear是提供deep NN比shallow NN强的计算能力的必要条件。saturability限制weight和activation function的上下边界,因而是epoch可以有限。光滑连续性希望f和一阶导在自变量范围内有意义。
  momentum的概念来自newton第一定律,在BP算法中引入momentum的目的是允许当误差曲面中存在平坦区时,NN可以更快的速度学习。将随机反向传播中的学习规则修正为包含了之前k次权值更新量的alpha倍。具体公式表达有需要的可以找我。(是不是启发你想到了adagrad/adadelta呢,其实看到公式后你更有启发,呵)。momentum的使用"平均化"了随机学习这种weight的随机更新,增加了稳定性,在加快learning中甚至可以远离常引起错误的平坦区。
  误差函数常采用cross entropy,是因为它本质上度量了概率分布间的"距离"。具体公式有需要的可以联系我,一起讨论。此外,如果想得到局部性强的分类器可以考虑闵科夫斯基误差。是的,还有其他物理意义的误差函数,采用哪一种要看用来干什么了。
  对于batch learning,online learning, random learning(据悉msra有更多标注语音但就用了2000小时语音训练)仁者见仁智者见智,这也是为什么jeff dean设计DistBelief提供了Downpour和Sandblaster了。当training data巨大时,内存消耗很大(即使分布式的在内存中存的下但要考虑是否必要),工业界使用的NN常采用online或random协议。在batch learning中样本的重复出现提供的信息同随机情况下样本的单次出现一样多,而实际问题并不需要精确复制各个模式以及实际dataset常有高冗余度,batch learning比random learning慢。但不易嵌入到online learning的"二阶技术"却在某些问题上有其他优势。
  对于DNN来说,BP层层计算很耗时。二阶导数矩阵(Hesse阵)规模可能又很大。大家知道的拟合较好的方法,如LBFGS、共轭梯度法、变量度量法等,保持了较快的收敛速度。但值得一提的是,对Hesse阵的无偏近似方法Curvature Propagation可以参考ilya的论文哦。从此paper中也可理解下BP与Hesse的"秘密"。
  大家都头疼learningRate的选择,其实这个与上述讨论的多个方面有关系,例如NN的结构、activation function形式、momentum策略、decay方式、期望迭代的总次数、优化的方式、期望目标分类器的表现等等。有一点,我们可以利用误差的二阶导数来确定learning rate。也可以利用二阶信息对NN中unnecessary weight的消去做指导。

  1.1.3 Learning Rate Decay
  一种提高SGD寻优能力的方法,具体做法是每次迭代减小学习率的大小。


DSC00028.jpg   在许多论文中,另一种比较常见的方法是迭代30-50次左右直接对学习率进行操作(η ← 0.5⋅η)
  1.1.4 Momentum
  灵感来自于牛顿第一定律,基本思路是为寻优加入了“惯性”的影响,这样一来,当误差曲面中存在平坦区SGD可以一更快的速度学习。


DSC00029.jpg   注意:这里的表示方法并没有统一的规定,这里只是其中一种
  SGD优缺点
实现简单,当训练样本足够多时优化速度非常快
需要人为调整很多参数,比如学习率,收敛准则等
Averaged Stochastic Gradient Descent (ASGD)
在SGD的基础上计算了权值的平均值。
$$\bar{w}t=\frac{1}{t-t_0}\sum^t{i=t_0+1} w_t$$
  ASGD的参数
在SGD的基础上增加参数t0t0
学习率 ηη
参数 t0t0
ASGD优缺点
运算花费和second order stochastic gradient descent (2SGD)一样小。
比SGD的训练速度更为缓慢。
t0t0的设置十分困难


  • Conjugate Gradient(共轭梯度法)
    介于最速下降法与牛顿法之间的一个方法,它仅仅需要利用一阶导数的信息,克服了GD方法收敛慢的特点。
  Limited-memory Broyden-Fletcher-Goldfarb-Shanno (LBFGS) (一种拟牛顿算法)
L-BFGS算法比较适合在大规模的数值计算中,具备牛顿法收敛速度快的特点,但不需要牛顿法那样存储Hesse矩阵,因此节省了大量的空间以及计算资源。
  应用分析
不同的优化算法有不同的优缺点,适合不同的场合:
  LBFGS算法在参数的维度比较低(一般指小于10000维)时的效果要比SGD(随机梯度下降)和CG(共轭梯度下降)效果好,特别是带有convolution的模型。
针对高维的参数问题,CG的效果要比另2种好。也就是说一般情况下,SGD的效果要差一些,这种情况在使用GPU加速时情况一样,即在GPU上使用LBFGS和CG时,优化速度明显加快,而SGD算法优化速度提高很小。
在单核处理器上,LBFGS的优势主要是利用参数之间的2阶近视特性来加速优化,而CG则得得益于参数之间的共轭信息,需要计算器Hessian矩阵。

  4.3 CIFAR-100
  CIFAR-100数据库中的图片大小与格式与CIFAR-10相同,但是包含了100个分类。因此,C-100中每一分类的数据就是C-10的十分之一。对于CIFAR-100数据库,作者没有训练超参数,而是直接使用了CIFAR-10所训练好的超参数直接进行训练。模型与CIFAR-10的唯一区别就是最后一个MLPconv层的输出为100个特征映射。作者训练后得到的错误率为35.68%,作者声称已超越现存对手。见下图。


DSC00030.jpg   4.4 街景门牌号
  SVHN数据库由630420个32x32的彩色图片组成。分成训练集、测试集和额外集。数据集的任务是用于分类定位图片中心的数字。作者训练和测试的过程与Goodfellow相同[心语:哇喳喳啊,Goodfellow的文章要看啊]。具体而言是,对于每一类类,从训练集中选择400个样本,再从额外集中选择200个样本用于验证,训练集与和额外集中其余的样本用于训练,组成的验证集仅仅用于超参的选择,不会在训练过程中使用。
  作者仍旧采用Goodfellow等人的预处理过程,局部对比度正则化。其训练模型的结构与参数与CIFAR-10的模型相似,三层MLPconv+全局平均池化。作者的模型达到了2.35%,比较结果见下图。


DSC00031.jpg   4.5 MNIST
  MNIST数据库由0-9个数字的图片组成,图片大小为28x28,约有60k张训练图片和10k张测试图片。作者仍旧使用CIFAR-10的模型进行训练,只是将每个MLPconv层生成的特征映射数量减少[心语:md,减少多少啊!],减少的原因是MNIST与CIFAR-10相比较是一个简单的数据库,只需要较少的参数。作者测试其方法没有使用数据集扩充(data augmentation),其结果如下图。作者的模型所得测试误差为0.47%,比当前最好的结果Conv with Maxout+Dropout略差。


DSC00032.jpg   4.6 全局平均池化作为正则化矩阵
  从作者的使用角度来说,全局平均池化层的作用与全连接层相似,两者都是将矢量化的特征映射进行线性变换。两者区别在于其变换知识。对于全局平均池化来说,转换矩阵被置于前面(/前缀)并且其块对角元素是非零相同值,而全连接层可以有密集的转换矩阵并且其值易于反向传播优化。为研究全局平均池化的正则效果,作者使用全局平均池化代替了全连接层,并且保持模型其它部分是相同的。两个模型都使用CIFAR-10进行训练,其结果对比如下图。从图中可以看出,全连接层without Dropout的是最差(高)的,而且作者的模型是最好(少)的。作者给出的结论是全连接层容易过拟合


DSC00033.jpg   作者进一步研究全局平均池化是否与传统的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,苛刻)
  4.7 可视化of NIN
  作者将最后一个MLPconv层中的特征映射显式的执行为类别的置信图,通过全局平均池化方法(只得到唯一的一个强烈的局部感受野模型)。作者抽取并直接显示了用于CIFAR10上的模型中最后一层MLPconv的特征映射(图),见下图。


DSC00034.jpg   作者认为可视化再次说明了NIN的效果,NIN模型通过使用MLPconv可以收到一个更为强烈的局部感受野模型,全局平均池化可以提高。
  二、模型解析
  本篇博文主要讲解2014年ICLR的一篇非常牛逼的paper:《Network In Network》,过去一年已经有了好几百的引用量,这篇paper改进了传统的CNN网络,采用了少量的参数就松松击败了Alexnet网络,Alexnet网络参数大小是230M,采用这篇paper的算法才29M,减小了将近10倍啊。这篇paper提出的网络结构,是对传统CNN网络的一种改进(这种文献少之又少,所以感觉很有必要学习)。
  传统的卷积神经网络一般来说是由:线性卷积层、池化层、全连接层堆叠起来的网络。卷积层通过线性滤波器进行线性卷积运算,然后在接个非线性激活函数,最终生成特征图。以Relu激活函数为例,特征图的计算公式为:
DSC00035.jpg

  其中(i,j)表示图片像素点的位置索引,xij表示我们卷积窗口中的图片块,k则表示我们要提取的特征图的索引。
  一般来说,如果我们要提取的一些潜在的特征是线性可分的话,那么对于线性的卷积运算来说这是足够了。然而一般来说我们所要提取的特征一般是高度非线性的。在传统的CNN中,也许我们可以用超完备的滤波器,来提取各种潜在的特征。比如我们要提取某个特征,于是我就用了一大堆的滤波器,把所有可能的提取出来,这样就可以把我想要提取的特征也覆盖到,然而这样存在一个缺点,那就是网络太恐怖了,参数太多了。
  我们知道CNN高层特征其实是低层特征通过某种运算的组合。于是作者就根据这个想法,提出在每个局部感受野中进行更加复杂的运算,提出了对卷积层的改进算法:MLP卷积层。另一方面,传统的CNN最后一层都是全连接层,参数个数非常之多,容易引起过拟合(如Alexnet),一个CNN模型,大部分的参数都被全连接层给占用了,故这篇paper提出采用了:全局均值池化,替代全连接层。因此后面主要从这两个创新点进行讲解。
  二、MLP卷积层(文献创新点1)
  这个是文献的大创新点,也就是提出了mlpconv层。Mlpconv层可以看成是每个卷积的局部感受野中还包含了一个微型的多层网络。其实在以前的卷积层中,我们局部感受野窗口的运算,可以理解为一个单层的网络,如下图所示:
DSC00036.jpg

  线性卷积层
  CNN层的计算公式如下:
DSC00037.jpg

  然而现在不同了,我们要采用多层的网络,提高非线性,于是mlpconv层的网络结构图如下::
DSC00038.jpg

  Mlpconv层
  从上面的图可以看到,说的简单一点呢,利用多层mlp的微型网络,对每个局部感受野的神经元进行更加复杂的运算,而以前的卷积层,局部感受野的运算仅仅只是一个单层的神经网络罢了。对于mlpconv层每张特征图的计算公式如下:


DSC00039.jpg

一般来说mlp是一个三层的网络结构。





三、全局均值池化(文献创新点2)  传统的卷积神经网络卷积运算一般是出现在低层网络。对于分类问题,最后一个卷积层的特征图通过量化然后与全连接层连接,最后在接一个softmax逻辑回归分类层。这种网络结构,使得卷积层和传统的神经网络层连接在一起。我们可以把卷积层看做是特征提取器,然后得到的特征再用传统的神经网络进行分类。
  然而,全连接层因为参数个数太多,往往容易出现过拟合的现象,导致网络的泛化能力不尽人意。于是Hinton采用了Dropout的方法,来提高网络的泛化能力。
  本文提出采用全局均值池化的方法,替代传统CNN中的全连接层。与传统的全连接层不同,我们对每个特征图一整张图片进行全局均值池化,这样每张特征图都可以得到一个输出。这样采用均值池化,连参数都省了,可以大大减小网络,避免过拟合,另一方面它有一个特点,每张特征图相当于一个输出特征,然后这个特征就表示了我们输出类的特征。这样如果我们在做1000个分类任务的时候,我们网络在设计的时候,最后一层的特征图个数就要选择1000。
  四、总体网络架构
  根据上面的作者对传统CNN的两个改进,利用其进行1000物体分类问题,于是作者最后设计了一个:4层的NIN+全局均值池化,网络如下:
DSC00040.jpg

  个人总结:个人感觉这篇文献很有价值,实现方式也很简单,一开始我还以为需要caffe的c++源码来实现NIN网络,结果发现实现NIN的源码实现方式其实就是一个1*1的卷积核,实现卷积运算,所以实现起来相当容易,不需要自己写源码,只需要简简单单的把卷积核的大小变一下,然后最后一层的全连接层直接用avg pooling替换一下就ok了。个人评价:网络浅显易懂,简单实现,却可以改进原来的网络,提高精度,减小模型大小,所以是一篇很值得学习的文献。

1.综述
  这篇文章有两个很重要的观点:


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

  •   CNN网络中不使用FC层(全连接层)
    文中提出使用Global Average Pooling取代最后的全连接层,因为全连接层参数多且易过拟合。做法即移除全连接层,在最后一层(文中使用mlpconv)层,后面加一层Average Pooling层。
  以上两点,之所以重要,在于,其在较大程度上减少了参数个数,确能够得到一个较好的结果。而参数规模的减少,不仅有利用网络层数的加深(由于参数过多,网络规模过大,GPU显存等不够用而限制网络层数的增加,从而限制模型的泛化能力),而且在训练时间上也得到改进。

2.网络结构


  •   传统的convolution层
    DSC00041.jpg

  •   单通道mlpconv层
    DSC00042.jpg

  •   跨通道mlpconv层(cccp层)
    DSC00043.jpg

  •   由图可知,mlpconv=convolution+mlp(图中为2层的mlp)。

  •   在caffe中实现上,mlpconv=convolution+1×1convolution+1×1convolution(2层的mlp)
  相关博客:
  http://www.jianshu.com/p/96791a306ea5
  http://blog.csdn.net/hjimce/article/details/50458190
  http://blog.csdn.net/mounty_fsc/article/details/51746111

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-386790-1-1.html 上篇帖子: httpd配置.md 下篇帖子: nova系列二:kvm介绍
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表