CNN 经典模型——GoogleNet从入门到入门

主要目标

1.提出了一种名为 Inception 的网络结构
2.这种结构解决了计算机硬件和稀疏结构之间的矛盾

相关工作

  1. 卷积神经网络(CNN)大多都用了类似于LeNet-5的标准结构,即堆叠几个卷积层,之后是池化层,最后再连接一个或多个全连接层。 下面的文章解决了maxpooling导致的空间信息丢失问题。A. Krizhevsky, I. Sutskever, and G. Hinton. Imagenet classification with deep convolutional neural networks. InAdvancesinNeuralInformationProcessing Systems 25, pages 1106–1114, 2012.
  2. 在Network-in-Network中添加了很多1×1卷积,这篇文章中也大量使用这种方法。1×1卷积有两个作用:
    1.增加网络的深度
    2.另外一个关键作用是用作降维模块来减少计算量,这样做的好处是,由于可以将上一层的卷积结果用1×1卷积降维,减少了计算量,就能够保证网络的深度。
  3. 目标检测的流程采用了R-CNN相同的方法。

动机和高层思考

作者设计该网络的出发点是,人们总是通过加深加宽神经网络来提高神经网络的能力,这种方法有着两个比较大的缺陷。一个是加深网络意味着更多的参数,参数过多会导致结果过拟合,另外一个缺点是加深网络就需要用到更多的计算资源,而且由于很多权重值其实并没有作用(值为0),所以直接加深加宽网络会导致计算资源的浪费。
因此要想解决这种问题的解决方案为引入稀疏性,将全连接层换成较为稀疏的全连接层甚至在卷积层中也这么做。
然而实际上使用稀疏连接后并不会从本质上解决计算量过大的问题,因为大部分的硬件的设计都是为了解决密集矩阵计算的,稀疏矩阵的数量虽然少,但其计算所消耗的时间并不会减少很多。
因此亟需解决的问题就是:如何即要使用稀疏矩阵,又要利用现有硬件针对密集矩阵的计算能力,而解决的办法就是Inception。

Inception网络构建细节

构建网络的主要思想:使一些卷积核聚集成一个簇,进而优化稀疏矩阵的计算(意思大概是把一堆稀疏矩阵聚在一起近似成了密集矩阵,这样的矩阵更加适合硬件计算)。于是就有了以下结构:
在这里插入图片描述其中卷积核的尺寸并不是一定的,但上述结构有着严重的问题,就是3×3和5×5卷积占用的计算资源很大(因为如果不对3×3和5×5的卷积和进行处理,随着网络的加深,每一个簇汇聚形成的结果的维度会越来越大,最后造成计算资源不够,就是文中提到的computational blow up),为了解决这个问题,作者对上述结构进行了改进。
改进的点就是那些1×1的卷积层,这些1×1的卷积层输出维数会比上一层要少,这样经过tf.concat(汇聚:就是把几个卷积核的卷积结果拼接在一起)以后,结果的维数会比之前降低很多。这些1×1的卷积层还能增加网络的非线性程度。
关于 Iception 为什么能够提高精度,一种可能的解释是由于网络中有不同尺度的卷积核,可以学习到更多不同的特征,并且通过汇聚把这些特征传递到下一层,从而实现全方位的学习。
在这里插入图片描述由于这些“Inception 模块”在每个模型的顶部堆叠,其输出相关性统计必然有变化:由于较高层会捕获较高的抽象特征,其空间集中度预计会减少。这表明随着转移到更高层,3×3 和 5×5 卷积的比例应该会增加。

GoogleNet

在这里插入图片描述其中“#3x3 reduce”,“#5x5 reduce”代表在3x3,5x5卷积操作之前使用1x1卷积的数量。输入图像为224x224x3,且都进行了零均值化的预处理操作,所有降维层也都是用了ReLU非线性激活函数。

网络结构

