正文共2964个字,4张图,预计阅读时间8分钟。

这一段时间撸了几篇论文,当我撸到GoogLeNet系列论文的时候,真是脑洞大开!GoogLeNet绝对可以称为已公开神经网络的复杂度之王!每当我看到它那错综复杂的网络图时,心里总有一种说不出的苦涩滋味,我也不知为何。

然后,我萌生了一个想法,用自己的语言描述一下GoogLeNet的发展历程和关键技术点,我知道网上已经有很多人总结过GoogLeNet的各种版本,但那毕竟是别人的东西,自己总结一遍会提升自己的水平。计划是写4篇文章,希望能在一个月内完成吧。下面是GoogLeNet的4篇论文:

[v1] Going Deeper with Convolutions,ensemble top5 error 6.67%,2014

[v2] Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift,ensemble top5 error 4.8%,2015

[v3] Rethinking the Inception Architecture for Computer Vision,ensemble top5 error 3.5%,2015

[v4] Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning,ensemble top5 error 3.08%,2016

v4版本top5错误率只有3.08%!这个应该是目前错误率最低的吧。

不过有时候自己也会萌生一些悲观想法,现在深度学习的网络是越做越复杂,针对某些数据集的识别率是越来越高,可是,然并卵,当我们换个数据集,换个环境,换个照片,换个……以后,效果就不行了,这真是个问题啊!

本文介绍关于GoogLeNet第一篇正式论文,习惯称为inception v1,如下:

[v1] Going Deeper with Convolutions,top5 error 6.67%

在开始介绍论文之前,先说一些题外话,GoogLeNet这个名字的诞生由两方面促成,一是设计者在Google工作,二是向LeNet致敬。GoogLeNet只是一个名字,它的核心内容是发明了Inception Architecture(以下简称IA),发明IA的灵感来自于2013年的一篇论文《Provable Bounds for Learning Some Deep Representations》,这篇论文读起来非常困难,需要很多的数学知识,有兴趣的可以看看。

inception V1的主要贡献

1、提出inception architecture并对其优化

2、取消全连层

3、运用auxiliary classifiers加速网络converge

接下来对以上几点分别介绍。

inception architecture

首先得说一下Szegedy发明IA的动机,他估计是在某天阅读了Provable Bounds for Learning Some Deep Representations这篇论文,又结合自己多年来在深度学习界摸爬滚打的经验,发现传统的提高网络精度的方法是一条邪路(P.S. 传统的方法指的是 扩大网络规模 或 增大训练数据集),而想从本质上提高网络性能,就得用sparsely connected architectures,即“稀疏连接结构”。

我自己对“稀疏连接结构”的理解是这样的,用尽可能的“小”、“分散”的可堆叠的网络结构,去学习复杂的分类任务,怎么体现“小”、“分散”呢?如下图:

Inception Architecture,naive version

原来造神经网络,都是一条线下来,我们可以回想一下AlexNet、VGG等著名网络,而IA是“分叉-汇聚”型网络,也就是说在一层网络中存在多个不同尺度的kernels,卷积完毕后再汇聚,为了更好理解,“汇聚”的tensorflow代码写出来是这样的:

net = tf.concat(3, [branch1x1, branch5x5, branch3x3, branch_pool])

就是简单的在kernel维度把矩阵concatenate起来。但是这么做有一个问题,会产生“维度爆炸”,什么意思呢?假如branch1x1、branch3x3、branch5x5都有256个kernels,加上branch_pool的kernels(假定为256),经过tf.concat操作,最终的kernels是256×4=1024个kernels!这没法接受啊!如果多层IA叠加起来,那kernels的数量岂不上天!!于是Szegedy就改进了一下,如下图:

Inception module with dimension reductions

他加入了kernels数量控制方式,就是那些1×1的卷积层,这些1×1的卷积层输出kernels会比上一层要少,这样即便在经过tf.concat以后,总kernels数量不会增加太多。另外,这些1×1的卷积层还增加了网络的非线性程度。

