Inception in CNN
之前也写过GoogLeNet的笔记。但那个时候对Inception有些似懂非懂,这周又一次看了一遍,觉得有了新的体会,特地又一次写一篇博客与它再续前缘。
本文属于论文笔记性质。特此声明。
Network in Network
GoogLeNet提出之时,说到事实上idea是来自NIN。NIN就是Network in Network了。
NIN有两个特性。是它对CNN的贡献:
- MLP取代GLM
 - Global Average Pooling
 
mlpconv

普通的卷积能够看做是比較特殊的GLM,GLM就是广义线性模型。那么MLP是指,在做卷积操作的时候,把线性操作变为多层感知机。
这个idea的理论基础是多层感知机的抽象能力更强。假如我们把从图像中抽取出来的特征称作是这个图像的隐含概念(仅仅是一个名称罢了,不要过度追究)。那么假设隐含概念是线性可分的,那么,GLM抽取出来的特征没有问题。抽象表达能力刚刚好。可是假如隐含概念并非线性可分的,那么就悲剧了。在仅仅使用GLM的情况下,不得只是度的使用filter来表现这个隐含概念的各个方面,然后在下一层卷积的时候又一次将这些概念组合,形成更加抽象的概念。
所以。基于如上,能够觉得,在抽特征的时候直接做了非线性变换。能够有效的对图像特征进行更好的抽象。
从而,Linear convolution layer就变成了Mlpconv layer。
值得一提的是,Mlpconv相当于在正常的卷积层后面,再加入一个1×1的卷积层。
Global Average Pooling
Global Average Pooling的做法是将全连接层去掉。
全连接层的存在有两个缺点:
- 全连接层是传统的神经网络形式,使用了全连接层以为着卷积层仅仅是作为特征提取器来提取图像的特征。而全连接层是不可解释的。从而CNN也不可解释了
 - 全连接层中的參数往往占领CNN整个网络參数的一大部分,从而使用全连接层easy导致过拟合。
 
而Global Average Pooling则是在最后一层,将卷积层设为与类别数目一致,然后全局pooling。从而输出类别个数个结果。
使用了mlpconv和Global Average Pooling之后,网络结构例如以下:

Inception
读google的论文,你立刻会感到一股project的气息扑面而来。像此时的春风一样。凌厉中透着暖意。所谓凌厉,就是它能把一个idea给用到节省内存和计算量上来,太偏实现了,所谓暖意。就是真的灰常有效果。
自2012年AlexNet做出突破以来。直到GoogLeNet出来之前。大家的主流的效果突破大致是网络更深。网络更宽。
可是纯粹的增大网络有两个缺点——过拟合和计算量的添加。
解决这两个问题的方法当然就是添加网络深度和宽度的同一时候降低參数,为了降低參数。那么自然全连接就须要变成稀疏连接,可是在实现上,全连接变成稀疏连接后实际计算量并不会有质的提升,由于大部分硬件是针对密集矩阵计算优化的。稀疏矩阵尽管数据量少,可是所耗的时间却是非常难缺少。
所以须要一种方法,既能达到稀疏的降低參数的效果。又能利用硬件中密集矩阵优化的东风。
Inception就是在这样的情况下应运而生。
第一步。将卷积分块。所谓的分块就是事实上就是将卷积核分组,既然是分组索性就让卷积和不一样吧。索性使用了1×1,3×3,5×5的卷积核,又由于pooling也是CNN成功的原因之中的一个,所以把pooling也算到了里面。然后将结果在拼起来。这就是最naive版本号的Inception。

对于这个Inception,有两点须要注意:
- 层级越高。所相应的原始图片的视野就越大。相同大小的卷积核就越难捕捉到特征,因而层级越高,卷积核的数目就应该添加。
 - 1×1。3×3。5×5 仅仅是任意想出来的,不是必须这样。
 
这个naive版的Inception,另一个问题,由于全部的卷积核都在上一层的全部输出上来做,那5×5的卷积核所需的计算量就太大了。因而,能够採用NIN中的方法对上一层的输出进行Merge。这样就衍生出了真正可用的Inception。

这个结构利用了NIN结构中非线性变换的强大表达能力。
同一时候,正如上一篇博客决策森林和卷积神经网络二道归一中的隐式数据路由,计算量也大大降低。由于四个分支之间是不须要做计算的。
再同一时候,还具有不同的视野尺度。由于不同尺寸的卷积核和pooling是在一起使用的。
旁白赞曰:其谋略不可为不远,其心机不可谓不深啊。
之前心中一直有个疑问,那就是max-pooling之后的feature_map不是应该长宽都减半了么,那怎么与conv的输出拼接。后来才想到。是自己被theano中的实现误导了,theano的实现是自己主动就缩小了,但stride为1的时候,max_pooling的输出还能够是长宽不变。
GoogLeNet的模型參数具体例如以下:

结构例如以下:

