NIN (Network In Network)
Network In Network
论文Network In Network(Min Lin, ICLR2014).
传统CNN使用的线性滤波器是一种广义线性模型(Generalized linear model,GLM)。所以用CNN进行特征提取时,其实就隐含地假设了特征是线性可分的,可实际问题往往是难以线性可分的。CNN中通过堆加卷积过滤器来产生更高层的特征表示,作者想到了除了像之前一样堆加网络卷积层之外,还可以在卷积层里边做特殊的设计,使得网络能够在每个感受域提取更好的特征.
mlpconv
maxout能够拟合任何凸函数,也就能够拟合任何的激活函数(默认了激活函数都是凸的),而NIN想表明它不仅能够拟合任何凸函数,而且能够拟合任何函数,因为它本质上可以说是一个小型的全连接神经网络.
NIN使用多层感知器的原因是MLP的结构与CNN兼容,都可以使用反向传播训练,并且也是个深度模型,与特征重用的理念一致.将MLP构成的网络层称为一个mlpconv层.MLP可以拟合任意形式的函数,线性、非线性的都可以.
线性卷积层和mlpconv层的区别如图所示:

mlpconv中使用ReLU,并未替换掉激活函数,改变的只是卷积的方式:不再是element-wise形式的乘积,而是用非线性的MLP + ReLU完成。其目的是引入更多的非线性元素。
如下图的NIN结构:

第一个卷积核是11x11x3x96,因此在一个patch块上卷积的输出是1x1x96的feature map(一个96维的向量).在其后又接了一个MLP层,输出仍然是96.因此这个MLP层就等价于一个1 x 1 的卷积层,这样工程上任然按照之前的方式实现,不需要额外工作.
Global Average Pooling
传统的cnn是在较低层使用卷积,如分类任务中,最后的卷积层所得feature map被矢量化进行全连接层,然后使用softmax 回归进行分类。一般来说,在卷积的末端完成的卷积与传统分类器的桥接。全连接阶段易于过拟合,妨碍整个网络的泛化能力,一般应有一些规则方法来处理过拟合。
在传统CNN中很难解释最后的全连接层输出的类别信息的误差怎么传递给前边的卷积层.而global average pooling更容易解释.另外,全连接层容易过拟合,往往依赖于dropout等正则化手段.
global average pooling的概念非常简单,分类任务有多少个类别,就控制最终产生多少个feature map.对每个feature map的数值求平均作为某类别的置信度,类似FC层输出的特征向量,再经过softmax分类.其优点有:
- 参数数量减少,减轻过拟合(应用于AlexNet,模型230MB->29MB);
- 更符合卷积网络的结构,使feature map和类别信息直接映射;
- 求和取平均操作综合了空间信息,使得对输入的空间变换更鲁棒(与卷积层相连的FC按顺序对特征进行了重新编排(flatten),可能破坏了特征的位置信息).
- FC层输入的大小须固定,这限制了网络输入的图像大小.
FC与global average pooling的区别如下图:

