首页 > 代码库 > Rethinking the inception architecture for computer vision的 paper 相关知识
Rethinking the inception architecture for computer vision的 paper 相关知识
这一篇论文很不错,也很有价值;它重新思考了googLeNet的网络结构--Inception architecture,在此基础上提出了新的改进方法;
文章的一个主导目的就是:充分有效地利用computation;
第一部分: 文章提出了四个principles:
原则1:设计网络的时候需要避免 representational bottlenecks; 什么意思呢? 文章中说: 层与层之间进行 information 传递时,要避免这个过程中的数据的extreme compression,也就是说,数据的 scale 不能减小的太快;(数据从输入到输出大致是减少的,这个变化过程一定要gently,而不是快速的, 一定是慢慢的变少。。。。。。) 当数据的维数extreme下降的时候,就相当于引入了 representational bottelneck.
原则2:没有怎么看明白什么意思啊?复制过来。Higher dimensional representations are easier to process locally within a network. Increasing the activations per tile in a convolutional network allows for more
disentangled features. The resulting networks will train faster. (可以结合 figure7 下面的注释, 我感觉: 在高维表示时,对于局部的特征更容易处理,意思就是local 卷积,用1*1啦, 或3*3, 别用太大的)
原则3: spatial aggregation can be done over lower dimensional embedding without much or any loss in representational power. 直接翻译真的不会翻译啊
原则4: 应该均衡网络的宽度与深度;
第二部分:网络的改进方法:
基于以上原则,开始对网络进行改进了。
1. 把大的卷积层分解为小的卷积层,提高计算效率:
第一种:可以把一个5*5的卷积卷积层分解成两个 3*3 的卷积层。 一个细节就是:把底层的 filters 为m 时, 上层的filters 为 n 时,这时两层的小的卷积层的每一个filters 为多少呢? 细节2: 当原来的 激活函数为线性激活函数时,现在变为两层的激活函数如何选择?(文中说明了全部使用 relu 激活函数会好一些)
2. 非对称分解:
把一个 n*n 的卷积层分解为两个 1*N 和 N*1 的卷积层; (文中说了这种分解在网络的开始几层效果垃圾, but is gives very good result on medium grid-sizes)
3. auxiliary classifiers 分类器的真正作用
文章都过实验发现 辅助分类器的真正作用为:regularizer。 意思就是吧,这个辅助分类器并不会加快网络的训练,不会加快 low-level 特征的 evlove , 它只会在最后的时候提高了一点 performance. 文章还说了,如果加上 batch-mormalized 效果更好一些,这也说明了 batch-normalized 也算一种 regularizer吧。
4. 有效的 grid-size 的reduction 的方法 ,即减少 feature map 的size 的方法:
文中出发点:1 ,避免 representational bottleneck ,其实我理解的就是避免 data的 dimension 急剧下降,一定也慢慢的来,别太快了; 2, 提高计算效率;
下图中的两种方法不满足条件:(左边不满足条件1, 右边不满足条件2)
下图的方法为论文中提出来的:
5. Label smoothing Regularization 方法:
这里要涉及到了一些计算过程,用语言说明一下:网络采用softmax分类器以及交叉熵函数作为loss函数时,对于类别 K 的最上层的导数等于:网络实际输出的 类别 K 的后验概率 - 真实的类别 K的后验概率; 而真实的类别 K的后验概率 要么为1,要么为0. 这个容易出一个问题: 1,过拟合,为什么呢?这样会使促使 网络去学习 的实际输出的 类别 K 的后验概率为 1 或0 ,it is not guaranteed to generalize; 2, 这个也限制了导数的变化, 因为吧, 容易上层数为0 啊。。( 自己推导好好理解一下)
所以呢,文中提出了一个方法: 真实的类别 K的后验概率别这个confident (要么为1 要么为0,不好,虽然后验概率就是这样的), 然后引入了:
其中的u(k)是自己引入的, 文章用了均匀分布; 另外文章也建议了使用训练样本中的 k 的分布来表示 u(k), 其实吧,训练样本中的每一个类别的样本可能差不多相同吧,所以呢,用均匀分布也挺合适的;
第三部分: Inception V-2网络;
第四部分:训练方法:
看看,参考文献很好;
第五部分:如何处理 small object的分类问题?
由于 object 比较小,所以呢, 像素少, 分辨率低,怎么办?
文中呢,通过试验说明了在计算力相同的情况下,不同的分辨率的输入的效果其实差不多的。
所以呢,当输入的分辨率低时,适当地调节网络的前几层,来保证 computational cost 相同 ,这样的话,最终的 perpormance 其实没有多大的差别的;
第六部分:对比实验:
这一部分对比了其它的实验结果, 注意:Inception-V3.
Rethinking the inception architecture for computer vision的 paper 相关知识