DeepLearning-L7-GoogLeNet

GoogLeNet

  • 1. Inception
  • 2. 网络结构

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

1. Inception

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

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

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

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

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

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

Inception v1的网络结构
DeepLearning-L7-GoogLeNet_第2张图片
假设网络输入 28 × 28 × 192 28 \times 28 \times 192 28×28×192

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

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

    • 第一次计算量为 1 × 1 × 192 × 28 × 28 × 16 = 2 , 408 , 448 1 \times 1 \times 192 \times 28 \times 28 \times 16 = 2,408,448 1×1×192×28×28×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 5×5×16×28×28×32=10,035,200
    • 总计算量为 12 , 443 , 648 12,443,648 12,443,648,计算量大大减低。

2. 网络结构

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

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

各层输入输出及参数数量如下(表中“#3x3 reduce”,“#5x5 reduce”表示在 3 × 3 3 \times 3 3×3 5 × 5 5 \times 5 5×5卷积操作之前使用了 1 × 1 1 \times 1 1×1卷积的数量。):
DeepLearning-L7-GoogLeNet_第4张图片
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 7×7分解成两个一维的卷积( 1 × 7 , 7 × 1 1 \times 7,7 \times 1 1×7,7×1), 3 × 3 3 \times 3 3×3也是一样( 1 × 3 , 3 × 1 1 \times 3,3 \times 1 1×3,3×1),这样的好处,既可以加速计算,又可以将1个卷积拆成2个卷积,使得网络深度进一步增加,增加了网络的非线性(每增加一层都要进行ReLU)。另外,网络输入从 224 × 224 224 \times 224 224×224变为了 299 × 299 299 \times 299 299×299
  • Inception V4主要利用残差连接(Residual Connection)来改进V3结构。

你可能感兴趣的:(#,深度学习,深度学习,卷积神经网络)