Network In Network学习笔记

原文地址:http://blog.csdn.net/hjimce/article/details/50458190

作者:hjimce

一、相关理论

本篇博文主要讲解2014年ICLR的一篇非常牛逼的paper:《Network In Network》,过去一年已经有了好几百的引用量,这篇paper改进了传统的CNN网络,采用了少量的参数就松松击败了Alexnet网络,Alexnet网络参数大小是230M,采用这篇paper的算法才29M,减小了将近10倍啊。这篇paper提出的网络结构,是对传统CNN网络的一种改进(这种文献少之又少,所以感觉很有必要学习)。

传统的卷积神经网络一般来说是由:线性卷积层、池化层、全连接层堆叠起来的网络。卷积层通过线性滤波器进行线性卷积运算,然后在接个非线性激活函数,最终生成特征图。以Relu激活函数为例,特征图的计算公式为:

其中(i,j)表示图片像素点的位置索引,xij表示我们卷积窗口中的图片块,k则表示我们要提取的特征图的索引。

一般来说,如果我们要提取的一些潜在的特征是线性可分的话,那么对于线性的卷积运算来说这是足够了。然而一般来说我们所要提取的特征一般是高度非线性的。在传统的CNN中,也许我们可以用超完备的滤波器,来提取各种潜在的特征。比如我们要提取某个特征,于是我就用了一大堆的滤波器,把所有可能的提取出来,这样就可以把我想要提取的特征也覆盖到,然而这样存在一个缺点,那就是网络太恐怖了,参数太多了。

我们知道CNN高层特征其实是低层特征通过某种运算的组合。于是作者就根据这个想法,提出在每个局部感受野中进行更加复杂的运算,提出了对卷积层的改进算法:MLP卷积层。另一方面,传统的CNN最后一层都是全连接层,参数个数非常之多,容易引起过拟合(如Alexnet),一个CNN模型,大部分的参数都被全连接层给占用了,故这篇paper提出采用了:全局均值池化,替代全连接层。因此后面主要从这两个创新点进行讲解。

二、MLP卷积层(文献创新点1)

这个是文献的大创新点,也就是提出了mlpconv层。Mlpconv层可以看成是每个卷积的局部感受野中还包含了一个微型的多层网络。其实在以前的卷积层中,我们局部感受野窗口的运算,可以理解为一个单层的网络,如下图所示:

线性卷积层

CNN层的计算公式如下:

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

Mlpconv层

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

一般来说mlp是一个三层的网络结构。
下面是一个单层的mlpconv网络的caffe网络结构文件,源码来自于:https://gist.github.com/mavenlin/d802a5849de39225bcc6 :
<span style="font-size:18px;">layers {bottom: "data"top: "conv1"name: "conv1"type: CONVOLUTIONblobs_lr: 1blobs_lr: 2weight_decay: 1weight_decay: 0convolution_param {num_output: 96kernel_size: 11stride: 4weight_filler {type: "gaussian"mean: 0std: 0.01}bias_filler {type: "constant"value: 0}}
}
layers {bottom: "conv1"top: "conv1"name: "relu0"type: RELU
}
layers {bottom: "conv1"top: "cccp1"name: "cccp1"type: CONVOLUTIONblobs_lr: 1blobs_lr: 2weight_decay: 1weight_decay: 0convolution_param {num_output: 96kernel_size: 1stride: 1weight_filler {type: "gaussian"mean: 0std: 0.05}bias_filler {type: "constant"value: 0}}
}
layers {bottom: "cccp1"top: "cccp1"name: "relu1"type: RELU
}
layers {bottom: "cccp1"top: "cccp2"name: "cccp2"type: CONVOLUTIONblobs_lr: 1blobs_lr: 2weight_decay: 1weight_decay: 0convolution_param {num_output: 96kernel_size: 1stride: 1weight_filler {type: "gaussian"mean: 0std: 0.05}bias_filler {type: "constant"value: 0}}
}
layers {bottom: "cccp2"top: "cccp2"name: "relu2"type: RELU
}
</span>
三、全局均值池化(文献创新点2)

传统的卷积神经网络卷积运算一般是出现在低层网络。对于分类问题,最后一个卷积层的特征图通过量化然后与全连接层连接,最后在接一个softmax逻辑回归分类层。这种网络结构,使得卷积层和传统的神经网络层连接在一起。我们可以把卷积层看做是特征提取器,然后得到的特征再用传统的神经网络进行分类。