可用于图像分类,目标检测等任务.
global average pooling实现使用Average Pooling,kernel_size是特征图的大小. caffe prototxt定义如下:
layers {
bottom: "cccp8"
top: "pool4"
name: "pool4"
type: POOLING
pooling_param {
pool: AVE
#kernel_size: 6
#stride: 1
#--旧版caffe需指定kernel_size&stride--
global_pooling: true
}
}
caffe在该论文之后加入了对global_pooling的支持,在pooling_param中指定global_pooling: true即可,不需要指定kernel大小,pad和stride大小(pad = 0 , stride = 1,否则会报错).kernel_size自动使用特征图的大小,代码:
if (global_pooling_) {
kernel_h_ = bottom[0]->height();
kernel_w_ = bottom[0]->width();
}
论文的caffe模型参数定义gist.
模型结构图
模型结构图源于绘制caffe prototxt模型结构的在线工具.
NIN (Network In Network)的更多相关文章
- 【论文翻译】NIN层论文中英对照翻译--(Network In Network)
[论文翻译]NIN层论文中英对照翻译--(Network In Network) [开始时间]2018.09.27 [完成时间]2018.10.03 [论文翻译]NIN层论文中英对照翻译--(Netw ...
- Deep Learning 24:读论文“Batch-normalized Maxout Network in Network”——mnist错误率为0.24%
读本篇论文“Batch-normalized Maxout Network in Network”的原因在它的mnist错误率为0.24%,世界排名第4.并且代码是用matlab写的,本人还没装caf ...
- Deep Learning 25:读论文“Network in Network”——ICLR 2014
论文Network in network (ICLR 2014)是对传统CNN的改进,传统的CNN就交替的卷积层和池化层的叠加,其中卷积层就是把上一层的输出与卷积核(即滤波器)卷积,是线性变换,然后再 ...
- Network In Network学习笔记
Network In Network学习笔记 原文地址:http://blog.csdn.net/hjimce/article/details/50458190 作者:hjimce 一.相关理论 本篇 ...
- Network in Network 2
<Network in Network>论文笔记 1.综述 这篇文章有两个很重要的观点: 1×1卷积的使用 文中提出使用mlpconv网络层替代传统的convolution层.mlp层实际 ...
- Network In Network——卷积神经网络的革新
Network In Network 是13年的一篇paper 引用:Lin M, Chen Q, Yan S. Network in network[J]. arXiv preprint arXiv ...
- 深度学习方法(十):卷积神经网络结构变化——Maxout Networks,Network In Network,Global Average Pooling
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术感兴趣的同学加入. 最近接下来几篇博文会回到神经网络结构 ...
- 论文笔记 《Maxout Networks》 && 《Network In Network》
论文笔记 <Maxout Networks> && <Network In Network> 发表于 2014-09-22 | 1条评论 出处 maxo ...
- 转载:Network In Network学习笔记
转载原文1:http://blog.csdn.net/hjimce/article/details/50458190 转载原文2:http://blog.csdn.net/mounty_fsc/art ...
随机推荐
- ReLU——Deep Sparse Rectifier Neural Networks
1. 摘要 ReLU 相比 Tanh 能产生相同或者更好的性能,而且能产生真零的稀疏表示,非常适合自然就稀疏的数据. 采用 ReLU 后,在大量的有标签数据下,有没有无监督预训练模型取得的最好效果是一 ...
- Vue+webpack项目中,运行报错Cannot find module 'chalk'的处理
刚开始用vue + webpack新建项目,在github上下载了一个示例,输入npm init >>>npm run dev 后报错 Cannot find module 'cha ...
- windows 7 php 7.1 命令行 执行 中文文件名 的PHP文件
在PHP5.6时代直接执行 php.exe 文件.php 是没有的这个问题 在win下的命令行中 活动代码页命令 chcp 修改 chcp 936 //gbk chcp 65001 //utf-8 ...
- nohup命令详解
基础命令学习目录首页 原文链接:https://blog.csdn.net/hfismyangel/article/details/80258126 1.nohup 用途:不挂断地运行命令. 语法:n ...
- oracle数据update后怎么恢复到以前的数据
http://blog.csdn.net/itdada/article/details/52746392
- binding(转)
1,Data Binding在WPF中的地位 程序的本质是数据+算法.数据会在存储.逻辑和界面三层之间流通,所以站在数据的角度上来看,这三层都很重要.但算法在3层中的分布是不均匀的,对于一个3层结构的 ...
- Beta Scrum Day 3 — 听说
听说
- Leetcode题库——28.实现strStr()
@author: ZZQ @software: PyCharm @file: strStr.py @time: 2018/11/6 20:04 要求:给定一个 haystack 字符串和一个 need ...
- Gradle入门(1):安装
在Ubuntu下,执行以下命令: sudo apt-get install gradle 安装完成后,执行命令: gradle -v 得到以下信息: Picked up _JAVA_OPTIONS: ...
- angularJS1笔记-(11)-自定义指令(transclude/priority/terminal)
自定义指令的属性 transclude:为true时,允许把html中新定义的指令中原来的dom运用到该指令的template中. 属性priority,设置该指令的优先级,优先级大的先执行,默认指令 ...