GoogLeNet系列解读「建议收藏」

GoogLeNet系列解读「建议收藏」本文介绍的是著名的网络结构GoogLeNet及其延伸版本,目的是试图领会其中的思想而不是单纯关注结构。GoogLeNetIncepetionV1MotivationArchitecturalDetailsGoogLeNetConclusionGoogLeNetInceptionV2IntroductionGeneralDesignPrinciplesFactorizi

大家好,又见面了,我是你们的朋友全栈君。

本文介绍的是著名的网络结构GoogLeNet及其延伸版本,目的是试图领会其中的思想而不是单纯关注结构

GoogLeNet Incepetion V1

这是GoogLeNet的最早版本,出现在2014年的《Going deeper with convolutions》。之所以名为“GoogLeNet”而非“GoogleNet”,文章说是为了向早期的LeNet致敬。

Motivation

深度学习以及神经网络快速发展,人们不再只关注更给力的硬件、更大的数据集、更大的模型,而是更在意新的idea、新的算法以及模型的改进。

一般来说,提升网络性能最直接的办法就是增加网络深度和宽度,这也就意味着巨量的参数。但是,巨量参数容易产生过拟合也会大大增加计算量

文章认为解决上述两个缺点的根本方法是将全连接甚至一般的卷积都转化为稀疏连接。一方面现实生物神经系统的连接也是稀疏的,另一方面有文献1表明:对于大规模稀疏的神经网络,可以通过分析激活值的统计特性和对高度相关的输出进行聚类来逐层构建出一个最优网络。这点表明臃肿的稀疏网络可能被不失性能地简化。 虽然数学证明有着严格的条件限制,但Hebbian准则有力地支持了这一点:fire together,wire together。

早些的时候,为了打破网络对称性和提高学习能力,传统的网络都使用了随机稀疏连接。但是,计算机软硬件对非均匀稀疏数据的计算效率很差,所以在AlexNet中又重新启用了全连接层,目的是为了更好地优化并行运算。

所以,现在的问题是有没有一种方法,既能保持网络结构的稀疏性,又能利用密集矩阵的高计算性能。大量的文献表明可以将稀疏矩阵聚类为较为密集的子矩阵来提高计算性能,据此论文提出了名为Inception 的结构来实现此目的。

Architectural Details

Inception 结构的主要思路是怎样用密集成分来近似最优的局部稀疏结构。
作者首先提出下图这样的基本结构:
这里写图片描述
对上图做以下说明:
1 . 采用不同大小的卷积核意味着不同大小的感受野,最后拼接意味着不同尺度特征的融合;
2 . 之所以卷积核大小采用1、3和5,主要是为了方便对齐。设定卷积步长stride=1之后,只要分别设定pad=0、1、2,那么卷积之后便可以得到相同维度的特征,然后这些特征就可以直接拼接在一起了;
3 . 文章说很多地方都表明pooling挺有效,所以Inception里面也嵌入了。
4 . 网络越到后面,特征越抽象,而且每个特征所涉及的感受野也更大了,因此随着层数的增加,3×3和5×5卷积的比例也要增加。

但是,使用5×5的卷积核仍然会带来巨大的计算量。 为此,文章借鉴NIN2,采用1×1卷积核来进行降维
例如:上一层的输出为100x100x128,经过具有256个输出的5×5卷积层之后(stride=1,pad=2),输出数据为100x100x256。其中,卷积层的参数为128x5x5x256。假如上一层输出先经过具有32个输出的1×1卷积层,再经过具有256个输出的5×5卷积层,那么最终的输出数据仍为为100x100x256,但卷积参数量已经减少为128x1x1x32 + 32x5x5x256,大约减少了4倍。

具体改进后的Inception Module如下图:
这里写图片描述

GoogLeNet

GoogLeNet的整体结构如下图:

这里写图片描述

对上图做如下说明:
1 . 显然GoogLeNet采用了模块化的结构,方便增添和修改;
2 . 网络最后采用了average pooling来代替全连接层,想法来自NIN,事实证明可以将TOP1 accuracy提高0.6%。但是,实际在最后还是加了一个全连接层,主要是为了方便以后大家finetune;
3 . 虽然移除了全连接,但是网络中依然使用了Dropout ;
4 . 为了避免梯度消失,网络额外增加了2个辅助的softmax用于向前传导梯度。文章中说这两个辅助的分类器的loss应该加一个衰减系数,但看caffe中的model也没有加任何衰减。此外,实际测试的时候,这两个额外的softmax会被去掉。

