深度学习经典神经网络GoogLeNet阅读笔记

前言

GoogLeNet是2014年提出的深度学习网络,此前LeNet, AlexNet等都通过卷积层取得了比较好的训练效果,但是这种卷积层的堆叠会带来梯度爆炸,梯度消失,过拟合等负作用。GoogLeNet受到动物视觉神经元细胞的启发以及Network-In-Network的启发提出Inception结构。而整个GoogLeNet的结构也严重依赖于Inception,GoogLeNet的参数有500万个,AlexNet的参数是GoogLeNet参数的12倍。但是GoogLeNet的效果是优于AlexNet的效果的。下图分别是AlexNet Top-5Error,GoogLeNet的Top-5 Error,我们会在结尾给出。
AlexNet Top-5 Error

Inception

GoogLeNet的核心是Inception,什么是Inception呢,Inception V1.0的结构如下图所示
Inception v1.0
Inception模块将常见的卷积(1 * 1, 3 * 3, 5 * 5)和池化操作堆叠在一起,通过增加padding使其尺寸相同,堆叠在顶层。一方面增加了滤波器的数量,增加网络的宽度,另一方面也增加了网络对尺寸的适应性。但是如果在顶层进行池化操作那么代价是非常大的。因此Inceptionv2.0提出了,结构如下图所示:
Inception 模块

1*1 卷积

可以看到这里有多个1*1的卷积块,这些卷积块有什么作用呢?这个卷积块的概念来自于Network-In-Network(NIN), 这里我们大概介绍一下。

  • NIN
    NIN
    左侧是传统的卷积层结构,将一个感受野的的区域经过卷积核映射到一个像素点上,感受野和卷积核就是矩阵相乘,就是一个线性的映射。右侧对卷积核和像素点之间加了一层全连接的网络这样一个卷积核和像素点之间就不是线性的映射了,而是有了非线性的转换,这样就等于增加了很多非线性的组合。这样相当于可以提取到更加丰富的特征。这样一层一层的全连接网络就相当于是一个1 * 1的卷积核。这里我们大概解释一下是怎么映射的。下图是一个感受野映射到一个像素点的图(一对多,多对多的以此类推,图太多了,不想画了),可以看到在第一层网络中,激活函数之前也是类似于传统卷积操作的线性组合,但是激活函数之后就是一个非线性的操作了,由于这有多层网络所以等于说一次卷积进行了多次线性组合,可以提取更多的特征,个人理解类似于GBDT+LR的特征组合吧。
    在这里插入图片描述
    因此我们使用11卷积核的第一个原因就是多一次非线性组合的操作可以提取更多的特征。
    使用1
    1卷积核的第二个原因是降低运算量。还是以Inception1.0和Inception2.0举例

    • Inception1.0: 32 * 32 192组特征经过3 * 3的卷积核映射为32 * 32 256组特征需要经过192 * 3 * 3 * 32 * 32 * 256=452984832次计算
    • Inception2.0: 32 * 32 192组特征经过1 * 1* 的卷积核映射为32 * 32 96组特征再经过3*3卷积核映射为32 * 32 256组特征,需要经过192 * 32 * 32 * 1 * 1 * 96 + 96 * 3 * 3 * 32 * 32 * 256=245366784次操作。
      在这里插入图片描述

经过1*1卷积核的引入我们大大降低了计算量,这也是为什么GoogLeNet的参数比AlexNet参数少的原因。

上层拼接

Inception结构从输入到输出使用了多个卷积核进行特征提取,然后在上层把结果拼接起来,这样的第一个好处是可以有效提取不同尺度的特征,特征丰富也意味着最后判断会更加准确;第二个好处是将稀疏的矩阵通过特征和进行压缩成为稠密矩阵可以提高计算的速度,同时这也受到了视觉细胞处理图像时候的启发,我们会处理不同规模的特征然后将这些特征整合在一起再同时提取特征。
读到这里的感觉就是神经网络就是玄学以及一本正经的胡说八道,但是想着是不是万物从根本上都是互相借鉴的呢?最后所有的科学都会回归到哲学上呢,当然扯远了。

网络结构

GoogLeNet共有22层,最后为了降低计算的复杂度使用了average-pooling层替代了全连接层,不过论文最后还是用了全连接层方便对模型进行微调。而且根据实验显示average-pooling相比于全连接层可以将标签的分类准确率提升0.6%。
为了防止网络层级过多导致梯度下降的过程中梯度消失的问题,工作人员在实验过程中发现中间网络部分的输出结果也是很有区分性的,可能准确率不及整个模型,为了解决这个问题在网络的中间和相对较低的部分增加了两个辅助分类器。辅助分类器结构完全一致,55的average-pooling层后接11的卷积层,这应该是也是为了降低计算量同时又不愿意损失太多的特征所做的trick,卷积层后是两层全连接层加softmax层。为了避免过拟合,全连接层增加了70%的dropout。softxmax层在inference阶段会移除掉,整体结果以最深层的分类器为准。整个网络结构如下所示,因为图实在太大了,截得非常不清晰,大家可以在论文中仔细研究下。
GoogLeNet

整体效果

GoogLeNet的整体效果,可以看出经过这一系列调整Top5-Error是优于其他模型的,需要注意的是VGG模型的参数是AlexNet的参数的3倍,可以想象这得有多大。
GoogLeNet Top-5 Error
GoogLeNet是卷积网络中一个比较经典的网络结构,虽然是2014年提出的,但是看完还是会感叹google工程师的严谨高效,以及google非常浓厚的工程师思维。论文也多次提出当前的结构是他们经过多次试验所得出的最好的结构,而且为了避免dl中非常常见的梯度消失也是提出了一个非常trick的方式,感觉之后也会有一些借鉴的意义。

引用

  1. GoogLeNet原文链接https://arxiv.org/pdf/1409.4842.pdf
  2. Network in Network原文链接https://arxiv.org/pdf/1312.4400.pdf
  3. 深入理解GoogLeNet结构(原创)https://zhuanlan.zhihu.com/p/32702031
  4. 大话CNN经典模型:GoogLeNet(从Inception v1到v4的演进)https://my.oschina.net/u/876354/blog/1637819
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值