论文:
https://arxiv.org/pdf/1312.4400.pdf

参考:
https://www.cnblogs.com/shine-lee/p/11655836.html

《Network in Network》简称NIN,出自颜水成老师团队

主要创新点

NIN的网络结构仍是在AlexNet基础上修改而来,其主要创新点如下:

  • 提出了mlpconv layer:mlpconv layer中使用小的多层全连接神经网络(multilayer perceptron, MLP)“micro network”替换掉卷积操作,micro network的权重被该层输入feature map的所有local patch共享。卷积操作可以看成线性变换,而micro network可以拟合更复杂的变换,相当于增强了conv layer的能力。多个mlpconv layer堆叠构成整个网络,这也是Network in Network名称的由来。

  • 提出了global average pooling(GAP):NIN不再使用全连接层,最后一层mlpconv layer输出的feature map数与类别数相同,GAP对每个feature map求全图均值,结果直接通过softmax得到每个类别的概率。GAP在减少参数量的同时,强行引导网络把最后的feature map学习成对应类别的confidence map。

  • 1×1 convolution:在mlpconv layer中首次使用了1×1卷积,1×1 卷积可以在不改变尺寸和感受野的情况下,灵活调整feature map的channel数,广泛影响了后续网络的设计,如Inception系列等。

本文将依次介绍上面的创新点,同时顺带介绍 全连接 与 卷积的关系、全连接与GAP的关系,最后给出NIN的网络结构。

mlpconv layer实现

论文中讲,mlpconv layer使用一个小的全连接神经网络替换掉卷积,convolution layer与mlpconv layer对比示意图如下,

对于convolution layer,假设有N个kernel,每个kernel的尺寸为k×k,卷积操作将每个k×k 大小的local recptive field / local patch线性映射为N个输出,汇总所有local patch的卷积结果得到N个feature map。

对于mlpconv layer,使用micro network替换掉卷积,通过micro network将每个k×k 的local patch非线性映射为N个输出,汇总后仍得到N个feature map。文中说micro network为小的全连接神经网络,但在实现时,这个全连接神经网络却是通过几个卷积层实现的,为什么呢?因为全连接可以转化成卷积。

一个NIN block通过1个卷积层和2个1×1卷积层堆叠而成,这3个卷积层的输出channel数相同。对于第1个卷积层,因为kernel_size与local patch大小相同,所以对每一个local patch而言,这个卷积等价于全连接,共num_channels个输出,每个输出与local patch全连接的权重就是对应的整个卷积核,卷积核的数量也为num_channels。对于后面2个1×1的卷积层,输入都是num_channels维的向量,即num_channels个1×1的feature map,kernel_size与整个feature map的尺寸相同,这个1×1的卷积也就相当于全连接了。通过1×1 的卷积实现了不同卷积核结果间的信息交流。

实际上,通过调整1×1 卷积核的数量,可以在不改变输入feature map尺寸和感受野的情况下,灵活地增加或减少feature map的channel数量,引入更多的非线性,表达能力更强,在实现feature map间信息交流的同时,获得信息的压缩或增广表示。

Global Average Pooling

卷积神经网络的经典做法是 数个卷积层+几个全连接层,典型视角是将前面的卷积层视为特征提取器,将全连接层视为分类器。卷积层的计算量高但参数少,全连接层的计算量少但参数多,一种观点认为全连接层大量的参数会导致过拟合。

作者提出了Global Average Pooling(GAP),取代全连接层,最后一层mlpconv layer输出的feature map数与类别数相同,对每一个feature map取平均,全连接层与GAP的对比如下图所示,图片来自Review: NIN — Network In Network (Image Classification),GAP的结果直接输给softmax得到每个类别的概率。


去掉全连接的GAP强制将feature map与对应的类别建立起对应关系,softmax相当于分数的归一化,GAP的输出可以看成是与每个类别相似程度的某种度量,GAP的输入feature map可以解释为每个类别的置信度图(confidence map)——每个位置为与该类别的某种相似度,GAP操作可以看成是求取每个类别全图置信度的期望。因为只有卷积层,很好地保留了空间信息,增加了可解释性,没有全连接层,减少了参数量,一定程度上降低了过拟合。

最后一层mlpconv layer输出的feature map如下,可以看到图片label对应的feature map响应最强,强响应基本分布在目标主体所在的位置。

此外,作者还做将GAP与全连接层、全连接+dropout对比,在CIFAR-10库上的测试结果如下,

GAP可以看成是一种正则,全连接层的参数是学习到的,GAP可以看成是权值固定的全连接层。上面的实验说明,这种正则对改善性能是有效的。