下图是一个比较清晰的结构图:

这里写图片描述

Conclusion

GoogLeNet是谷歌团队为了参加ILSVRC 2014比赛而精心准备的,为了达到最佳的性能,除了使用上述的网络结构外,还做了大量的辅助工作:包括训练多个model求平均、裁剪不同尺度的图像做多次验证等等。详细的这些可以参看文章的实验部分。

本文的主要想法其实是想通过构建密集的块结构来近似最优的稀疏结构,从而达到提高性能而又不大量增加计算量的目的。GoogleNet的caffemodel大小约50M,但性能却很优异。

GoogLeNet Inception V2

GoogLeNet凭借其优秀的表现,得到了很多研究人员的学习和使用,因此Google团队又对其进行了进一步发掘改进,产生了升级版本的GoogLeNet。这一节介绍的版本记为V2,文章为:《Rethinking the Inception Architecture for Computer Vision》

Introduction

14年以来,构建更深的网络逐渐成为主流,但是模型的变大也使计算效率越来越低。这里,文章试图找到一种方法在扩大网络的同时又尽可能地发挥计算性能

首先,GoogLeNet V1出现的同期,性能与之接近的大概只有VGGNet了,并且二者在图像分类之外的很多领域都得到了成功的应用。但是相比之下,GoogLeNet的计算效率明显高于VGGNet,大约只有500万参数,只相当于Alexnet的1/12(GoogLeNet的caffemodel大约50M,VGGNet的caffemodel则要超过600M)。

GoogLeNet的表现很好,但是,如果想要通过简单地放大Inception结构来构建更大的网络,则会立即提高计算消耗。此外,在V1版本中,文章也没给出有关构建Inception结构注意事项的清晰描述。因此,在文章中作者首先给出了一些已经被证明有效的用于放大网络的通用准则和优化方法。这些准则和方法适用但不局限于Inception结构。

General Design Principles

下面的准则来源于大量的实验,因此包含一定的推测,但实际证明基本都是有效的。

1 . 避免表达瓶颈,特别是在网络靠前的地方。 信息流前向传播过程中显然不能经过高度压缩的层,即表达瓶颈。从input到output,feature map的宽和高基本都会逐渐变小,但是不能一下子就变得很小。比如你上来就来个kernel = 7, stride = 5 ,这样显然不合适。
另外输出的维度channel,一般来说会逐渐增多(每层的num_output),否则网络会很难训练。(特征维度并不代表信息的多少,只是作为一种估计的手段)

2 . 高维特征更易处理。 高维特征更易区分,会加快训练。

3. 可以在低维嵌入上进行空间汇聚而无需担心丢失很多信息。 比如在进行3×3卷积之前,可以对输入先进行降维而不会产生严重的后果。假设信息可以被简单压缩,那么训练就会加快。

4 . 平衡网络的宽度与深度。

上述的这些并不能直接用来提高网络质量,而仅用来在大环境下作指导。

Factorizing Convolutions with Large Filter Size

大尺寸的卷积核可以带来更大的感受野,但也意味着更多的参数,比如5×5卷积核参数是3×3卷积核的25/9=2.78倍。为此,作者提出可以用2个连续的3×3卷积层(stride=1)组成的小网络来代替单个的5×5卷积层,(保持感受野范围的同时又减少了参数量)如下图:
这里写图片描述
然后就会有2个疑问:

1 . 这种替代会造成表达能力的下降吗?
后面有大量实验可以表明不会造成表达缺失;

2 . 3×3卷积之后还要再加激活吗?
作者也做了对比试验,表明添加非线性激活会提高性能

从上面来看,大卷积核完全可以由一系列的3×3卷积核来替代,那能不能分解的更小一点呢。文章考虑了 nx1 卷积核
如下图所示的取代3×3卷积:
这里写图片描述