然而,全连接层因为参数个数太多,往往容易出现过拟合的现象,导致网络的泛化能力不尽人意。于是Hinton采用了Dropout的方法,来提高网络的泛化能力。

本文提出采用全局均值池化的方法,替代传统CNN中的全连接层。与传统的全连接层不同,我们对每个特征图一整张图片进行全局均值池化,这样每张特征图都可以得到一个输出。这样采用均值池化,连参数都省了,可以大大减小网络,避免过拟合,另一方面它有一个特点,每张特征图相当于一个输出特征,然后这个特征就表示了我们输出类的特征。这样如果我们在做1000个分类任务的时候,我们网络在设计的时候,最后一层的特征图个数就要选择1000,下面是《Network In Network》网络的源码,倒数一层的网络相关参数:

layers {
bottom: "cccp7"
top: "cccp8"
name: "cccp8-1024"
type: CONVOLUTION
blobs_lr: 1
blobs_lr: 2
weight_decay: 1
weight_decay: 0
convolution_param {
num_output: 1000
kernel_size: 1
stride: 1
weight_filler {
type: "gaussian"
mean: 0
std: 0.01
}
bias_filler {
type: "constant"
value: 0
}
}
}

全局均值池化层的相关参数如下:

layers {
bottom: "cccp8"
top: "pool4"
name: "pool4"
type: POOLING
pooling_param {
pool: AVE
kernel_size: 6
stride: 1
}
}

因为在Alexnet网络中,最后一个卷积层输出的特征图大小刚好是6*6,所以我们pooling的大小选择6,方法选择:AVE。

四、总体网络架构

根据上面的作者对传统CNN的两个改进,利用其进行1000物体分类问题,于是作者最后设计了一个:4层的NIN+全局均值池化,网络如下:

个人总结:个人感觉这篇文献很有价值,实现方式也很简单,一开始我还以为需要caffe的c++源码来实现NIN网络,结果发现实现NIN的源码实现方式其实就是一个1*1的卷积核,实现卷积运算,所以实现起来相当容易,不需要自己写源码,只需要简简单单的把卷积核的大小变一下,然后最后一层的全连接层直接用avg pooling替换一下就ok了。个人评价:网络浅显易懂,简单实现,却可以改进原来的网络,提高精度,减小模型大小,所以是一篇很值得学习的文献。后续即将讲解另外几篇2015年,也是对CNN网络结构改进的牛逼文献:《Spatial Transformer Networks》、《Striving For Simplicity:The All Convolutional Net》、《Stacked What-Where Auto-encoders》,敬请期待,毕竟这样的文章敢于挑战传统的CNN结构,对其不知做出改进,所以我们需要一篇一篇的学。

参考文献:

1、《Network In Network》

2、https://github.com/BVLC/caffe/wiki/Model-Zoo

3、https://gist.github.com/mavenlin/d802a5849de39225bcc6

4、《Maxout Networks》

**********************作者:hjimce   时间:2016.1.4  联系QQ:1393852684     原创文章,版权所有,转载请保留本行信息***************

