致网友:如果你不小心检索到了这篇文章,请不要看,因为很烂。写下来用于作为我的笔记。
2014年,在LSVRC14(large-Scale Visual Recognition Challenge)中,Google团队凭借 googLeNet 网络取得了 the new state of the art.
论文 Going deeper with convolutions 就是对应该网络发表的一篇论文;
主要内容:
主要围绕着一个 Inception architecture 怎么提出讲的;
不明白的部分:
文中在讲这个网络之前,单纯地增加网络的width 与depth的缺点:一是过多的参数很容易使网络overfitting ,再加上labeled examples 数目有限,网络不好训练;二是参数过多,使网络需要大量的 computational resources;
解决的方法就是加入:sparsity;关于这个的理论支持它的参考文献【2:provable bounds for learning some deep representations】说明了,不过我真的没有看明白文献2(没有心思看下去 了),太尼妈数学了; 另一个方面的支持就是:模似我们生物系统)
既然说了引用 sparsity,那怎么引入啊?应该就是把 fully connected 变为 sparsely connected. 应该就是卷积连接吧。。 但是文中有很消极地说:传统的卷积层只是一个collection of dense connections fo the patches in the earlier layers. 还有就是:在卷积层与卷积层之间的连接时,不是全部连接,而是随机地和稀疏的,比如:前一层有64个feature maps,后面的卷积层只连接部分;(之前这么做,现在不了) 。 到底文献【2】表明了怎么的 sparse constructure呢??? 暂是不明白。。。
中间又说了一堆的什么关于 sparse matrix 计算困难的问题,怎么又把它分解就可以容易计算啦,不过关网络什么事呢??难道:1. 利用这个 sparse matrix 的计算困难问题来类比 sparse structure 困难的问题?? 2. 难道这个sparse matrix 是在 sparse structure 的网络结构下形成的呢?如果这样的话,你把 sparse structure的网络结构 construct 出来,计算困难的 sparse matrix 是数学问题,后来又弄 inception structure 是什么意思?? 3. 或者说,按文中的意思,inception structure即可以近似成一个 sparse structure 又可以利用现在的计算resources来计算新的结构中的 dense matrix??,这样一举两得了?? 4. 关键一个问题:文中应该把这个原来应该的 sparse structure 说明白啊?都是说从文献【2】中之类的, 草! 5. 我现在又觉得文中就是从 计算 sparse matrix 上得到 inspiration,来计算出来了这个 inception structure.
对于incepiton structure 如何定义的问题上:它作为一个整个网络的一个 component,应该有什么样的属性呢?? 文献【2】又一次说了:layer-by-layer construction where one should analyze the correlation statistics of the last layer and clustering the into groups of units with high correlation. 意思就是吧,这个网络的component 应该可以分析下层的 correlation statistics,并且把这个 correlation 在上一层表现出来; 所以呢, inception structure 就用 convolutions 1 by 1 、3 by 3 and 5 by 5 进行搞了吧(对于这个卷积层怎么能表现出来 correlaiton statistics 呢,我一直不是很明白), 最后加了一个 pooling 层;
对于文中说的 3 by 3 and 5 by 5 的filter maps 的 比例为什么要随着 move to higher layers 要增加的解释不明白;
ineception module的网络结构:
没有加入 reduction的样子(这样增加很多计算量):
增加了一个1 by 1 的convolutional layer 用于减少 feature maps 并且又加入了 rectified linear activation;
一开始会有点纳闷: filter 是怎么 concatenation的,其实,在卷积的时候关键在于 stride,而不在于 kernel size,kernel size 不一样时,只需要进行 pad 补齐就可以。 只要stride 一样,最后得到的 fiter map 的大小也是一样的;
GoogLeNet 网络:
文中用 Inception module 构造了一个 22层的googLeNet 网络;
网络的结构不多说,只说一点,为了 combat 梯度消失,在网络的中间另外加入了两个auxiliary 的 loss 层,并且分别占的权重为0.3. 其实间接也提供了一种regularization, 用于约束相关的权值;
网络的训练: 随机梯度法、 momentum为 0.9, 学习率变化为 每8次epoch下降4%, 多模型用于prediction 时, 采用Polyyak 平均。
在ILSVRC的设置
1,训练样本的处理: 把一个图片resize成4种 scales(最小边长分别为:356,288,320,352),然后分别从上中下取 正方形的子图片(以最小边长为边长), 再从子图片中取四个角加中间,再加上身resize为224*224的图片,最后mirrored, 最终从一个原始图片得到了4*3*6*2=144个 crops。
2. 文献分别训练了7个模型,(样本的采样方法与 输入的图片顺序不一样)
3. 把softmax输出的probabilites 求平均(在所有的crops与models之间)。。 {另外文章也偿试了这样的方法:在一个图片的不同crops之间取最大的那个概率值,然后在不同的 模型中取平均值,这样的结果不怎么好。(如果这样操作以后 ,所以类的和不等于1了啊。)}
最后,在caffe中的实现:
训练好的模型可以在 github上 下载:
代码在ipyhon notebook 里面写的。直接截图吧:
待补充。。。