【网络中的网络NiN与GoogleNet】

NiN

全连接层的问题

  • 卷积层需要较少的参数

    c

    i

    ×

    c

    o

    ×

    k

    2

    c_itimes c_o times k^2

    ci×co×k2

  • 但卷积层后的第一个全连接层的参数
    • LeNet: 16x5x5x120=48k
    • AlexNet :256x5x5x4096=26M
    • VGG:512x7X7X4096=102M
  • 可以看到参数量的差别主要在于全连接层。NiN的一个重要思想就是想办法来取代全连接层

大量的参数会带来很多问题

  • 占用大量的内存
  • 占用很多的计算带宽(一个很大的矩阵乘法根本不是受限于计算,而是几乎是受限于不断访问内存所带来的限制)
  • 很容易过拟合(某一层的参数过多很容易导致模型收敛特别快,反过来讲,就需要使用大量的正则化避免该层学到所有的东西)

NiN块

  • 一个卷积层后跟两个全连接层
    • 步幅1,无填充,输出形状跟卷积层输出一样
    • 起到全连接层的作用
      在这里插入图片描述
      在这里插入图片描述
      NiN架构
  • 无全连接层
  • 交替使用NiN块和步幅为2的最大池化层
    • 逐步减小高宽和增大通道数
  • 最后使用全局平均池化层得到输出(对每一个通道取平均值)
    • 其输入通道数是类别数

在这里插入图片描述
总结

  • NiN的核心思想是NiN块,NiN块是一个卷积层加上两个1 * 1的卷积层作为全连接层来使用(也就是说对每个像素增加了非线性,或者说对每个像素的通道数做了全连接层,而且是非线性的,因为有两层)
  • NiN使用全局平均池化层(通道数量为所需的输出数量)来替代VGG和AlexNet中的全连接层(全局全连接层因为比较大,所以也不需要学一个比较大的全连接层),这样做的好处是不容易过拟合,显著减少网络参数的数量
  • 整体来讲,NiN的架构比较简单,就是NiN块和最大池化层的重复堆叠,直到最后的全局平均池化层,因为完全放弃了全连接层,所以它的参数个数大大减少了,使得参数的总量与类别数的多少无关
  • NiN的设计影响了许多后续卷积神经网络的设计

GoogLeNet

  从LeNet到NiN,每个模型都有着各自的特点
在这里插入图片描述
  但是有这么多选择,我们到底应该如何选择?

Inception块:我全都要

4个路径从不同层面抽取信息,然后在输出通道维合并
在这里插入图片描述

  • 第一条路先进入一个1 *1的卷积层再输出
  • 第二条路先通过一个1 * 1的卷积层对通道做变换,再通过一个pad为1的3 * 3的卷积层,使得输入和输出的高宽相同
  • 第三条路先通过一个1 * 1的卷积层对通道数做变换,不改变高宽,但是再通过一个pad为2的5 * 5的卷积层提取空间信息特征,输入和输出还是等高等宽的
  • 第四条路先通过一个pad为1的3 * 3的最大池化层,再通过一个1 * 1的卷积层

以上四种方式都没有改变输入的高和宽,因此对于Concatention操作我们只需要将其在通道数上做合并,因此输出只改变了输入的通道数

在这里插入图片描述

  • 先确定总的输出通道数
  • 对于认为比较重要的方向,尽可能给他分多的通道数
  • 对于相对没那么重要的方向可以少分一点通道数
  • 具体数值的设计可能就需要“炼丹”来确定了

为什么要用Inception块

  • 跟单3x3或5x5卷积层比,Inception块有更少的参数个数和计算复杂度
    在这里插入图片描述

GoogLeNet架构

在这里插入图片描述

  • 一共分为5各阶段,使用了9个Inception块

  • 最后使用了全局AvgPooling代替了全连接层

  • Stage1&2(更小的宽口。可以支撑模型走得更深)
    在这里插入图片描述

  • Stage3
    在这里插入图片描述

  • Stage4&5
    在这里插入图片描述

Inception的变种

  • Inception-BN(v2)-使用batch normalization
  • Inception-V3-修改了Inception:块
    • 替换5x5为多个3x3卷积层
    • 替换5x5为1x7和7x1卷积层
    • 替换3x3为1x3和3x1卷积层
    • 更深
  • Inception-V4-使用残差连接
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    总结
  • Inception:块用4条有不同超参数的卷积层和池化层的路来抽取不同的信息
    • 它的一个主要优点是模型参数小,计算复杂度低
  • GoogleNet使用了9个Inception块,是第一个达到上百层的网络
    • 后续有一系列改进
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>