深度学习(二十六)Network In Network学习笔记相关推荐

  1. 知识图谱论文阅读(八)【转】推荐系统遇上深度学习(二十六)--知识图谱与推荐系统结合之DKN模型原理及实现

    学习的博客: 推荐系统遇上深度学习(二十六)–知识图谱与推荐系统结合之DKN模型原理及实现 知识图谱特征学习的模型分类汇总 知识图谱嵌入(KGE):方法和应用的综述 论文: Knowledge Gra ...

  2. C1认证学习二十六(基础选择器)

    C1认证学习二十六(基础选择器) 任务背景 CSS选择器是CSS规则的一部分,用来指定需要设置的样式的HTML元素,通过选择器可以实现CSS对HTML元素一对一或者一对多或者多对一的控制了啦. 任务目 ...

  3. 推荐系统遇上深度学习(二十六)--知识图谱与推荐系统结合之DKN模型原理及实现

    作者:石晓文 Python爱好者社区专栏作者个人公众号:小小挖掘机 添加微信sxw2251,可以拉你进入小小挖掘机技术交流群哟!博客专栏:wenwen 在本系列的上一篇中,我们大致介绍了一下知识图谱在 ...

  4. 二十六个月Android学习工作总结

    零零碎碎的总结 1.客户端的功能逻辑不难,UI界面也不难,但写UI花的时间是写功能逻辑的两倍. 2.写代码前的思考过程非常重要,即使在简单的功能,也需要在本子上把该功能的运行过程写出来. 3.要有自己 ...

  5. JavaWeb学习 (二十六)————监听器(Listener)学习(二)

    一.监听域对象中属性的变更的监听器 域对象中属性的变更的事件监听器就是用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信 ...

  6. opencv学习(二十六)之图像金字塔(高斯金字塔、拉普拉斯金字塔)

    在进行数字图像处理时,我们可能会需要将某种尺寸的图像转换为其他尺寸的图像,这样会存在放大图像核缩小图像两种可能.opencv提供了一个真正意义上的图像所方函数resize(),但在本篇中主要学习以下使 ...

  7. Go学习(二十六):MD5,Sha1,Base64的使用

    1.生成Md5 package mainimport ( "crypto/md5" "fmt" "io")func main() { str ...

  8. Java多线程学习二十六:原子类是如何利用 CAS 保证线程安全的?

    什么是原子类,以及它有什么作用. 在编程领域里,原子性意味着"一组操作要么全都操作成功,要么全都失败,不能只操作成功其中的一部分".而 java.util.concurrent.a ...

  9. ballerina 学习二十六 项目docker 部署 运行(二)

    ballerina 从发布,到现在官方文档的更新也是很给力的,同时也有好多改进,越来越好用了 可以参考官方文档 https://ballerina.io/learn/by-guide/restful- ...

  10. 无人驾驶汽车系统入门(二十六)——基于深度学习的实时激光雷达点云目标检测及ROS实现

    无人驾驶汽车系统入门(二十六)--基于深度学习的实时激光雷达点云目标检测及ROS实现 在前两篇文章中,我们使用PCL实现了在点云中对地面的过滤和点云的分割聚类,通常来说,在这两步以后我们将对分割出来的 ...

最新文章

  1. cookiesession的QA故事[原理篇]
  2. Nature子刊:植物根系微生物组中共生细菌的宿主偏好性
  3. 摩尔定律会死亡吗 芯片到底可以变得有多小
  4. mysql binlog日志查看及解码
  5. stata中心化处理_带有stata第2部分自定义配色方案的covid 19可视化
  6. python threading类重写_python下threading模块使用的注意点
  7. mybatis中<mappers> ,mapperLocations,和MapperScannerConfigurer 用法
  8. 快手打击低俗直播 封禁一批高粉用户
  9. 会场安排问题NYOJ14
  10. C# 反序列化datetime的处理
  11. 数据库:MySQL Workbench如何连接远程数据库
  12. 30岁前,环游世界220天
  13. 互联网技术-alibaba-gateway网关中routers路由匹配规则
  14. 什么是域名解析,A记录
  15. 一键php win10,一键批处理制作纯64位网络骨头版WIN10pe
  16. 物联网是什么?物联网前景如何?
  17. 科创人·神州数码集团CIO沈旸:最佳实践模式正在失灵,开源加速分布式创新
  18. 802.11 帧(MAC架构)
  19. Flutter 获取ios系统默认语言,只能获取到英文
  20. 文科计算机有哪些专业,计算机有哪些专业

热门文章

  1. linux内网服务器映射到公网地址吗,LINUX 内网设备将服务映射到公网地址
  2. iframe内容适应div大小_使用lt;iframegt;方式在WordPress中插入视频并自适应屏幕尺寸
  3. C语言实验源程序保存,实验一 C语言集成开发环境
  4. 班级事务管理系统php源码,F学校网络办公系统 v2.2.3
  5. mysql 客户端 csv_使用mysql客户端程序远程导出csv文件
  6. 广州专科计算机学校录取分数线,广州大专多少分能录取?高考分数170分能上广州大专?...
  7. adb 提示:error: unknown host service解决方法
  8. python-9:nonlocal,指定上一级变量
  9. Thinkphp3.2 分页带中文参数报错
  10. SQL基础:数据表的创建