于是,任意nxn的卷积都可以通过1xn卷积后接nx1卷积来替代。实际上,作者发现在网络的前期使用这种分解效果并不好,还有在中度大小的feature map上使用效果才会更好。(对于mxm大小的feature map,建议m在12到20之间)。

总结如下图:

这里写图片描述

(1) 图4是GoogLeNet V1中使用的Inception结构;

(2) 图5是用3×3卷积序列来代替大卷积核;

(3) 图6是用nx1卷积来代替大卷积核,这里设定n=7来应对17×17大小的feature map。该结构被正式用在GoogLeNet V2中。

未完待续


  1. Sanjeev Arora, Aditya Bhaskara, Rong Ge, and Tengyu Ma. Provable bounds for learning some deep representations. CoRR, abs/1310.6343, 2013.
  2. Min Lin, Qiang Chen, and Shuicheng Yan. Network in network. CoRR, abs/1312.4400, 2013.
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/125097.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 面试题之  什么是不可变类? 为什么String是不可变类? 如何创建一个不可变类

    面试题之  什么是不可变类? 为什么String是不可变类? 如何创建一个不可变类面试题:     什么是不可变类? 为什么String是不可变类? 如何创建一个不可变类不可变类当类的对象创建后,它的值就不可以再更改了相比于可变对象,不可变对象有很多优势不可变对象可以提高String Pool(字符串常量池)的效率和安全性。如果你知道一个对象是不可变的 ,那么需要拷贝对象的内容时就不用复制它本身而只复制它的地址,复制地址(通常一个指针的大小)需要很小的内存,效率…

    2022年6月13日
    29
  • 分页式虚拟存储管理_c语言申请内存空间

    分页式虚拟存储管理_c语言申请内存空间C语言模拟实现虚拟存储管理(请求分页存储管理)使用FIFO算法一、实验目的存储管理的主要功能之一是合理的分配空间。请求分页存储管理是一种常用的虚拟存储管理技术。本实验的目的是:通过编程模拟实现请求分页存储管理中硬件地址转换过程、缺页中断处理过程,以及先进先出页面置换算法,加深对页式虚拟存储管理的理解,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换方法;通过编写和调试地址转换过程的模拟程序以加强对地址转换过程的了解。二、实验内容阅读教材《计算机操作系统》第四章,掌握存储器管理相关概念和原理。

    2022年9月26日
    0
  • java编写一个学生类和教师类_用JAVA编写一个夫类和子类的程序,内容是教师类和学生类…

    java编写一个学生类和教师类_用JAVA编写一个夫类和子类的程序,内容是教师类和学生类…2018-11-19回答21:抽象方法是必须实现的方法。就象动物都要呼吸。但是鱼用鳃呼吸,猪用肺呼吸。动物类要有呼吸方法。怎么呼吸就是子类的事了。现在有很多讨论和建议提倡用interface代替abstract类,两者从理论上可以做一般性的混用,但是在实际应用中,他们还是有一定区别的。抽象类一般作为公共的父类为子类的扩展提供基础,这里的扩展包括了属性上和行为上的。而接口一般来说不考虑属性,只…

    2022年7月8日
    17
  • 在eclipse上修改tomcat内存大小

    在eclipse上修改tomcat内存大小

    2021年7月16日
    53
  • matlab图像处理基础「建议收藏」

    matlab图像处理基础「建议收藏」1、MATLAB中图象数据的读取A、imread   imread函数用于读入各种图象文件,其一般的用法为          [X,MAP]=imread(‘filename’,‘fmt’)其中,X,MAP分别为读出的图象数据和颜色表数据,fmt为图象的格式,filename为读取的图象文件(可以加上文件的路径)。例:[X,MAP]=imread(’flowers.t

    2022年10月4日
    0
  • linux卸载默认java_趋势卸载默认密码

    linux卸载默认java_趋势卸载默认密码在Linux下有的时候需要重新配置jdk,因为环境变量是使用默认安装的jdk,这个默认安装的jdk不卸载掉,那么新配置的环境变量将不会生效,所以常见到的问题就是,明明配置了环境变量/etc/profile,但是java-version却不生效,就是这个原因!以下是相关卸载和配置:一、查看Jdk的安装路径:$whereisjava$whichjava(java执行路径)…

    2022年10月1日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号