深度学习网络篇——NIN(Network in Network)

正式开讲之前,首先跪舔一下:这篇论文真的是条理清楚思路清晰,可读性贼强,建议读下原文学习一下!
让我们怀着崇敬的心先来看看论文的作者:






Min Lin, Qiang Chen, Shuicheng Yan
(别看了,就是没有图,略略略,啊哈哈哈哈哈哈~)

先说说这篇论文的创新点。这篇论文有两个创新点,一是MLPconv,二是全局平均池化,这两个创新点也就是这篇论文主要在讲**(chui) **的东西,所以接下来讲的主要就围绕这两个点展开。

MLPconv

1、什么是MLP?
Multi Layer Perceptron(MLP),即多层感知机,由感知机(PLA)推广而来,简单来说就是我们接触的经典的深度神经网络,是由输入层、隐层、输出层构成的网络。
2、为什么用MLP?
(1) 传统CNN由卷积层和池化层交替组成,卷积核是输入样本的广义线性模型(GLM),抽象程度比较低。当样本的隐含概念线性可分时,广义线性模型能达到很好的抽象程度。所以呢,传统的CNN是建立在认为隐含概念(latent concept,就是从图像中抽取出来的特征)是线性可分的假设上的,但是这个假设比较理想主义,实际情况中大多隐含概念都是线性不可分的,所以这时候GLM就悲剧了,但是事情还没结束,GLM感觉自己还能再抢救一下,就发现了可以通过疯狂_增加滤波器(卷积核)的数量_来cover各个方面的隐含概念,然后在下一层卷积的时候把这些隐含概念结合起来,然后再继续抽象更多的隐含概念,那么动动我们的小脑瓜就能发现,GLM为了能尽量全面的cover到所有隐含概念就只能疯狂增加每一层神经元的数量,这就导致产生了很多冗余的参数,同时,使用太多滤波器也给下一层带来了很大的负担,需要考虑来自前一层的所有变化的组合,来自更高层的滤波器会映射到原始输入的更大区域,因此,我们认为在每一个局部块结合生成更高级概念之前就作出更好的抽象是更有益的。
(2) Maxout:跟普通激活函数的不同在于加入了一些神经元来输出最大的激活值,以此来减少Feature map的数量,线性函数的最大化使分段线性逼近器能逼近任何凸函数,但是maxout也有前提:隐含概念位于输入空间的凸集内——同样的,理想很丰满现实很骨感,这个前提在实际中也很难满足。
(3) 综上所述,我们需要一个更通用的函数逼近器,在隐含概念处于更复杂的分布时也依然能用。所以此时mlpconv站出来了!
3、MLPconv的构造和理解
针对传统卷积神经网络和Maxout的不足,作者提出了使用多层感知机(MLP) 来替代传统卷积层。Mlpconv的计算如下(这里每层mlp采用Relu来进行激活):
在这里插入图片描述
简单理解起来呢,就是对每个有局部感受野的神经元进行更复杂的运算,可以看一下传统卷积层和Mlpconv 的比较:
在这里插入图片描述
传统的卷积层使用具有局部感受野的神经元提取特征,就是一个单层的卷积操作,而mlpconv在卷积后进行进一步的运算,从跨通道池化的角度来看,上面的公式等效于在一个正常的卷积层上实施级联跨通道加权池化。池化层对输入的feature map进行加权线性求和,然后用ReLU进行激活 。这种级联跨通道加权池化使得模型能够学习到通道之间的关系 ,这种跨通道加权池化也等效于1x1卷积层。个人理解:之所以要使用1x1卷积是因为此处要做的是对输入的多通道的feature map进行线性加权,起到综合各个通道特征图信息的作用。一般的卷积可以看做特征的提取操作,而1x1卷积则是实现多个feature map的线性组合。
这里画了一个图来帮助大家理解mlpconv和1x1卷积
在这里插入图片描述

Global Average Pooling(全局平均池化)

