【深度学习】经典卷积神经网络(五)GoogLeNet

介绍

GoogLeNet是2014年ImageNet的冠军,亚军是著名的VGG。两类模型共同的特点是更深了。VGG继承了AlexNet的很多思想,而GoogLeNet在结构上则有了大胆的尝试。虽然深度增加了,但其参数量只是AlexNet的十二分之一,而性能上却更加优越。GoogLeNet提出了Inception结构,有4个版本,不断趋于完善,其主要思想是分治与因式分解。
一般来说,提升网络效果的方式是增加网络深度和宽度,但这样很容易因为数据有限而出现过拟合、计算复杂度过大以及梯度消失等现象,所以需要减少参数。既要保持网络的稀疏性又能提高计算性能,就有了Inception结构。
论文地址如下:
[v1] Going Deeper with Convolutions, 6.67% test error, http://arxiv.org/abs/1409.4842
[v2] Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift, 4.8% test error, http://arxiv.org/abs/1502.03167
[v3] Rethinking the Inception Architecture for Computer Vision, 3.5% test error, http://arxiv.org/abs/1512.00567
[v4] Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning, 3.08% test error, http://arxiv.org/abs/1602.07261

结构

Inception v1

【深度学习】经典卷积神经网络(五)GoogLeNet_第1张图片
从Inception v1首先可以介绍一下分治的思想。可以看到,同样是一层,但有四种处理方法,最后将它们合并起来。
【深度学习】经典卷积神经网络(五)GoogLeNet_第2张图片
而一层中的某一个分支还可以串联多个层。这里涉及一个概念叫做bottle neck,即先用1 × 1卷积然后再用3 × 3卷积等等操作。1 × 1卷积的作用是为了降低通道数,而后的面层进行卷积,例如从256个通道数通过“瓶颈”到64,然后3 × 3的卷积层,从64到64,相当于把通道数改变与卷积分开了。这样做的好处是可以大大降低参数量,但效果并没有受到很大的影响,这也是Inception降低参数量的重要方法。其实bottle neck也有因式分解的思想。
【深度学习】经典卷积神经网络(五)GoogLeNet_第3张图片
基于Inception的GoogLeNet有22层,里面有多个Inception结构,为了防止梯度消失还额外增加了两个辅助的softmax。还有就是使用了平均池化替代全连接层,思想来自于NIN(Network in Network)。

Inception v2

【深度学习】经典卷积神经网络(五)GoogLeNet_第4张图片
因式分解比如类似于VGG中介绍的,5 × 5分解为两个3 × 3,最终效果基本一致,但参数量可以减小,计算复杂性可以降低。
【深度学习】经典卷积神经网络(五)GoogLeNet_第5张图片
这里还要提一点,为了降低特征图大小,如果先池化再Inception卷积会出现特征缺失,反之计算量又很大,最终将两者并行。
【深度学习】经典卷积神经网络(五)GoogLeNet_第6张图片
基于Inception v2,有了改进版的GoogLeNet,效果也有了较大的提升:
【深度学习】经典卷积神经网络(五)GoogLeNet_第7张图片

Inception v3

【深度学习】经典卷积神经网络(五)GoogLeNet_第8张图片
这种因式分解的思想可以更进一步,3 × 3可以用一个1 × 3和3 × 1去近似,参数量缩小为2 / 3。即 n × n可以近似为1 × n和n × 1。比如5 × 5可以用1 × 3 + 3 × 1 + 1 × 3 + 3 × 1。如果对效果影响不大,完全可以用来缩小计算量。
【深度学习】经典卷积神经网络(五)GoogLeNet_第9张图片

Inception v4

【深度学习】经典卷积神经网络(五)GoogLeNet_第10张图片
【深度学习】经典卷积神经网络(五)GoogLeNet_第11张图片
Inception v4研究了Inception模块与残差连接的结合。ResNet结构大大地加深了网络深度,还极大地提升了训练速度,同时性能也有提升。
【深度学习】经典卷积神经网络(五)GoogLeNet_第12张图片
v4提供了很多标准模块,将分治和因式分解合并起来,综合各项技术。因为模块的设计经过了大量的尝试,所以很多应用可以直接使用,当然也可以借鉴其中的思想设计自己的模块。

思考

Inception结构经过了几年的发展已经较为成熟,从朴素的AlexNet有了很多提升效果的trick,结构改进也比较激进。v4版本中还结合了ResNet的思路。由于大大减少了参数量,其模型又可以更深,这里总结一下里的一些主要思想:

  • 分治,将一些操作并行,例如池化与卷积(可以在预防数据缺失的情况下减少计算量),或者很多不同类型的卷积(核心思想)
  • bottle neck,通过1×1卷积缩小参数量(v1起就有)
  • 因式分解,将某个卷积层分解为等价的多层以在效果允许的情况下缩小参数量(v2与v3介绍了多种分解方式,同样是其核心思想)
  • 结合残差结构(v4)

另外一些小的trick不是特别普遍,仅供参考,比如avg pool替换fc和辅助softmax(也可以看做一种分治,最后再结合)。

参考资料

https://blog.csdn.net/cdknight_happy/article/details/79247280
https://my.oschina.net/u/876354/blog/1637819

你可能感兴趣的:(深度学习,人工智能,深度学习,卷积神经网络,计算机视觉,神经网络)