深度学习之基础模型-Inception-V3

Although increased model size and computational cost tend to translate to immediate quality gains for most tasks (as long as enough labeled data is provided for training), computational efficiency and low parameter count are still enabling factors for various use cases such as mobile vision and big-data scenarios.

从论文中,可以看出作者主要考虑的是虽然网络的深度增加给很多任务带来了很多好处,但是模型的大小和计算效率也很关键,尤其是对于一些移动设备或者大数据场景,就显得很有必要了。

作者指出,尽管VGGNet在特征提取方面具有非常简洁的优势,但是也消耗了大量的计算资源,另一方面,GoogLeNet(Inception-V1)在内存和计算复杂度方面做了限制下,也能达到很好的效果。

  • GoogLeNet包含5million参数,只是AlexNet的 112 ,其中AlexNet包含60million参数
  • VGGNet包含的参数比AlexNet的3倍还多

通用设计原则

  • 避免采用带有瓶颈的层,尤其在网络结构开始的时候。对于一个前向传播网络,可以将其看作一个有向五环图(从输入到分类或者回归层)。将输入与输出进行分开,都能导致大量的信息从分开处流失。一般的情况下,特征图的大小从输入到输出应该缓慢下降。理论上讲,很多信息不能通过特征维数来得到,比如相关性结构。维度智能代表一些粗略的信息。
  • 高维度能够很更容易在网络的局部进行处理。在卷积网络结构中,增加非线性能够使得更多的特征解耦合。从而使的网络训练速度更快。
  • 空间聚合能够在低维嵌入进行,然而不会带来任何表达能的减弱。例如,在进行3x3的卷积时,可以在空间聚合之前,对输入进行降维,而不会带来严重的影响。原因:如果采用空间聚合,则相邻的位置的信息具有强相关性,即使进行了降维,也不会带来太多的损失,并且维数的降低,也能够加速网络学习。
  • 平衡网络的宽度和深度。最优的网络可以通过平衡每一个阶段的滤波器的个数和网络的深度达到。网络的宽度和深度的增加可以使的网络达到了一个更高的效果。但是,最优的网络结构都是通过同时来提升网络的宽度和深度,但是也需要考虑计算资源的分配。

大卷积->小卷积


这里写图片描述

  • 考虑1x1卷积后面紧跟3x3卷积,由于激活层的相邻位置是高度相关的,因此这种先降维后聚合的操作也可以达到类似的局部表达效果。
  • 任何的降维都能减少网络的参数。从而,合适的卷积分解,能得到更多的解耦合的特征,这也有助于提高网络训练的速度。另一方面,也可以利用节省下来的内存去增加filter-bank的大小,使得模型能哦股在单个机器上进行训练。
  • 3x3的卷积相对5x5的卷积能减少更多的参数。因此可以利用两个3x3的小卷积代替一个5x5的卷积核,表达能力没有减弱,但参数却减少很多( 9+925 )[利用小卷积代替大卷积的思想在VGG中也有讨论]

    网络结构

    遵循上面的原则,对Inception-v进行了改进

原始的Inception模块


深度学习之基础模型-Inception-V3_第1张图片

将5x5的卷积改为2个3x3的卷积,得到


深度学习之基础模型-Inception-V3_第2张图片

进一步,作者深入讨论了将NxN的卷积,分解成1xN和Nx1的卷积叠加


这里写图片描述

根据这种规则提出了如下结构:


深度学习之基础模型-Inception-V3_第3张图片

  • 将NxN结构分解为1xN和Nx1的叠加,能减少很多计算量。但是不建议在网络的开始阶段使用,效果并不好。但是在中间层使用,能达到不错的效果(中间处于12~20层的结构中)。这种尺度下,7x7的卷积分解成1x7和7x1的卷积后,呆了很好的效果


深度学习之基础模型-Inception-V3_第4张图片

  • 遵循通用构造原则中的第2条,在8x8的特征层上,利用这种分解然后聚合的结构来提升高维度的表达能力

