您的位置:首页 > 编程语言 > Go语言

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的结构推理过程加了很大部分自己的看法,他为啥长这样就能代表稀疏结构也困扰了我很长时间,到现在也有疑问,欢迎交流指正。也许像文中说的,要证明需要很强的假设,工程的好处是我做出来好使就行了,存在即合理,但是去追究他为什么合理才是进步的动力。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: