GoogLeNet的个人理解[通俗易懂]

GoogLeNet的个人理解[通俗易懂]先附上著名的网络结构GoogLeNet及其延伸版本,以便自己日后的学习。1.Inception[V1]:GoingDeeperwithConvolutions2.Inception[V2]:BatchNormalization:AcceleratingDeepNetworkTrainingbyReducingInternalCovariateShift

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

先附上著名的网络结构GoogLeNet及其延伸版本,以便自己日后的学习。

  1. Inception[V1]: Going Deeper with Convolutions
  2. Inception[V2]: Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
  3. Inception[V3]: Rethinking the Inception Architecture for Computer Vision
  4. Inception[V4]: Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning

在学习了Andrew Ng 的deeplearning.ai中的CNN课程时,顺着Ng的思路去了解了GoogLeNet这篇经典论文。GoogleNet提出了一个全新的深度CNN架构——Inception,无全连接层,可以节省运算的同时,减少了很多参数,参数数量是AlexNet的1/12,数量只有5 million,而且在ImageNet竞赛中取得了很好的成绩。
  文章在引文中提到了提高深度神经网络性能最直接的方式,那就是增加网络的规模:深度和宽度。但是这样做的话肯定存在很多问题,问题是什么呢?
  问题一:网络规模更大通常意味着需要更多的参数,这会使增大的网络更容易过拟合,尤其是在训练集的标注样本有限的情况下。
  问题二:使用计算资源的显著增加。
  紧接着,文章就这两个问题开展一系列的引用与讨论,提出论文的追求,那就是设计一个好的网络拓扑,最后引出了Inception架构,并且将Inception架构的设计初衷与思想诠释的比较到位。首先,肯定卷积神经网络的重要性,以及池化对于卷积效果的重要性,所以Inception架构的基础是CNN卷积操作。而就减小网络规模这一点来说,新的模型需要考虑一个新的网络架构,从如何近似卷积视觉网络的最优稀疏结构出发,进行探索与讨论。

Inception架构

我们来具体看Inception的架构(图1)。在这篇文章的Inception版本1中,创新点在于一层网络中存在多个不同尺度的卷积核,摒弃了AlexNet、VGG等传统著名网络的“一条线”架构。升级版的Inception,也就是这篇文章提到的Inception架构中,加入多个1×1的“瓶颈”层,来保留空间维度, 降低深度,在池化之后采用1×1卷积核来减少池化后的深度,从而主要达到减小规模的目的。
  我简单的进行了两个版本Inception的操作数运算,步骤如下:


GoogLeNet的个人理解[通俗易懂]
  如果采用(a)的架构,假设在这一个Inception架构中,上一层输入的尺寸大小是28×28×256,采用1×1,3×3,5×5三种不同尺度的卷积核和3×3的max池化来进行该层的计算输出,那么在该层中卷积操作的ops次数计算如下:

			[1×1 conv,128] 28×28×128×1×1×256
			[3×3 conv,192] 28×28×192×3×3×256
			[5×5 conv,192] 28×28×96×5×5×256

Total:854M ops。对于[1×1 conv,128],28×28×128×1×1×256的计算是怎么来的呢?首先对于输入尺寸为28×28×256的矩阵来说,1×1卷积核实际大小是:1×1×256,每进行一次卷积,就进行了1×1×256次运算,那么一个卷积核需要进行28×28次卷积,而一共有128个不同的1×1卷积核,所以总的运算次数为28×28×1×1×256×128。


GoogLeNet的个人理解[通俗易懂]
  如果采用(b)的架构,同样假设在这一个Inception架构中,上一层输入的尺寸大小是28×28×256,采用1×1,3×3,5×5三种不同尺度的卷积核和3×3的max池化来进行该层的计算输出,但是在进行以上卷积之前,在3×3和5×5卷积操作的前一步,加入1×1的“瓶颈”层,来保留空间维度, 降低深度;在池化之后采用1×1卷积核来减少池化后的深度。那么在该层中卷积操作的ops次数计算如下:

			[1×1 conv,64] 28×28×64×1×1×256
			[3×3 conv,64] 28×28×64×1×1×256
			[5×5 conv,128] 28×28×128×1×1×256
			[1×1 conv,192] 28×28×192×3×3×64
			[3×3 conv,96] 28×28×96×5×5×64
			[5×5 conv,64] 28×28×64×1×1×256

Total:358M ops。可以看到,虽然网络的复杂程度加大了,但是总的运算次数减小到之前的1/3。
  Inception网络是一个由上述类型的模块互相堆叠组成的网络,从而形成了GoogLeNet。GoogLeNet是一个具有22层网络的深度学习架构,当然这22层指的是拥有权重的层,如图所示GoogLeNet的整体架构。


GoogLeNet的个人理解[通俗易懂]
  在中间层采用辅助分类器(Auxiliary Classification),增加了两个Loss来保证梯度回传消失的情况,这种设计结构用来减少梯度消失,ResNet是减少梯度爆炸。从中我们可以学习到一个点在于:梯度消失解决办法可以是在中间增加额外信号。

创新点

GoogLeNet的创新点都是围绕减少深度和提高性能来设计的。

  1. 借鉴NiN(Network in Network)中提出的思想,采用1×1 conv 来保持空间维度的同时,降低深度,也就是降低通道数量,同时1×1 conv还可以为你的网络增强非线性。
  2. 横向的卷积核排列设计,使得多个不同size的卷积核能够得到图像当中不同cluster的信息 ,我们称之为“多尺度”。这样融合了不同尺度的卷积以及池化,一个模块一层就可以得到多个尺度的信息,下一阶段也可以同时从不同尺度中提取的特征,可以进行多维度特征的融合,所以效果更好。把计算力拓宽,也避免了太深训练梯度弥散的问题。
  3. 对深度相对较大的网络来说,梯度反向传播能够通过所有层的能力就会降低。文中指出:“在这个任务上,更浅网络的强大性能表明网络中部层产生的特征应该是非常有识别力的”。通过将辅助分类器添加到这些中间层,可以提高较低阶段分类器的判别力,这是在提供正则化的同时克服梯度消失问题。后面的实验表明辅助网络的影响相对较小(约0.5),只需要其中一个辅助分类器就能取得同样的效果。
  4. 较高层会捕获较高的抽象特征,其空间集中度会减少。这表明随着网络转移到更高层,Inception架构中3×3和5×5卷积的比例应该会增加。而到最后一个卷积层出来的全连接,由全局平均池化替代了,减少了参数,节约了计算量。

我的思考

Inception中为什么要加入池化呢?是因为池化操作对于目前卷积网络的成功至关重要,因此建议在每个Inception中添加一个并行池化,采用步长为2的最大池化层将网络分辨率减半,应该也应该具有额外的效果。
  论文中提到“Inception结构中所有的滤波器是学习到的”,怎么理解?其实,Inception的作用是代替人工来确定卷积层中过滤器的类型,或者确定是否需要创建卷积层或池化层。Inception网络不需要人为决定使用哪个fliter,或者是否需要池化,而是由网络自行确定(学习)这些参数,自行学习是否使用这些fliter或者池化,也就是说这些都是Hypeparameter。
  论文中提到了这样一句话:max-pooling layers result in loss of accurate spatial information,作者也意识到了最大池化会导致某些精确的空间信息丢失,但是他在这里仅仅提到了,没有去深入思考,这让我联想到了最近的一个新模型,CapsNet,神经网络提出者Hinton的新论文。其中的思想也很新颖,而且我对CapsNet能否与迁移学习相联系有着比较大的兴趣,正在尝试着跟从实验室学长去研究。

Google公司具有很多计算力超强的集群,可以反复验证各种架构设计的优越性,所以GoogleNet整体架构的最终版,也就是论文中所呈现的,应该是一个非常好、很具有影响力的深层网络架构。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/170446.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 查找可用的谷歌IP地址

    查找可用的谷歌IP地址

    2021年11月14日
  • 循环单链表解决约瑟夫环_用链表解决约瑟夫环问题

    循环单链表解决约瑟夫环_用链表解决约瑟夫环问题已知有5个人围坐在一张圆桌的周围,从编号为3的人开始顺时针数数,数到2的那个人出列淘汰,然后从出列的下个一人继续数,依次循环,直到只剩下最后一个人。(使用循环链表实现约瑟夫环)代码如下:#include “pch.h”#include<string>#include<fstream>#include<Windows.h>#include <i…

  • 电赛 | 循迹小车(省电赛一等奖作品)

    电赛 | 循迹小车(省电赛一等奖作品)点击上方「嵌入式大杂烩」,选择「置顶公众号」第一时间查看编程笔记!往期资料==菜单栏下有更多资料资源分享|嵌入式相关资源分享|编程语言类资源分享|Linux相关资料资源…

  • vue单页应用和多页应用_多页面应用需要vuejs吗

    vue单页应用和多页应用_多页面应用需要vuejs吗进入一家新的公司,要开发移动端app项目,前端技术选型时前端组长选的是vue的多页面开发,当时很蒙,vue不是单页面开发吗?咋出来多页面的。接触之后才发现确实存在也挺简单的,省去了路由表的配置。那就给大家整体思路分析一波吧。不足之处还请包涵!单页面开发我就不多说了,主要讲多页面的开发模式与最终效果,网上一搜单页面会有好多文章博客,但是搜多页面的就很少了,比如下面这个就是列了一下两种开发模式的优缺点。首先多页开发,肯定是一个页面就是一个单独文件,每个文件也有自己的.vue.js和comp.

    2022年10月13日
  • dfs是什么意思_英语单词搜索软件

    dfs是什么意思_英语单词搜索软件给定一个 m x n 二维字符网格 board 和一个单词(字符串)列表 words,找出所有同时在二维网格和字典中出现的单词。单词必须按照字母顺序,通过 相邻的单元格 内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。示例 1:输入:board = [[“o”,”a”,”a”,”n”],[“e”,”t”,”a”,”e”],[“i”,”h”,”k”,”r”],[“i”,”f”,”l”,”v”]], words = [“oath”,

  • 计算机中1kb等于多少字节,1mb等于多少kb「建议收藏」

    计算机中1kb等于多少字节,1mb等于多少kb「建议收藏」⑴计算机的储存容量1MB等于多少KB计算机的储存容量1MB=1024KB。MB,为英文“MByte”的简写,是计算机中的一种储存单位,读作“兆”。存储容量是指存储器可以容纳的二进制信息量,用存储器中存储地址寄存器MAR的编址数与存储字位数的乘积表示。网络上的所有信息都是以“位”(bit)为单位传递的,一个位就代表一个0或1。(1)1mb等于多少kb扩展阅读存储容量是便携存储产品最为关键的参数…

发表回复

您的电子邮箱地址不会被公开。

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