关于IA的结构就介绍完了,可是,为什么?这样的结构有啥用?Szegedy在论文里解释过一点点:IA之所以能提高网络精度,可能就是归功于它拥有多个不同尺度的kernels,每一个尺度的kernel会学习不同的特征,把这些不同kernels学习到的特征汇聚给下一层,能够更好的实现全方位的深度学习!

取消全连层

为什么VGG网络的参数那么多?就是因为它在最后有两个4096的全连层!Szegedy吸取了教训,为了压缩GoogLeNet的网络参数,他把全连层取消了!其实我个人也认为全连层作用确实没那么大,取消了也好,GoogLeNet网络详细配置如下:

GoogLeNet详细配置

从上图就可以看出,网络的最后几层是avg pool、dropout、linear和softmax,没有看到fully connect的影子。现在取消全连层貌似是个大趋势,近两年的优秀大型神经网络都没有全连层,可能是全连层参数太多,网络深度增加了以后,难以接受吧。

Auxiliary classifiers

搞机器学习的都知道,梯度消散是所有深层网络的通病,往往训练到最后,网络最开始的几层就“训不动了”!于是Szegedy加入了auxiliary classifiers(简称AC),用于辅助训练,加速网络converge,如下图画红框部分:

GoogLeNet

以上图片摘自此文,因为网络太深了,竖着太长,就把它横过来看了。可以看到,笔者在网络中间层加入了两个AC,这两个AC在训练的时候也跟着学习,同时把自己学习到的梯度反馈给网络,算上网络最后一层的梯度反馈,GoogLeNet一共有3个“梯度提供商”,先不说这么做有没有问题,它确实提高了网络收敛的速度,因为梯度大了嘛。另外,GoogLeNet在做inference的时候AC是要被摘掉的。

AC这种加速收敛训练方式与ResNet表面上看不太一样,但是我感觉本质上应该是类似的。ResNet也很深,但是它先是通过构建浅层网络学习参数,再把浅层网络的参数应用到较深网络中,从而尽可能减少梯度消散的影响。GoogLeNet是直接把浅层网络的训练和深层网络的训练揉到一起了。关于这个问题还有待深究。

原文链接:https://www.jianshu.com/p/33197e469414
https://www.jianshu.com/p/a2ad00eddbd5

查阅更为简洁方便的分类文章以及最新的课程、产品信息,请移步至全新呈现的“LeadAI学院官网”:

www.leadai.org

请关注人工智能LeadAI公众号,查看更多专业文章

大家都在看


LSTM模型在问答系统中的应用

基于TensorFlow的神经网络解决用户流失概览问题

最全常见算法工程师面试题目整理(一)

最全常见算法工程师面试题目整理(二)

TensorFlow从1到2 | 第三章 深度学习革命的开端:卷积神经网络

装饰器 | Python高级编程

今天不如来复习下Python基础

