Network in Network(2013),1x1卷积与Global Average Pooling
博客:blog.shinelee.me | 博客园 | CSDN
写在前面
《Network in Network》简称NIN,出自颜水成老师团队,首次发表在arxiv的时间为2013年12月,至20190921引用量为2871(google scholar)。
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\times 1\) convolution:在mlpconv layer中首次使用了\(1\times 1\)卷积,\(1\times 1\)卷积可以在不改变尺寸和感受野的情况下,灵活调整feature map的channel数,广泛影响了后续网络的设计,如Inception系列等。
本文将依次介绍上面的创新点,同时顺带介绍 全连接 与 卷积的关系、全连接与GAP的关系,最后给出NIN的网络结构。
mlpconv layer实现
论文中讲,mlpconv layer使用一个小的全连接神经网络替换掉卷积,convolution layer与mlpconv layer对比示意图如下,
对于convolution layer,假设有N个kernel,每个kernel的尺寸为\(k \times k\),卷积操作将每个\(k \times k\)大小的local recptive field / local patch线性映射为N个输出,汇总所有local patch的卷积结果得到N个feature map。
对于mlpconv layer,使用micro network替换掉卷积,通过micro network将每个\(k \times k\)的local patch非线性映射为N个输出,汇总后仍得到N个feature map。文中说micro network为小的全连接神经网络,但在实现时,这个全连接神经网络却是通过几个卷积层实现的,为什么呢?因为全连接可以转化成卷积。
下面为《Dive into Deep Learning》中提供一个NIN block(mlpconv layer)的mxnet实现,
from mxnet import gluon, nd
from mxnet.gluon import nn
def nin_block(num_channels, kernel_size, strides, padding):
blk = nn.Sequential()
blk.add(nn.Conv2D(num_channels, kernel_size, strides, padding, ctivation='relu'),
nn.Conv2D(num_channels, kernel_size=1, activation='relu'),
nn.Conv2D(num_channels, kernel_size=1, activation='relu'))
return blk
一个NIN block通过1个卷积层和2个\(1 \times 1\)卷积层堆叠而成,这3个卷积层的输出channel数相同。对于第1个卷积层,因为kernel_size与local patch大小相同,所以对每一个local patch而言,这个卷积等价于全连接,共num_channels个输出,每个输出与local patch全连接的权重就是对应的整个卷积核,卷积核的数量也为num_channels。对于后面2个\(1\times 1\)的卷积层,输入都是num_channels维的向量,即num_channels个\(1\times 1\)的feature map,kernel_size与整个feature map的尺寸相同,这个\(1\times 1\)的卷积也就相当于全连接了。通过\(1\times 1\)的卷积实现了不同卷积核结果间的信息交流。
实际上,通过调整\(1\times 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可以看成是权值固定的全连接层。上面的实验说明,这种正则对改善性能是有效的。
网络结构
论文中给出的整体网络结构如下,
论文中没有给出具体的参数配置,实际上,NIN仍是在AlexNet基础上修改而来,相当于在AlexNet的每个卷积层后插入2个\(1\times 1\)卷积层,移除了Local Response Norm,同时用GAP替换掉全连接层。在这里,mlpconv layer既可以看成是增强了原conv layer的表达能力,也可以看成增加了网络深度。
参考
- arxiv: Network in Network
- 7.3. Network in Network (NiN)
- Review: NIN — Network In Network (Image Classification)
- Network In Network architecture: The beginning of Inception
Network in Network(2013),1x1卷积与Global Average Pooling的更多相关文章
- 深度学习方法(十):卷积神经网络结构变化——Maxout Networks,Network In Network,Global Average Pooling
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术感兴趣的同学加入. 最近接下来几篇博文会回到神经网络结构 ...
- 深度拾遗(06) - 1X1卷积/global average pooling
什么是1X1卷积 11的卷积就是对上一层的多个feature channels线性叠加,channel加权平均. 只不过这个组合系数恰好可以看成是一个11的卷积.这种表示的好处是,完全可以回到模型中其 ...
- Global Average Pooling Layers for Object Localization
For image classification tasks, a common choice for convolutional neural network (CNN) architecture ...
- 深度学习基础系列(十)| Global Average Pooling是否可以替代全连接层?
Global Average Pooling(简称GAP,全局池化层)技术最早提出是在这篇论文(第3.2节)中,被认为是可以替代全连接层的一种新技术.在keras发布的经典模型中,可以看到不少模型甚至 ...
- Network In Network——卷积神经网络的革新
Network In Network 是13年的一篇paper 引用:Lin M, Chen Q, Yan S. Network in network[J]. arXiv preprint arXiv ...
- 【论文翻译】NIN层论文中英对照翻译--(Network In Network)
[论文翻译]NIN层论文中英对照翻译--(Network In Network) [开始时间]2018.09.27 [完成时间]2018.10.03 [论文翻译]NIN层论文中英对照翻译--(Netw ...
- Network in Network 2
<Network in Network>论文笔记 1.综述 这篇文章有两个很重要的观点: 1×1卷积的使用 文中提出使用mlpconv网络层替代传统的convolution层.mlp层实际 ...
- 转载:Network In Network学习笔记
转载原文1:http://blog.csdn.net/hjimce/article/details/50458190 转载原文2:http://blog.csdn.net/mounty_fsc/art ...
- 网络结构解读之inception系列一:Network in Network
网络结构解读之inception系列一:Network in Network 网上有很多的网络结构解读,之前也是看他人博客的介绍,但当自己看论文的时候,发现存在很多的细节和动机解读,而这部分能加深 ...
随机推荐
- CF991C Candies 二分 第十五
Candies time limit per test 1 second memory limit per test 256 megabytes input standard input output ...
- PHP 实现字符串表达式计算
什么是字符串表达式?即,将我们常见的表达式文本写到了字符串中,如:"$age >= 20",$age 的值是动态的整型变量. 什么是字符串表达式计算?即,我们需要一段程序来执 ...
- 从SpringBoot构建十万博文聊聊Tomcat集群监控
前言 在十万博文终极架构中,我们使用了Tomcat集群,但这并不能保证系统不会出问题,为了保证系统的稳定运行,我们还需要对 Tomcat 进行有效的运维监控手段,不至于问题出现或者许久一段时间才知道. ...
- tomcat,nginx日志定时清理
1. Crontab定时任务 Crontab 基本语法 t1 t2 t3 t4 t5 program 其中 t1 是表示分钟,t2 表示小时,t3 表示一个月份中的第几日,t4 表示月份,t5 表示一 ...
- Redis哨兵(Sentinel)模式快速入门
更多内容,欢迎关注微信公众号:全菜工程师小辉.公众号回复关键词,领取免费学习资料. 当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用. ...
- Django系列---使用MySql数据库
目录 1. 创建数据库 1.1. 使用utf8mb4编码 1.1.1. 确定mysql的配置文件 1.1.2. 修改配置文件 1.1.3. 重启数据库服务,检查相关字段 1.1.4. 新建数据库 1. ...
- tensorflow 使用 cpu 而不使用 gpu 问题
查看 tensorflow 版本 conda list 例如发现 tensorflow 1.10.0 tensorflow-gpu 1.10.0 当两个版本相同时,默认会使用 cpu 版本 如果同时存 ...
- iOS -打包上传成功,在"构建版本"一直刷不出来
今天提交版本到appstore,构建版本一直不出来,等了一天也没有出来,其实就是权限问题,iOS13 来了,所以面临的问题随之而来,苹果给邮箱发了这段话: Dear Developer,We iden ...
- Qt插件热加载-QPluginLoader实现
上一篇C++消息框架-基于sigslot文章中我们讲述了使用sigslot信号槽实现自己的消息框架,这是一个比较粗糙,而且小的框架.当我们的程序逐渐变大时,我们可能就会考虑功能插件化,或者支持某些模块 ...
- Day 11 文件的权限
1.什么是权限? 我们可以把它理解为操作系统对用户能够执行的功能所设立的限制,主要用于约束用户能对系统所做的操作,以及内容访问的范围,或者说,权限是指某个特定的用户具有特定的系统资源使用权力.* 2. ...