1.为什么用GAP?
为了展现GAP的优点,作者将GAP与传统CNN中的全连接层做了一个对比:
我们知道,传统的CNN网络中,前面堆叠的卷积层用于提取特征,而最后接的全连接层负责分类提取出的特征。但是全连接层很容易导致模型过拟合,过拟合就会导致模型的泛化性能差,泛化性能差准确性就会差,针对这个问题后来有了dropout,我们知道dropout可以有效的减轻过拟合,所以AlexNet拿下了2012年ImageNet竞赛的冠军。于是作者感觉到了避免过拟合对提升模型性能的重要性,换了一个清奇的思路:不在全连接层的基础上搞了,给它直接换成全局平均池化(GAP)
2.什么是全局平均池化(GAP)?
传统的CNN网络中,在使用卷积层提取特征之后会将提取出来的Feature map输入一个全连接神经网络,再接一个softmax逻辑回归层完成分类任务,由于全连接层容易导致模型过拟合,后来出现的dropout很好的解决了这个问题。在NIN这篇论文中,作者提出了用全局平均池化来代替全连接层的新策略。
GAP的思路是在所有mlpconv层之后,将最后一层mlpconv层输出的每一张feature map进行相加求平均,也就是说输出的每张feature map都会计算得到一个平均值,最后将这些feature map对应的平均值作为某一类的置信度输入到softmax中进行分类,那么这里存在的一个问题就是每张feature map得到的全局平均值与最终的类别是一一对应的,也就是说最后一层mlpconv输出多少个feature map就会有多少种分类,因此这里需要控制最后一层mlpconv输出feature map数与总的类别数相同。下图展示了全局平均池化层:
在这里插入图片描述
作者告诉我们,全局池化是有很多优点的。一是很大程度减少了参数的数量,因为我们知道传统的全连接层参数数量非常之多,作者创造性的直接用GAP替换掉全连接层,而GAP是没有需要学习的参数的!而且与此同时GAP还没有全连接层容易过拟合的缺点,简直完虐全连接层。其次,作者认为GAP更符合CNN的特点,这种特征图和类别一一对应的模式,加强了特征图与概念(类别)的可信度的联系,使得分类任务有了很高的可理解性。再者,对每个特征图进行全局取平均操作综合了空间信息,使得模型的鲁棒性更强了(个人观点:这种简单粗暴取平均的方式似乎也会丢失很多有用信息?)总而言之,GAP就是一个伟大的创举啊。

NIN网络构架

在这里插入图片描述
做完了前面一大堆铺垫之后,终于要放大招了:NIN网络闪亮登场~
NIN的整体结构是一系列mlpconve层的堆叠,最后端接一个GAP层和分类层。图片展示了论文中使用的一个包含三个mlpconv层的NIN,每个mlpconv层包含一个三层的感知器,并且都加上了最大池化层。此外,除了最后一个mlpconv层之外,前面的所有mlpconv层都加上了dropout。NIN和微型网络的层数都是灵活的,可以根据具体任务微调。
论文中的NIN训练过程的一些设置情况:手动初始化权重以及学习率,使用128的batch size进行训练。从训练层初始化权重和学习率开始,直到训练集上的准确率停止改善,然后学习率以0.1的权重进行衰减,再继续训练,重复直到学习率衰减到初始值的1%。

NIN在各数据集上的测试