GoogLeNet的心路历程(一)相关推荐

  1. GoogLeNet的心路历程(四)

    正文共1216个字 2张图,预计阅读时间5分钟. 今年年初的时候,Szegedy写了GoogLeNet的第三篇续作,如下: [v4] Inception-v4, Inception-ResNet an ...

  2. GoogLeNet的心路历程(三)

    正文共2965个字,估计阅读时间10分钟. 本文主要介绍GoogLeNet续作二,inception v3.说实话,Szegedy这哥们真的很厉害,同一个网络他改一改就改出了4篇论文,这是其中第3篇, ...

  3. GoogLeNet的心路历程(二)

    正文共3862个字,4张图,预计阅读时间10分钟. 本文介绍关于GoogLeNet的续作,习惯称为inception v2,如下: [v2] Batch Normalization: Accelera ...

  4. 探究!一个数据包在网络中的心路历程

    来自:小林coding 前言 想必不少小伙伴面试过程中,会遇到「当键入网址后,到网页显示,其间发生了什么」的面试题. 还别说,这真是挺常问的这题,前几天坐在我旁边的主管电话面试应聘者的时候,也问了这个 ...

  5. 一个老产品的心路历程

    一个产品经理的经历可以分为三个阶段:无知者无畏.初出茅庐.渐行渐远. 近日,心中一直颇不平静,像如今这样的日子,17年前也曾经历,只不过那时候我还是一个高一的学生,现在回想起来,只记得当初得到了一个漫 ...

  6. 【记录】一段不知结果如何的“互联网+”比赛心路历程

    我,杭电自动化,研一. 从20200322开始准备"互联网+",今天是20200530,这篇博客用来记录做比赛的心路历程,其实之前就有过这个想法,不过一直拖延症没执行下去,今天刚好 ...

  7. 【博客话题】我的linux心路历程

    2011年的某一天,程程同学在QQ上跟我说"linux 20周年了,有没有关于linux话题的好点子",回神一想,是啊,linux都20周年了,是应该搞一个有意义的话题了,我就建议 ...

  8. 心路历程(六)-一个人的后台

    回想一下,心路历程(五)是2016年2月份写的了,距离现在(2017/07/17)已经是一年多了.那是的是还是一个刚自学完的矛头小子,为找工作,房子,生存而烦恼的应届生.而在今年(2017)的3.24 ...

  9. 考研心路历程2021北京交通大学计算机学院软件工程

    我今年参加了2021北京交通大学的软件工程,今年政治我跟的腿姐,押中题目,英语一有难度,数学一难,专业课难. 我是在大三上学期寒假开始准备的,差不多一年半的时间,报考的是北京交通大学软件工程学硕.正逢 ...

最新文章

  1. python类修饰器_《Python有什么好学的》之修饰器
  2. rust 案例_理解Rust的引用与借用
  3. java大小写转置,javascript 字符串 数字反转 字母大小写互换
  4. 【转载】cocos2d-x类型转换(CCstring int string char UTF-8互转)以及字符串详解
  5. java kdj_基于Java语言开发的个性化股票分析技术随机指数[KDJ].doc
  6. micropython入门教程-Micropython入门实操心得
  7. jsf mysql_在JSF数据表中显示来自MySQL数据库的图像[关闭]
  8. 管理感悟:主管加班,员工才会加班
  9. (转)听赌徒谈风险:没犯任何错误照样输个精光
  10. [渝粤教育] 中国地质大学 计算机会计理论与实务 复习题 (2)
  11. 计算机学习路线及java图书参考
  12. 基于java(ssm)校园办公室报修管理系统(java毕业设计)
  13. 东芝打印机共享怎么设置_东芝e-studio181打印机怎么设置网络打印机
  14. 解决windows下文件名太长无法删除的问题
  15. 2023届暑期实习华为面试手撕题
  16. 【干货】人工智能专业重要词汇表(红宝书)
  17. JME sdk中的中文乱码(全是方框)的解决办法
  18. 【前端-IE兼容】Win10和Win11使用Edge调试前端兼容IE6、IE7、IE8、IE9、IE10、IE11问题
  19. python字典按键值升序排列
  20. 计算机专业地域环境分析,职业生涯环境分析-职业环境分析.doc

热门文章

  1. put多文件上传linux,linux 上传lftp 服务器
  2. flex producer java_在 Logic Pro 中选取 Flex 与跟随设置
  3. oracle 12c sp2 0667,SP2-0667/SP2-0750错误
  4. java入门第二天课程,Java菜鸟培训第二天
  5. hive获取mysql里的文件_apache – 如何在hive中获取数据库用户名和密码
  6. html布局基础,HTML 布局 - HTML 基础教程
  7. HDU 6625 three arrays 求两个序列异或最小值的排列(一个可以推广的正解
  8. 编程范式 —— 函数式编程入门
  9. 现代操作系统第三版高清.pdf中文版免费下载
  10. System.Threading.Timer 定时器的用法