DeepLearning-L7-GoogLeNet


2014年,谷歌的Szegedy等人在《Going deeper with convolutions》提出GoogLeNet(据说是为了致敬“LeNet)。

1. Inception

一般来说,提升网络性能最直接的办法就是增加网络深度和宽度,深度指网络层次数量、宽度指神经元数量。但这种方式存在以下问题:

  • 参数太多,如果训练数据集有限,很容易产生过拟合;
  • 参数越多,计算复杂度高;
  • 网络越深,容易出现梯度消失,难以优化模型。

解决这些问题的方法就是在增加网络深度和宽度的同时减少参数,为了减少参数,自然就想到将全连接变成稀疏连接。但全连接变成稀疏连接后实际计算效率并不会有质的提升,因为大部分硬件是针对密集矩阵计算优化的,稀疏矩阵虽然数据量少,但是计算所消耗的时间却很难减少。

可将稀疏矩阵聚类为较为密集的子矩阵来提高计算性能,如人类的大脑可看做是神经元的重复堆积,因此,GoogLeNet团队提出了Inception网络结构,构造一种“基础神经元”结构,既保持网络结构的稀疏性,又不降低模型的计算性能。Inception结构对前一层网络的综合采用不同大小的卷积核提取特征,并结合最大化池化进行特征融合。

原始Inception结构

该结构将CNN中常用的卷积( 1 × 1 1 \times 1 3 × 3 3 \times 3 5 × 5 5 \times 5 )、池化操作( 3 × 3 3 \times 3 )堆叠在一起(卷积、池化后的尺寸相同,将通道相加),一方面增加了网络的宽度,另一方面也增加了网络对尺度的适应性。

网络卷积层中的网络能够提取输入的每一个细节信息,同时 5 × 5 5 \times 5 的滤波器也能够覆盖大部分接受层的的输入。还可以进行一个池化操作,以减少空间大小,降低过度拟合。在这些层之上,在每一个卷积层后都要做一个ReLU操作,以增加网络的非线性特征。

Inception v1的网络结构

假设网络输入 28 × 28 × 192 28 \times 28 \times 192

  • 使用32个 5 × 5 × 192 5 \times 5 \times 192 的卷积核,输出为 28 × 28 × 32 28 \times 28 \times 32 ,计算量为 5 × 5 × 192 × 28 × 28 × 32 = 120 , 422 , 400 5 \times 5 \times 192 \times 28 \times 28 \times 32 = 120,422,400

  • 使用 1 × 1 1 \times 1 卷积:先用16个 1 × 1 × 192 1 \times 1 \times 192 的卷积核,输出为 28 × 28 × 16 28 \times 28 \times 16 ,再用32个 5 × 5 × 16 5 \times 5 \times 16 的卷积核,输出为 28 × 28 × 32 28 \times 28 \times 32

    • 第一次计算量为 1 × 1 × 192 × 28 × 28 × 16 = 2 , 408 , 448 1 \times 1 \times 192 \times 28 \times 28 \times 16 = 2,408,448
    • 第二次计算量为 5 × 5 × 16 × 28 × 28 × 32 = 10 , 035 , 200 5 \times 5 \times 16 \times 28 \times 28 \times 32 = 10,035,200
    • 总计算量为 12 , 443 , 648 12,443,648 ,计算量大大减低。

2. 网络结构

GoogLeNet采用了模块化的结构(Inception结构),方便增添和修改。网络最后采用了average pooling(平均池化)来代替全连接层(虽然移除了全连接,但是网络中依然使用了Dropout ),该想法来自NIN(Network in Network),事实证明这样可以将准确率提高0.6%。实际在后还是加了一个全连接层,主要是为了方便对输出进行灵活调整。

为了避免梯度消失,网络额外增加了2个辅助的softmax用于向前传导梯度(辅助分类器)。辅助分类器是将中间某一层的输出用作分类,并按一个较小的权重(0.3)加到最终分类结果中,这样相当于做了模型融合,同时给网络增加了反向传播的梯度信号,也提供了额外的正则化,对于整个网络的训练很有裨益。而在实际测试的时候,这两个额外的softmax会被去掉。

各层输入输出及参数数量如下(表中“#3x3 reduce”,“#5x5 reduce”表示在 3 × 3 3 \times 3 5 × 5 5 \times 5 卷积操作之前使用了 1 × 1 1 \times 1 卷积的数量。):

2014至2016年,GoogLeNet团队发表了多篇关于GoogLeNet的经典论文《Going deeper with convolutions》、《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》、《Rethinking the Inception Architecture for Computer Vision》、《Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning》。

  • Inception V2修改Inception的内部计算逻辑,提出了比较特殊的“卷积”计算结构。
  • Inception V3一个最重要的改进是分解(Factorization),将 7 × 7 7 \times 7 分解成两个一维的卷积( 1 × 7 , 7 × 1 1 \times 7,7 \times 1 ), 3 × 3 3 \times 3 也是一样( 1 × 3 , 3 × 1 1 \times 3,3 \times 1 ),这样的好处,既可以加速计算,又可以将1个卷积拆成2个卷积,使得网络深度进一步增加,增加了网络的非线性(每增加一层都要进行ReLU)。另外,网络输入从 224 × 224 224 \times 224 变为了 299 × 299 299 \times 299
  • Inception V4主要利用残差连接(Residual Connection)来改进V3结构。

猜你喜欢

转载自blog.csdn.net/apr15/article/details/106451990