辅助分类器


深度学习之基础模型-Inception-V3_第5张图片

这种做法在GoogLeNet上就已经使用,认为这种辅助分类器,在网络训练过程中扮演着非常重要的角色,能有效的将梯度传播到底层。但是作者发现辅助分类器并没有提升收敛速度,但是却起到了正则化的作用:

  • 如果辅助分类器使用了batch-normalized或者dropout层,最终的分类器效果更好

有效降低特征图尺寸

通常,卷积网络会利用pooling操作来降低特征图的大小。为了避免出现bottleneck现象,在应用Max Pooling或者average pooling之前,可以适当的扩大特征层的维度。


深度学习之基础模型-Inception-V3_第6张图片

  • 如果将 d x d 大小 k 层的特征图,变成 d2 x d2 大小, 2k 层的特征图,我们需要首先计算一个步长为1的2k个卷积核的卷积操作,然后应用传统的pooling操作,即,总共有 2d2k2 个操作。另一种方式是,先进性pooling,在进行卷积操作,此时的计算复杂度为 2(d2)2k2 ,虽然减少了计算量,但是带来另外一个问题,那就是网络出现了bottleneck,表达能力不足。

鉴于,上述的reduction操作,带来的问题,作者考虑了另外一种方式,来降低特征的分辨率。同时并行使用卷积和池化操作,步长为2,然后在把特征进行叠加。如下


深度学习之基础模型-Inception-V3_第7张图片

网络结构


深度学习之基础模型-Inception-V3_第8张图片

图中用到了figure5,6,7中的结构,再次列举如下


深度学习之基础模型-Inception-V3_第9张图片

问题:

  1. 论文的Figure 9和Figure 10中提到的320,是怎么来的??
  2. Table 1中的参数怎么分配和计算的??

label Smoothing

通过标签平滑进行正则化处理,

p(k|x)=exp(zk)Ki=1exp(zk)

对任意的标签 k{1...K} ,其中 zi 表示模型的逻辑输出。

定义交叉熵loss:

l=k=1Klog(p(k))q(k)

其导数为:

lzk=p(k)q(k)

由于标签都是0,1类型,在计算最终的loss的时候, q(k) 相当于一个 δk,y 函数。这个和我们最终想要得到的结果稍微有点出入,我么最终想要的

zyzk, for all ky

这样,我们可以稍微对标签做平滑处理

q(k|x)=(1ϵ)δk,y+ϵu(k)

如果 u(k) 是一个均匀分布,则

q=(1ϵ)δk,y+ϵK

另一种解释:考虑交叉熵,有

H(q,p)=k1Klogp(k)q(k)=(1ϵ)H(q,p)+ϵH(u,p)

H(u,p) 可以写成KL散度的形式

H(u,p)=DKL(u||p)+H(u)

Performance

  • 对比不同的感受野


    深度学习之基础模型-Inception-V3_第10张图片

    • 299x299:步长为2,然后接max pooling
    • 151x151:步长为1,然后接max pooling
    • 79x79:步长为1,没有接max pooling
      三者的参数是相同的,但感受野不同,最终的结果表明感受野越大,效果越好,但是差别不大。但是,如果单纯的根据输入分辨率减少网络的大小,则最终的效果要差很多。
  • 模型的效果


    深度学习之基础模型-Inception-V3_第11张图片


深度学习之基础模型-Inception-V3_第12张图片


深度学习之基础模型-Inception-V3_第13张图片

参考文献

https://arxiv.org/pdf/1512.00567.pdf
http://blog.csdn.net/kangroger/article/details/69218625
http://blog.csdn.net/cv_family_z/article/details/50789805
http://doc.okbase.net/xinzhangyanxiang/archive/213338.html
http://www.cnblogs.com/vincentqliu/p/7467298.html
http://blog.topspeedsnail.com/archives/10919

你可能感兴趣的:(base_model)