【Network In Network】Global Average Pooling(GAP)的由来相关推荐

  1. Global Average Pooling

    CNN的变种有很多,除了CNN进化史上经典的那几种Net,还有一些网络根据实际问题的不同需求,对其中某些Layer进行修改. 本文的问题源于一篇关于肺部CT的CNN的文章(Shuo Wang, et ...

  2. 深度学习方法(十):卷积神经网络结构变化——Maxout Networks,Network In Network,Global Average Pooling

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术感兴趣的同学加入. 最近接下来几篇博文会回到神经网络结构 ...

  3. Global Average Pooling对全连接层的可替代性分析(转)

    版权声明:本文为williamyi原创,未经许可禁止转载或直接挪作他用! https://blog.csdn.net/williamyi96/article/details/77530995 在NIN ...

  4. Global Average Pooling全局平均池化的一点理解

    Traditional Pooling Methods 要想真正的理解Global Average Pooling,首先要了解深度网络中常见的pooling方式,以及全连接层. 众所周知CNN网络中常 ...

  5. Global average Pooling解析

    这个概念出自于 network in network 主要是用来解决全连接的问题,其主要是是将最后一层的特征图进行整张图的一个均值池化,形成一个特征点,将这些特征点组成最后的特征向量,进行softma ...

  6. 深度学习基础系列| Global Average Pooling是否可以替代全连接层?

    Global Average Pooling(简称GAP,全局池化层)技术最早提出是在这篇论文(第3.2节)中,被认为是可以替代全连接层的一种新技术.在keras发布的经典模型中,可以看到不少模型甚至 ...

  7. Global Average Pooling与FC、Global Max Pooling的比较

    原文 Global Average Pooling(简称GAP,全局池化层)技术最早提出是在这篇论文(第3.2节)中,被认为是可以替代全连接层的一种新技术.在keras发布的经典模型中,可以看到不少模 ...

  8. Global Average Pooling对全连接层的可替代性分析

    Global Average Pooling对全连接层的可替代性分析 原创  2017年08月24日 15:54:22

  9. 全局平均池化(Global Average Pooling)

    出处:Lin M, Chen Q, Yan S. Network in network[J]. arXiv preprint arXiv:1312.4400, 2013. 定义:将特征图所有像素值相加 ...

  10. Global Average Pooling、Global Max Pooling

    https://www.zhihu.com/question/358913301 https://blog.csdn.net/qq_16234613/article/details/79520929 ...

最新文章

  1. Linux疑难杂症解决方案100篇(十四)-Linux scp 使用详解
  2. Linux中profile、bashrc、bash_profile之间的区别和联系
  3. 316. Remove Duplicate Letters 去除重复字母
  4. java登录界面命令_Java命令行界面(第16部分):JArgp
  5. Spring MVC定制用户登录注销实现示例
  6. matlab 文件指针回到开头,[c/c++] 文件指针位置回到文件开头(rewind)及行开头(ftell+fseek)...
  7. [html] HTML5中的article和section有什么区别?
  8. php网站导航-国际网址导航系统 v5.0源码
  9. 华科08年计算机考研复试机试
  10. MVC中如何使用语音识别功能实现输入
  11. CentOS 7 最小化安装后的注意事项(一)
  12. python networkx学习
  13. 自制solidworks图框步骤_如何建立标准的solidworks图框模板
  14. AI实现矢量图片批量转dwg
  15. photoshop cs6 界面字体太小解决方法
  16. 传统BIOS下的USB启动设置
  17. 领域驱动设计DDD:贫血模型和充血模型(比较重要)
  18. 团队管理14--盘点团队
  19. 手机共享计算机网络连接,终于找到电脑网络共享给手机
  20. android 12.0 wifi开关控制功能实现

热门文章

  1. ArcGIS 从大区域提取小区域的行政区shp并用于裁剪其他数据
  2. NLP学习02--卷积神经网络CNN
  3. java线程知识点拾遗(CAS)
  4. 方正电脑如何关闭网络启动计算机,方正电脑怎么进安全模式
  5. 面试官: MySQL 数据库的优化,你知道有哪些?
  6. 异步处理老司机:IntentService 源码分析
  7. 工作两年和研究生两年(专业硕士)有什么差异?
  8. 春节返乡,到底返的是什么?
  9. Android Multimedia框架总结(七)C++中MediaPlayer的C/S架构补充及MediaService介绍
  10. linux racoon代码,源代码安装IPsec-Tools-0.7.2