0、输入
原始输入图像为224x224x3,且都进行了零均值化的预处理操作(图像每个像素减去均值)。
1、第一层(卷积层)
使用7x7的卷积核(滑动步长2,padding为3),64通道,输出为112x112x64,卷积后进行ReLU操作
经过3x3的max pooling(步长为2),输出为((112 - 3+1)/2)+1=56,即56x56x64,再进行ReLU操作
2、第二层(卷积层)
使用3x3的卷积核(滑动步长为1,padding为1),192通道,输出为56x56x192,卷积后进行ReLU操作
经过3x3的max pooling(步长为2),输出为((56 - 3+1)/2)+1=28,即28x28x192,再进行ReLU操作
3a第三层(Inception 3a层)
分为四个分支,采用不同尺度的卷积核来进行处理
(1)64个1x1的卷积核,然后RuLU,输出28x28x64
(2)96个1x1的卷积核,作为3x3卷积核之前的降维,变成28x28x96,然后进行ReLU计算,再进行128个3x3的卷积(padding为1),输出28x28x128
(3)16个1x1的卷积核,作为5x5卷积核之前的降维,变成28x28x16,进行ReLU计算后,再进行32个5x5的卷积(padding为2),输出28x28x32
(4)pool层,使用3x3的核(padding为1),输出28x28x192,然后进行32个1x1的卷积,输出28x28x32。
将四个结果进行连接,对这四部分输出结果的第三维并联,即64+128+32+32=256,最终输出28x28x256
3b、第三层(Inception 3b层)
(1)128个1x1的卷积核,然后RuLU,输出28x28x128
(2)128个1x1的卷积核,作为3x3卷积核之前的降维,变成28x28x128,进行ReLU,再进行192个3x3的卷积(padding为1),输出28x28x192
(3)32个1x1的卷积核,作为5x5卷积核之前的降维,变成28x28x32,进行ReLU计算后,再进行96个5x5的卷积(padding为2),输出28x28x96
(4)pool层,使用3x3的核(padding为1),输出28x28x256,然后进行64个1x1的卷积,输出28x28x64。
将四个结果进行连接,对这四部分输出结果的第三维并联,即128+192+96+64=480,最终输出输出为28x28x480

第四层(4a,4b,4c,4d,4e)、第五层(5a,5b)……,与3a、3b类似,在此就不再重复。

完整的GoogLeNet 网络结构图:
在这里插入图片描述如上图用到了辅助分类器,Inception Net有22层深,除了最后一层的输出,其中间节点的分类效果也很好。因此在Inception Net中,还使用到了辅助分类节点(auxiliary classifiers),即将中间某一层的输出用作分类,并按一个较小的权重(0.3)加到最终分类结果中。这样相当于做了模型融合,同时给网络增加了反向传播的梯度信号,也提供了额外的正则化,对于整个Inception Net的训练很有裨益。
LocalRespNorm为局部相应归一化。

具体结构

一个滤波器大小 5×5,步长为 3 的平均池化层,(4a)阶段结 果输出为 4×4×512,(4d)阶段结果输出为 4×4×528。
具有 128 个滤波器的 1×1 卷积,用于降维和修正线性激活。
一个具有 1024 个单元和修正线性激活的全连接层,。
丢弃率为70%的 dropout 层。
使用带有 softmax 损失的线性层作为分类器(作为主分类器预测同样的 1000 类,但在推断时移除)。

训练方法

GoogleNet使用DistBelief分布式机器学习系统进行训练, 该系统使用适量的模型和数据并行化。
利用分布式机器学习系统和数据并行来训练网络,虽然实现时只用了 CPU,但是是可以用个别高端的GPU一周达到收敛的。采用异 步随机梯度下降,动量为 0.9,学习率每 8 个 epoch 下降4%。用 Polyak 平均来创建最后的模型。图像采样的patch大小从图像的8%到100%, 选取的长宽比在 3/4 到 4/3 之间,光度扭曲也有利于减少过拟合,还 使用随机插值方法结合其他超参数的改变来调整图像大小。

总结

这篇文章的贡献是证明了稀疏结构组成的簇,可以在充分利用计算资源的前提下提高网络结构的质量,并减小其宽度。本文中也有未解决的问题——梯度消失问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值