卷积神经网络的一些经典网络2(Inception)

在架构内容设计方面,其中一个比较有帮助的想法是使用1x1卷积。1x1卷积能做什么?

         对于6x6x1的通道的图片来说,1x1卷积效果不佳,如果是一张6x6x32的图片,那么使用1x1卷积核进行卷积效果更好。

         1x1卷积所实现的功能是,遍历36(6x6)个单元,计算左图中32个数字和卷积核中32个数字的乘积(element wise),然后应用于ReLU非线性函数。

这种方法称为1x1卷积,有时候也被称为Network in Network

  我们可以用池化层压缩输入的高度与宽度,而1x1卷积可以改变输入的通道数。

  每个卷积核的大小是1x1x192(卷积核的通道数与输入层的通道数一致),总共32个卷积核

 

1x1卷积作用:

1)  改变输入的通道数

2)  为网络添加非线性函数(卷积之后会经过ReLU等非线性激活函数),使得网络可以学习更复杂的函数

3)  若减少输入通道数,可以减少参数数量

Inception网络

         构建卷积层时,你要决定过滤器的大小究竟是1x3,3x3或者5x5,或者要不要添加池化层。而Inception网络的作用就是代替你做决定,虽然网络变得更大更复杂,但是网络的表现却非常好。

         Inception的作用是,代替人工来确定卷积层中过滤器的类型,或者确定是否需要创建卷积层或池化层。

         下图中,如果使用1x1卷积,那么输出为28x28x64;如果使用3x3的卷积核,那么输出是28x28x128,然后把第二个堆积到第一个值上,为了匹配维度,我们在做3x3卷积时使用的padding应该使用same;然后再使用5x5卷积核,仍然将结果堆叠到前面两个值中;也有可能你不想要卷积层,那就用池化层,得到一些不同的输出结果,我们也把它堆叠起来,这里的池化输出是28x28x32,为了匹配维度,我们需要对最大池化使用padding=same,stride=1。叠加之后的结果是32+32+128+64=256通道。即Inception模块的输入数28x28x192,输出是28x28x256,这就是Inception网络的核心内容。

         基本思想是Inception网络不需要人为决定使用哪个fliter,或者是否需要池化,而是由网络自行确定(学习)这些参数,自行学习是否使用这些fliter或者池化。

 

  我们把重点集中在5x5卷积核中。我们现在计算一下5x5的计算成本。由于输出大小是28x28x32,所以要计算28x28x32个数字,对于每个数字来说,都要执行5x5x192次乘法运算,所以乘法运算的总次数为28x28x32 x 5x5x192 ≈1.2亿,这个计算成本是非常高的。

 

         先使用1x1卷积把输入值从192通道减少到16个通道,然后对这个较小层,运行5x5卷积,得到最终输出。这种方法,输入输出的维度与上面的只用5x5卷积相同。但我们要做的就是把左边的这个大的输入层压缩成这个较小的中间层,它只有16个通道,而不是192个通道,这个有时候被称为瓶颈层(bottleneck layer,瓶颈通常是某个对象最小的部分。

 

  我们现在来看看这个计算成本。应用1x1卷积,卷积核个数为16个,每个卷积核的大小为1x1x192,在28x28x16这个层的计算成本是,输出28x28x16中的每个元素都做192(1x1x192)次乘法,即28x28x16x192≈240万;对于第二个卷积层,它的输出是28x28x32,对于每个输出值,都应用一个5x5x16维度的卷积核,即28x28x32x5x5x16=1000万;两次卷积运算总共所需的次数是240万+1000万=1240万,与上面只用5x5卷积运算的相比,计算成本从1.2亿降到了约原来的十分之一,即1240万;由于所需的加法运算与乘法次数近似相等,故只统计了乘法运算的次数。

         总结来说,如果你在构建神经网络层的时候,不想决定使用1x1或3x3或5x5卷积核或池化层时,那么Inception模块就是最好的选择,我们可以应用各种类型的卷积核或者池化层,只需把它们的输出连接起来就行。而使用1x1卷积来构建bottleneck layer,可以大大降低计算成本。事实证明,只要合理构建bottleneck layer,我们既可以显著缩小表示层的规模,又不会降低网络性能。

Inception模块如下图所示:

 

需要说明的有:

1)在使用3x3和5x5卷积时,先进行1x1卷积,来缩小输入的通道数,使得可以减少计算量。

2)在使用Max Pool时,设置的参数是3x3,padding=same,stride=1,此时输出大小与输入大小相同,都是28x28x192,为了减少通道数,我们在其后面再加一个1x1卷积,使得缩小到28x28x32,这样避免了最后输出时池化层占据了过多的通道。

3)最后将每个模块(1x1卷积、3x3卷积、5x5卷积和最大池化)的结果连接到一起

  下图是Inception网络(称为GoogLeNet)的结果,可以看出,网络其实就是Inception模块的组合,其中有些Inception模块中间的最大池化模块的作用是改变输入的宽度和高度。另外论文中,网络还有一些分支,这些分支所做的就是通过隐藏层来做出预测,它确保了即使是隐藏单元和中间层,也参与了特征计算,它们也能预测出图片的分类,它们在Inception网络中起到起到一种调整的效果,并能防止网络发生过拟合

 

内容主要来自与:

Andrew Ng的卷积神经网络课程

原文地址:https://www.cnblogs.com/hejunlin1992/p/8449494.html