1.CIFAR-10
CIFAR-10数据集由10类自然图片组成,有50000张训练图片,10000张测试图片,每张图片是32x32的RGB图片,使用了GCN(全局对比度归一化)和ZCA白化做数据处理。用训练集的最后10000张图片做验证集。结果就是用这个网络跑出来的模型在测试集上得到了10.41% 的错误率,比当前最优结果降低1%。结果图:
在这里插入图片描述
此外,还顺手验证了一下dropout。通过实验证明dropout确实非常的有用非常的厉害,看下图:
在这里插入图片描述
作者试了一下,发现加了dropout的NIN比不加dropout的NIN结果提升了20%(结论:dropout厉害!)。完事再补一句:不加dropout的NIN结果仅次于加了dropout的Maxout,加上dropout的NIN就藐视一切啦,NIN厉害!最后最后作者又在做了位移和水平翻转的数据增强的CIFAR-10数据集上对NIN做了评估,在测试集上达到了8.81%的错误率,创了新纪录。
2.CIFAR-100
CIFAR-100顾名思义,就(不)是CIFAR-10的升级版,它的数据规模跟CIFAR-10一毛一样,就是图片类别数从10类变成了100类,也就是说每个类别的样本数量变成了CIFAR-10中每个类别数量的十分之一。闲话不说直接上结果吧:
在这里插入图片描述
3.Street View House Numbers(SVHN)
Street View House Numbers (SVHN) 是对图像中阿拉伯数字进行识别的数据集,该数据集中的图像来自真实世界的门牌号数字,图像来自Google街景中所拍摄的门牌号图片,每张图片中包含一组 ‘0-9’ 的阿拉伯数字。训练集中包含 73257 个数字,测试集中包含 26032 个数字,另有 531131 个附加数字。数据集由630,420 32x32的彩图组成,分为训练集、测试集和额外集,测试结果:
在这里插入图片描述
4.MNIST
不过多介绍啦,就是手写数字数据集,比较简单,训练集60000个样本,测试集10000个样本,都是28*28的灰度图。直接上结果:
在这里插入图片描述
os:结果比maxout差一些,作者的理由是这个数据集太简单了达到的错误率已经很低了。

全局平均池化的测试

做完了关于NIN整体网络的测试,作者又单独测试了一下全局平均池化(GAP)的效果。
测试是在CIFAR-10上完成的,先测试了一下在mlpconv基础上使用全连接层和GAP的区别
在这里插入图片描述
又测试了一下在传统CNN基础上使用全连接层和GAP的区别,然而!结果竟然输给了CNN+全连接层+dropout!CNN+全连接层+dropout测试得到15.99%的错误率,CNN+GAP+dropout的错误率是16.46%,CNN+全连接层不加dropout最差,错误率为17.56%。作者给出的理由是:我们认为GAP可能对线性卷积要求过高,因为它需要带有Relu激活函数的线性滤波器来为类别的置信图建模。

NIN可视化

作者认为通过GAP来增强NIN最后一个mlpconv层的特征图,使其作为分类是可信的,这可能会加强局部感受野的建模。为了知道这个目标实现了多少,作者提取和可视化了在CIFAR-10上训练的模型的来自最后一个mlpconv层的特征图:
在这里插入图片描述
(这些特征图的分类只用类别信息进行训练,如果使用有边界框标注的图片效果会更好。)
作者认为,通过用mlpconv层建模能得到一个更强的局部感受野,使其有效,然后GAP增强了特征图类别的学习。

总结(精华!干货!一定要看!)

  1. 这篇论文中两个创新点
    (1) 引入mlpconv结构(1x1卷积的使用).
    (2) 使用全局平均池化(GAP)代替全连接层。
  2. Mlpconv(1x1卷积) 的优点:
    (1) 实现特征图的跨通道聚合
    (2) 通过设置1x1卷积核的数量可以实现特征的降维或升维,这在之后的GoogLeNet中有所应用;同时可以减少网络参数数量。
  3. 全局平均池化
    (1) 有效减少参数数量(相比较全连接层)。
    (2) 减轻过拟合。
    (3) 更符合CNN特点,使feature map和类别信息产生直接映射,分类过程可理解性更强。
    (4) 求和取平均操作综合了空间信息,使模型的鲁棒性更强。
    (5) 缺点:对特征图简单的加权取平均操作可能会丢失一些有用信息。

最后的最后,因为我们还是机器学习刚入门的小学生,有些理解不到位的地方还请大大们指出。博客最近两个月会每周都至少更新一篇深度学习网络篇的理解(本周还有一篇是VGG哦~),还请大家多多支持!蟹蟹!!!

猜你喜欢

转载自blog.csdn.net/weixin_43624538/article/details/84562112