GoogleNet------超经典神经网络结构解读
在上文中详细介绍了经典神经网络 VGGNet,但是同年获得ImageNet冠军分类任务的是GoogleNet。GoogleNet相比VGGNet,网络结构更深,其拥有22层(一说为27层,此时应该包括了池化操作)。GoogleNet虽然比VGGNet网络结构深,但是参数相对要少很多,具体下文进行介绍与说明。
GoogleNet网络结构
GoogleNet的网络结果从感觉上确实是比VGGNet繁琐很多,具体如下图所示:
Inception模块
单从上面的网络结构并不能很好的看懂GoogleNet的高明之处,但是如果将其拆分则很容易明白其设计思想。其实,GoogleNet的核心思想就是Inception模块。整个网络实际上就是Inception模块的叠加与应用。Inception模块具体如下所示:
GoogleNet主要有两个贡献:1)使用1x1的卷积结构;2)在多个尺度上并行卷积然后再组合在一起。
1.1、1x1卷积结构解析
1x1的卷积结构主要有两个作用,第一是提取更丰富的特征;第二是可以进行降维运算,降低计算的复杂度。这也是1x1的卷积结构提出后受到追捧的主要原因,当然,最先提出1x1卷积结构的应该是NiN网络,感兴趣的同学可以去查一下。
1.1.1、提取更丰富的特征
众所周知,一般进行卷积操作后都会连接激活函数以便于得到非线性的特征。传统方法如果采用3x3卷积+ReLU的结构,将会逐步拟合非线性函数F1,但是如果将3x3卷积+ReLU的结构中串联一个1x1卷积就可以得到更多的非线性特征。
1.1.2、降低计算复杂度
使用1x1卷积进行降维,降低了计算复杂度。举个例子来说明这个问题将更为直观,例如输入为64通道的24x24的特征图,用3x3卷积操作输出为24x24大小的256通道特征,那么其计算复杂度为:64x3x3x24x24x256=84934656;那么如果在输入后使用1x1卷积将64通道降为32,在进行3x3卷积恢复出256组特征,那么他的复杂度为:64x1x1x24x24x32+32x3x3x24x24x256 = 43646976。与以上相比,使用1x1卷积计算复杂度大概可以节省一半的计算量,而且中间降维的操作不会影响到最终的训练结果。
1.2、多个尺度上并行卷积然后再组合
如图2所示,Inception有4各分支,每个分支的卷积或是池化的尺度均不相同,最后将4个分支组合到一起。在多个尺度上同时进行卷积可以提取到不同尺度的特征,组合之后可以想象一下,其包含的特征更为丰富,当然理论上分类效果也更好。当然5x5的卷积计算量较大,因此也有了后面对其的改进,即使用两个3x3来代替。