当前位置: 代码迷 >> 综合 >> 【论文】GoogleNet Inception V1
  详细解决方案

【论文】GoogleNet Inception V1

热度:29   发布时间:2023-12-13 03:46:07.0

【论文】Szegedy C , Liu W , Jia Y , et al. Going Deeper with Convolutions[J]. 2014.(pdf)

【新颖点】

  • 保证算力的情况下增加宽度和深度
  • 宽度:利用 Inception 结构同时执行多个网络结构
  • 深度:利用辅助分类器防止梯度消失

Inception V1

我们先说一下为什么要提出 Inception

在早期,大家都尽可能的想加深加宽网络,但是一味的增加还是有很多问题:

  • 参数越多,计算复杂复杂度越大
  • 网络越深,越容易出现梯度弥散的问题

于是,Google 研究人员提出了 Inception 的方法——将多个卷积或池化操作放在一起组装成一个网络模块,设计神经网络时以模块为单位去组装整个网络。Inception 的主要思路是怎样用密集成分来近似最优的局部稀疏结构,于是作者首先提出了如下图所示的基本结构

在这里插入图片描述

  1. 采用不同带下的卷积核意味着不同大小的感受野,最后通过拼接将不同程度的特征进行融合
  2. 卷积核采用 1、3 和 5,主要是为了方便对齐。设定卷积步长为 1 之后只要分别设定 padding 为 0、1、2 就好了,卷积之后便可以得到相同维度的特征
  3. 介于 pooling 的表项不错,Inception 中嵌入了对应的模块
  4. 网络越往后走,特征越家抽象,而且每个特征所设计的感受野也更大了,因此随着层数的增加,3×33\times33×35×55\times55×5 卷积核的比例也要增加

但是这种叠加不可避免的使得 Inception 模块的输出通道数增加,这就增加了 Inception 模块中每个卷积的计算量,尤其达到网络的后面。为此,作者采用了 1×11\times11×1 卷积核来进行降维,改进后的 Inception 模块如下

在这里插入图片描述
值得注意的是 1×11\times11×1 卷积的位置

  • 1×11\times11×1 卷积是在最大池化层之后,而不是之前,因为池化层是为了提取图像的原始特征而存在,一旦它接在 1×11\times11×1 卷积之后就失去了最初的本意
  • 对于 3×33\times33×35×55\times55×5 卷积,1×11\times11×1 卷积在他们之后,原因是如果反过来则起不到降维的作用

网络结构

Inception V1 是一个 22 层的深度网络,如果考虑池化层的话是 29 层。网络具有三组 Inception 模块,分别为

  • inception(3a) / inception(3b)
  • inception(4a) / inception(4b) / inception(4c) / inception(4d) / inception(4e)
  • inception(5a) / inception(5b)

三组 Inception 模块被池化层分隔
在这里插入图片描述
关于整个网络结构,我们给出下面几点说明,

  • 网络最后采用了 average pooling 来替代全连接层,该想法来自 NIN,事实证明这样可以提高 0.6% 的准确率
  • 虽然移除了尾部过多的全连接层,但是网络中依然使用了 Dropout(在 avg pooling 之后,FC 之前)
  • 为了缓解梯度消失的问题,网络额外增加了 2 个辅助的 softmax 分类器用于向前传导梯度,我们将这两个称为辅助分类器。辅助分类器是将中间某一层的输出用作分类,并按一个较小的权重(0.3)加到最终分类器中,这样就相当于做了模型融合,同时给网络增加了反向传播的梯度信号

在这里插入图片描述

我们以 inception(3a) 为例子解释一下网络的参数

在这里插入图片描述

辅助分类器

在 inception(4a) 和 inception(4d) 之后分别有两个辅助分类器,它们具有相同的结构:

  • 5×55\times55×5、步长为 333 的平均池化层
  • 1×11\times11×1、输出通道为 128128128 的卷积层
  • 102410241024 个神经元的全连接层
  • 70%70\%70% Dropout 的全连接层
  • softmax 层

在训练期间,两个辅助分类器的损失函数的权重是 0.3,它们的损失被叠加到网络的整体损失上。在测试时,这两个辅助分类器丢弃不用

  相关解决方案