须要注意的是。为了避免梯度消失,网络额外添加了2个辅助的softmax用于向前传导梯度。文章中说这两个辅助的分类器的loss应该加一个衰减系数,实际測试的时候,这两个额外的softmax会被去掉。
Inception-V2
Google的论文另一个特点,那就是把一个idea发挥到极致。不挖干净绝不罢手。
所以第二版的更接近实现的Inception又出现了。Inception-V2这就是文献[3]的主要内容。
Rethinking这篇论文中提出了一些CNN调參的经验型规则。暂列例如以下:
- 避免特征表征的瓶颈。特征表征就是指图像在CNN某层的激活值,特征表征的大小在CNN中应该是缓慢的减小的。
 - 高维的特征更easy处理。在高维特征上训练更快。更easy收敛
 - 低维嵌入空间上进行空间汇聚。损失并非非常大。
这个的解释是相邻的神经单元之间具有非常强的相关性。信息具有冗余。
 - 平衡的网络的深度和宽度。宽度和深度适宜的话能够让网络应用到分布式上时具有比較平衡的computational budget。
 
Smaller convolutions

简而言之,就是将尺寸比較大的卷积,变成一系列3×3的卷积的叠加,这样既具有相同的视野。还具有更少的參数。
这样可能会有两个问题, 
- 会不会降低表达能力? 
- 3×3的卷积做了之后还须要再加激活函数么?(使用ReLU总是比没有要好)
实验表明。这样做不会导致性能的损失。
个人觉得,用大视野一定会比小视野要好么? 叠加的小视野还具有NIN的效果。所以,平分秋色我觉得还不能说是由于某个原因。
于是Inception就能够进化了,变成了

Asymmetric Convoluitons
使用3×3的已经非常小了。那么更小的2×2呢?2×2尽管能使得參数进一步降低,可是不如另一种方式更加有效,那就是Asymmetric方式,即使用1×3和3×1两种来取代3×3. 例如以下图所看到的:

使用2个2×2的话能节省11%的计算量。而使用这样的方式则能够节省33%。
于是。Inception再次进化。

注意:实践证明。这样的模式的Inception在前几层使用并不会导致好的效果,在feature_map的大小比較中等的时候使用会比較好
Auxiliary Classifiers
在GoogLeNet中,使用了多余的在底层的分类器。直觉上能够觉得这样做能够使底层能够在梯度下降中学的比較充分。但在实践中发现两条:
- 多余的分类器在训练開始的时候并不能起到作用。在训练快结束的时候。使用它能够有所提升
 - 最底层的那个多余的分类器去掉以后也不会有损失。
 - 以为多余的分类器起到的是梯度传播下去的重要作用,但通过实验觉得实际上起到的是regularizer的作用,由于在多余的分类器前加入dropout或者batch normalization后效果更佳。
 
Grid Size Reduction
Grid就是图像在某一层的激活值。即feature_map,普通情况下。假设想让图像缩小。能够有例如以下两种方式:

右图是正常的缩小,但计算量非常大。左图先pooling会导致特征表征遇到瓶颈,违反上面所说的第一个规则,为了同一时候达到不违反规定且降低计算量的作用,将网络改为下图:

使用两个并行化的模块能够降低计算量。
V2-Inception
经过上述各种Inception的进化。从而得到改进版的GoogLeNet。例如以下:

图中的Figure 4是指没有进化的Inception。Figure 5是指smaller conv版的Inception,Figure 6是指Asymmetric版的Inception。
Label Smoothing
除了上述的模型结构的改进以外,Rethinking那篇论文还改进了目标函数。
原来的目标函数,在单类情况下,假设某一类概率接近1,其它的概率接近0,那么会导致交叉熵取log后变得非常大非常大。从而导致两个问题:
- 过拟合
 - 导致样本属于某个类别的概率非常的大,模型太过于自信自己的推断。
 
所以,使用了一种平滑方法。能够使得类别概率之间的区别没有那么大,

用一个均匀分布做平滑,从而导致目标函数变为:

