大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
GoogLeNet论文学习笔记
Abstract
- 提出一种叫做inception的卷积神经网络结构,基于inception构建的22层的深度网络(GoogLeNet)刷新了ILSVRC14分类和检测任务的state of art。
- 这种结构的主要特点就是加大了网络的深度和宽度,并且不增加运算量,提高了计算资源的利用效率。
- 为了优化效果,inception结构的设计基于海扁准则和多尺度处理问题的直觉。
Introduction
- 过去三年由于深度学习(更确切地说是卷积网络)的优势,图像识别和物体检测取取得了引人注目的进步。这些进步不只是因为有性能更强的硬件,更大的数据集和更大的模型,而主要是一系列的新ideas,算法和改进的网络结构。
- 我们提交到ILSVRC 2014的GoogLeNet使用了比两年前的冠军AlexNet少12倍的参数,但取得了更高的正确率。
- 随着移动和嵌入式计算的不断发展,算法效率(特别是效果和内存占用)变得非常重要。
- 我们的模型被设计为在预测时的计算量保持在1.5 billion次乘加运算,因此可以被运用于实际生产中,而不单纯是学术上的实验。
Related Work
-
从LeNet-5开始,CNN就已经有了一个标准的结构—堆叠卷积层(可选择性地后面接一些normalization和max-pooling层),后面接一个或多个全连接层。各种基于此的变种模型在MNIST、CIFAR和ImageNet分类竞赛任务上都取得了迄今为止最好的结果。对于像Imagenet这种更大的数据集,近期的趋势是增加网络层数和每层的大小,并且使用dropout解决过拟合的问题。
-
从灵长类动物视觉皮层的神经科学模型中得到启发,Serre等人【15】使用一系列不同大小的固定小波滤波器去处理多尺度的问题,这与Inception模型非常相似。但与【15】只使用固定的两层模型不同,Inception模型的所有滤波器都是通过学习得到的。Inception层重复很多次,最终构成了GoogLeNet 22层的深层模型。
-
network-in-network是由Lin等人【12】提出的一种增加神经网络表示能力的方法。当运用到卷积层时,这种方法可以被看作额外增加1×1的卷积层。在Inception中1×1的卷积被大量使用,这有两个目的:很大程度上它们被用作降维模块,消除计算瓶颈导致模型大小的限制;不仅增加了网络的深度,也增加了网络的宽度。
Motivation and High Level Considerations
-
改善深度神经网络最直接的方式是增加网络的大小,包括增加网络的深度—levels的数量,以及增加网络的宽度—每个level神经元的数量。但是这种简单的解决方案会带来两个主要的缺陷。
-
首先更大的size意味着更大的参数量,使得扩大的网络更倾向于过拟合,尤其是训练数据比较少的时候。由于获得高质量的训练集是非常昂贵和困难的,这个问题就成为了一个主要的瓶颈。另一个缺陷是增加网络大小的同时也会增加计算资源的使用。
-
解决这两个问题的根本途径就是将全连接替换为稀疏连接结构,甚至是在卷积内部。但是目前的计算设备对于非均匀的稀疏数据计算效率非常低下,即使是算术运算量减少100倍,分支预测和缓存的开销依然非常显著导致稀疏矩阵无法运用。ConvNets使用随机和特征维度的稀疏连接表,打破网络的对称性和改善学习效果,但为了更好地优化并行计算,趋势又重新回到了全连接。文章中提到将稀疏矩阵分解成稠密子矩阵进行计算加速,但同时指出稀疏矩阵在近期还不会用于深层网络的构建。
Architectural Details
-
inception的主要思想就是找到一个简单可实现的稠密组件去逼近和替代一个最优的局部稀疏结构,并在空间上不断重复这种结构。Arora等人表明一种layer-by的网络构建方式,对最后一层进行相关统计分析,将相关性较高的单元聚类在一起组成下一层,并连接到上一层的单元。我们假设下层的每个单元都与输入图片的一些区域相关,并且这些单元被组分到filter banks中。在更低层(与输入层接近的层)相关的单元会集中在一个局部区域。这就意味着在结束时我们可以使用大量的只与单个区域相关的单元聚类,并且可以在下一层使用1*1的卷积层来替代这种结构。然而,我们也希望也有少量空间更广的单元聚类,这可以使用更大patches的卷积来替代,并且这些覆盖区域越来越大的patches的数量应该逐层减少。为了避免patch-alignment的问题(注:每个patch卷积后会得到一个像素值,与patch的中心像素对应,而如果patch的长宽为偶数时,patch就没有中心像素),目前实现的inception结构中filter的大小都限制在1*1、3*3、5*5,但这更多是为了方便而已。inception最后将这些层的结果合并(concatenate)到一起,作为下一步的输入,此外inception结构中也加入了pooling操作提升效果。
-
由于inception模块是一个一个堆叠的,高层提取的是更抽象的特征,要减少它们之间的空间相关性就要求越往高层3*3和5*5filter的比例越来越小。
- 上图a是作者提出的一种基本的inception结构,作者指出这种结构的一个最大的问题是:即使是少量的5*5的卷积也会导致计算爆炸,因为filter数量可能非常大。当pooling加进去时,问题会变得更加严重,因为pooling输出的filter数量与前一层的filter数量是一样的。pooling和其他卷积输出合并后filter数量必然会增加,而且随着inception的数量递增。
-
因此作者又提出了上图b中的结构,这种改进的结构在计算可能大量增加的地方使用降维和映射。1*1的卷积被用于在3*3和5*5的卷积前降维,并且1*1的卷积后接ReLU激活达到双重目的(注:ReLU增加网络的非线性特性)。
-
简而言之,inception用非对称的稠密组件去近似一个稀疏结构,既增加了网络的深度和宽度,减少了计算需求,稀疏连接的方式还有助于减少过拟合。
GoogLeNet
-
GoogLeNet是参加ILSVRC14比赛的team name,这个网络大量使用了前面讲述的inception结构。下图为该网络的拓扑图和详细参数表:
-
所有的卷积层(包括inception模块中的)都使用ReLU激活函数,输入是减去均值后的RGB三通道图片,大小为224*224。”#3×3 reduce”和”#5×5 reduce”表示3×3和5×5卷积前降维层的filters数量。同时表中也给出了inception模块中的max-pooling层后面映射层的1x1filters的数量。
- 该网络的深度有22个参数层(如果加上无参数的pooling,有27层),网络中总共有差不多100层。分类之前使用average pooling是基于[12],但此处不同的是使用了额外的线性层(注:后面多加了一个全连接层),这是为了方便使用其他的标注集进行adapting和fine-tuning。同时作者也发现如果去掉这个全连接层,top-1正确率能提高0.6%,另外dropout还是需要的。
- 对于一个非常深的网络,通过各层进行梯度传播的能力是需要考虑的问题,前面已经讲到过,越深的网络梯度消失问题会更严重。作者发现在网络中间的层产生的特征非常具有判别性,因此就在网络中间的层加了一些额外的分类器,增强了后向传导的梯度信号,并且提供了额外的正则。在拓扑图中可以看到,作者在inception (4a)和(4d)的上面分别放了一个更小的卷积网络,每个卷积网络都有一个分类器。在训练时,这两个额外的分类器得到的loss会乘以一个权重(作者使用0.3)加到total loss中。在预测时,额外的分类器会被移除。
- 旁边额外的网络(包括辅助的分类器)的具体结构如下:
- filter大小为5×5、stride为3的average pooling,对于(4a)输出大小为4x4x512,对于(4d)输出为4x4x528
- 用于降维的1×1卷积,filter数为128,ReLU激活
- 输出为1024的全连接层,ReLU激活
- ratio为70%的dropout层
- softmax损失的线性分类器(与主分类器一样预测1000个类别,但预测时移除)
Training Methodology
- 随机梯度下降,momentum为0.9,每8个epochs学习率衰减4%,Polyak平均[13]用于生成预测时的模型。
- 其他一些图片采样方法
ILSVRC 2014 Classification Challenge Setup and Results
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/170447.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...