Going Deeper with Convolutions
2016-06-06 20:35
281 查看
GoogleNet这篇其实早该写完翻新,以后懒癌一定要治。
GoogleNet在2014年和VGGNet一起刷新了ILSVRC的classification和detection的state of art,一时间并称双雄。我觉得他最大贡献有两个,一个是inception module概念的提出,还有就是对于inception的优化,优化的问题其实后续inception v3、v4还有深究,这些之后再说。
这篇论文还是从网络的深度和宽度说起,众所周知要提高深度CNN性能最简单粗暴的方法就是增加网络的深度和宽度,这样网络的抽象能力就越好,泛化能力越好。而我们现在不能无限制地增加网络层数的原因也很简单,计算机硬件计算能力的限制,还有过拟合。解决这两个问题的思路在文中给出,move from fully connected to sparsely connected architectures ,找一个sparse的网络结构来近似dense的结构。因为你在增加宽度深度的时候,有大量的近0的权值几乎不起作用,而且占用大量计算资源,就像一个稀疏矩阵。但是问题又来了,稀疏矩阵计算就有cache
miss问题,所以我们的目标是要找一个sparse矩阵的dense表示形式,这个想法也是从稀疏矩阵的计算中得到启发。
在Provable bounds for learning some deep representations论文里探讨了一种稀疏表示方法,把上一层相关性高的units聚类到一起,作为下一层的输入。但是低层被聚类的units,或者说相关的节点,总是在一个local region里(比如input image),就是说如果我们这样去聚类,最后我们会得到一个类似NIN的网络结构,卷积起了聚类的作用(卷积本来就有一个感知local
reception field的作用,而低层的聚类就是把local reception field放到一个cluster里),其实就是图像本身有的spacial局部相关性。NIN里是用了1*1卷积,考虑到会有大感受野的聚类(聚类的节点相距远),inception module里面加了3*3和5*5(大小只是为了方便实现)的卷积,感受野越大feature map数越少。但是到了网络高层,逐步抽象出来的feature map,原始图像的局部相关性到这可能不那么好使了,那就逐步增加大感受野(3*3、5*5)的feature
map数。然后,鉴于pooling层对于CNN成果功不可没,所以把它也加进去。好,现在我们有了inception module的雏形如下。
有了这些网络深度宽度上去了,参数还是很多啊。好,现在就是对inception module的优化。这个就比较简单,加个1*1的卷积就好了(下图)。假设原先3*3卷积有100张feature map输入100张输出,那参数有3*3*100*100=90000个。加1*1卷积后,参数有(1*1*100*100+3*3*100)=10900个。而且这样又增加了网络的非线性和抽象能力。
结构里面有一点,训练过程中在中间(Inception (4a) and (4d) modules)加了输出来保证反向传播的残差。
感想:这个结构允许增加层数的同时参数量没有爆炸增长,而且多尺度处理后再聚合是对图像有好处的(intuition)。
inception的结构推理过程加了很大部分自己的看法,他为啥长这样就能代表稀疏结构也困扰了我很长时间,到现在也有疑问,欢迎交流指正。也许像文中说的,要证明需要很强的假设,工程的好处是我做出来好使就行了,存在即合理,但是去追究他为什么合理才是进步的动力。
GoogleNet在2014年和VGGNet一起刷新了ILSVRC的classification和detection的state of art,一时间并称双雄。我觉得他最大贡献有两个,一个是inception module概念的提出,还有就是对于inception的优化,优化的问题其实后续inception v3、v4还有深究,这些之后再说。
这篇论文还是从网络的深度和宽度说起,众所周知要提高深度CNN性能最简单粗暴的方法就是增加网络的深度和宽度,这样网络的抽象能力就越好,泛化能力越好。而我们现在不能无限制地增加网络层数的原因也很简单,计算机硬件计算能力的限制,还有过拟合。解决这两个问题的思路在文中给出,move from fully connected to sparsely connected architectures ,找一个sparse的网络结构来近似dense的结构。因为你在增加宽度深度的时候,有大量的近0的权值几乎不起作用,而且占用大量计算资源,就像一个稀疏矩阵。但是问题又来了,稀疏矩阵计算就有cache
miss问题,所以我们的目标是要找一个sparse矩阵的dense表示形式,这个想法也是从稀疏矩阵的计算中得到启发。
在Provable bounds for learning some deep representations论文里探讨了一种稀疏表示方法,把上一层相关性高的units聚类到一起,作为下一层的输入。但是低层被聚类的units,或者说相关的节点,总是在一个local region里(比如input image),就是说如果我们这样去聚类,最后我们会得到一个类似NIN的网络结构,卷积起了聚类的作用(卷积本来就有一个感知local
reception field的作用,而低层的聚类就是把local reception field放到一个cluster里),其实就是图像本身有的spacial局部相关性。NIN里是用了1*1卷积,考虑到会有大感受野的聚类(聚类的节点相距远),inception module里面加了3*3和5*5(大小只是为了方便实现)的卷积,感受野越大feature map数越少。但是到了网络高层,逐步抽象出来的feature map,原始图像的局部相关性到这可能不那么好使了,那就逐步增加大感受野(3*3、5*5)的feature
map数。然后,鉴于pooling层对于CNN成果功不可没,所以把它也加进去。好,现在我们有了inception module的雏形如下。
有了这些网络深度宽度上去了,参数还是很多啊。好,现在就是对inception module的优化。这个就比较简单,加个1*1的卷积就好了(下图)。假设原先3*3卷积有100张feature map输入100张输出,那参数有3*3*100*100=90000个。加1*1卷积后,参数有(1*1*100*100+3*3*100)=10900个。而且这样又增加了网络的非线性和抽象能力。
结构里面有一点,训练过程中在中间(Inception (4a) and (4d) modules)加了输出来保证反向传播的残差。
感想:这个结构允许增加层数的同时参数量没有爆炸增长,而且多尺度处理后再聚合是对图像有好处的(intuition)。
inception的结构推理过程加了很大部分自己的看法,他为啥长这样就能代表稀疏结构也困扰了我很长时间,到现在也有疑问,欢迎交流指正。也许像文中说的,要证明需要很强的假设,工程的好处是我做出来好使就行了,存在即合理,但是去追究他为什么合理才是进步的动力。
相关文章推荐
- ffmpeg command use one command : logo, text, mask, audio process
- celery与mangodb搭配应用
- 谷歌借Google Play重返中国,这次能成功吗?
- 遗传算法(Genetic Algorithm)
- GoogleMaps踏坑之旅(二)
- mogodb3.2源码安装
- django-url调度器-中级篇
- mogodb3.2源码安装
- 深入学习golang(4)—new与make
- google 最新代理
- go语言实现的简单web服务器
- 小改GooFlow》》》goflow
- 2016 6 google最新代理
- Google推荐的图片加载库Glide介绍
- goto
- django 高级
- AlgorithmVisualizer
- 我虽不是人类:且看我如何攻破Google的ReCAPTCHA
- 计蒜之道-初赛2 A. 联想公司的 logo 设计
- windows go开发环境(3) IDE