该项修改能够提升0.2%。
Rethinking 那篇论文里还有关于低分辨率的输入的图像的处理,在此不赘述了。
參考文献
[1]. Lin M, Chen Q, Yan S. Network in network[J]. arXiv preprint arXiv:1312.4400, 2013.
[2]. Szegedy C, Liu W, Jia Y, et al. Going deeper with convolutions[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2015: 1-9.
[3]. Szegedy C, Vanhoucke V, Ioffe S, et al. Rethinking the Inception Architecture for Computer Vision[J]. arXiv preprint arXiv:1512.00567, 2015.
Inception in CNN的更多相关文章
- [Tensorflow] Cookbook - Retraining Existing CNNs models - Inception Model
		
From: https://github.com/jcjohnson/cnn-benchmarks#alexnet 先大概了解模型,再看如果加载pre-training weight. 关于retai ...
 - 深度学习方法(十一):卷积神经网络结构变化——Google Inception V1-V4,Xception(depthwise convolution)
		
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.机器学习技术感兴趣的同学加入. 上一篇讲了深度学习方法(十) ...
 - Deep learning_CNN_Review:A Survey of the Recent Architectures of Deep Convolutional Neural Networks——2019
		
CNN综述文章 的翻译 [2019 CVPR] A Survey of the Recent Architectures of Deep Convolutional Neural Networks 翻 ...
 - 【转】CNN卷积神经网络_ GoogLeNet 之 Inception(V1-V4)
		
http://blog.csdn.net/diamonjoy_zone/article/details/70576775 参考: 1. Inception[V1]: Going Deeper with ...
 - CNN卷积神经网络_深度残差网络 ResNet——解决神经网络过深反而引起误差增加的根本问题,Highway NetWork 则允许保留一定比例的原始输入 x。(这种思想在inception模型也有,例如卷积是concat并行,而不是串行)这样前面一层的信息,有一定比例可以不经过矩阵乘法和非线性变换,直接传输到下一层,仿佛一条信息高速公路,因此得名Highway Network
		
from:https://blog.csdn.net/diamonjoy_zone/article/details/70904212 环境:Win8.1 TensorFlow1.0.1 软件:Anac ...
 - AI:IPPR的数学表示-CNN结构进化(Alex、ZF、Inception、Res、InceptionRes)
		
前言: 文章:CNN的结构分析-------: 文章:历年ImageNet冠军模型网络结构解析-------: 文章:GoogleLeNet系列解读-------: 文章:DNN结构演进Histor ...
 - 经典分类CNN模型系列其五:Inception v2与Inception v3
		
经典分类CNN模型系列其五:Inception v2与Inception v3 介绍 Inception v2与Inception v3被作者放在了一篇paper里面,因此我们也作为一篇blog来对其 ...
 - 使用caffe训练自己的CNN
		
现在有这样的一个场景:给一张行人的小矩形框图片, 根据该行人的特征识别出性别. 分析: (1),行人的姿态各异,变化多端.很难提取图像的特定特征 (2),正常人肉眼判别行人的根据是身材比例,头发长度等 ...
 - 【Valse首发】CNN的近期进展与实用技巧(上)
		
作者:程程链接:https://zhuanlan.zhihu.com/p/21432547来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 深度学习大讲堂致力于推送人工智 ...
 
随机推荐
- [Agc001E] BBQ Hard
			
[Agc001E] BBQ Hard 题目大意 给定\(n\)对正整数\(a_i,b_i\),求\(\sum_{i=1}^{n-1} \sum_{j=i+1}^n \binom{a_i+b_i+a_j ...
 - 【10.29校内测试】【线段树】【DP】【二进制Trie树求最小值最大】
			
Solution 标程太暴力惹QAQ 相当于是26棵线段树的说QAQ 不过我写了另一种写法,从大到小枚举每一个字母,标记字典序在这个字母之上的位置为1,每次都建一棵线段树,维护1的数量,即区间和. 修 ...
 - Codeforces Round #222 (Div. 1) B. Preparing for the Contest 二分+线段树
			
B. Preparing for the Contest 题目连接: http://codeforces.com/contest/377/problem/B Description Soon ther ...
 - 使用命令行编译和运行 c、Java和python程序
			
集成开发环境已经非常方便,从编写程序到执行程序看到结果,让我们不用关心中间的过程.但是使用原始的.命令的方式来将程序编译运行有的时候可能有些用,比如写个简答的程序,或者是身边没有集成工具的时候. C语 ...
 - Nginx负载均衡的五种策略
			
nginx可以根据客户端IP进行负载均衡,在upstream里设置ip_hash,就可以针对同一个C类地址段中的客户端选择同一个后端服务器,除非那个后端服务器宕了才会换一个. nginx的upstre ...
 - http://qurtyy.blog.163.com/blog/static/5744368120130221419244/
			
我们先来看它的思路:把控制不透明度和控向上移动的动画分别存储在两个队列中,控制向上移动的队列按默认情况进行(在2000毫秒内完成),而不透明度的控制在1000毫秒内执行,但这个队列要晚于默认队列100 ...
 - composer安装Workerman报错:Installation failed, reverting ./composer.json to its original content.
			
今天想在TP5上安装workerman,实现一个后台消息提醒功能. 第一步就卡住了,根据手册里说的首先通过composer安装 $ composer require topthink/think-wo ...
 - linux下patch命令使用详解---linux打补丁命令
			
http://blog.csdn.net/pashanhu6402/article/details/51849354 语 法:patch [-bceEflnNRstTuvZ][-B <备份字首字 ...
 - JavaScript也能求爱哦
			
这里面做了一个JavaScript的求爱小特效,效果例如以下: 不仅能出现以下的图的效果,还能够让这个图形尾随着鼠标转动哦,这里面仅仅是一个简单的没有修饰的小样例,基于这个样例能够让求爱,更加好玩了. ...
 - PhotoShop CS6 在2K屏幕下标题菜单等字体太小
			
对于此类问题,我更喜欢直接了当,不作解释,解决方法如下(大面积参考互联网内容): (1)Win+R按键打开运行对话框, 输入regedit,打开注册表. (2)展开HKEY_LOCAL_MACHINE ...