Inception V1 (GoogLeNet)神经网络 作者:马育民 • 2020-05-15 17:43 • 阅读:10244 # 介绍 Inception神经网络,在2014年ImageNet大规模视觉识别挑战赛(ILSVRC14)中提出,用于分类和检测 **主要特点:**允许增加网络的 **深度** 和 **宽度**,同时保持计算预算不变(摘自论文摘要) ### 名字出处 名字来自 电影盗梦空间,其英文名:Inception 在ILSVRC14比赛中,该团队选择了 GoogLeNet 作为团队名称。此名称是对Yann LeCuns开拓性的 [LeNet 5网络](https://www.malaoshi.top/show_1EF5X7TvNqeO.html "LeNet 5网络") 的致敬[10]。还使用GoogLeNet来指代我们提交的竞赛中使用的Inception体系结构的特定形式 论文网址: https://arxiv.org/abs/1409.4842 本站网址: https://www.malaoshi.top/show_1EF5WonwMeei.html ### 发展 Inception经历4个版本,论文如下: V1 [Going Deeper with Convolutions](http://arxiv.org/abs/1409.4842 "Going Deeper with Convolutions") V2 [Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift](http://arxiv.org/abs/1502.03167 "Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift") V3 [Rethinking the Inception Architecture for Computer Vision](http://arxiv.org/abs/1512.00567 "Rethinking the Inception Architecture for Computer Vision") V4 [Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning](http://arxiv.org/abs/1602.07261 "Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning") # 如何提升神经网络性能 ### 传统神经网络 从LeNet-5 开始,卷积神经网络(CNN)通常具有一种标准结构-堆叠的卷积层(后面可能是 归一化 或 最大池化),然后是一个或多个完全连接的层。 LeNet-5参见:https://www.malaoshi.top/show_1EF5X7TvNqeO.html ### 传统提升性能的方法 提升深度神经网络性能,**最直接** 的方法就是增加网络 **深度** 和 **宽度** ### 传统方法的缺点 但会带来2个缺点: 1. 大量的参数,容易 过拟合 2. 增加计算量 ### 解决缺点的关键 - 稀疏连接 解决2个缺点的根本方法是:**将全连接 和 一般的卷积 改为 稀疏连接**。 依据: 1. 符合Hebbin赫布原理,生物神经系统的连接也是稀疏的 2. 根据 Arora等人的论文[《Provable bounds for learning some deep representations》](https://arxiv.org/abs/1310.6343 "Arora等人的论文"),大型、非常稀疏的深度神经网络,可以通过分析最后一层的激活的相关统计量,逐层构建最佳网络拓扑。 > 该论文50多页,涉及到大量数学计算,并且网上查到的资料较少,这里不做解释 ### 如何实现稀疏连接结构 目前大多数面向视觉的机器学习系统都是通过 **卷积** 来利用空间域的稀疏性 原文:Most current vision oriented machine learning systems utilize sparsity in the spatial domain just by the virtue of em- ploying convolutions. ### 稀疏连接的问题 现在计算机对 **稀疏数据进行计算的效率很低** ### 解决稀疏连接的问题 解决:根据论文《[On Two-Dimensional Sparse Matrix Partitioning: Models, Methods, and a Recipe](https://www.researchgate.net/publication/220412099_On_Two-Dimensional_Sparse_Matrix_Partitioning_Models_Methods_and_a_Recipe "On Two-Dimensional Sparse Matrix Partitioning: Models, Methods, and a Recipe")》,**将稀疏矩阵聚类为相对密集的子矩阵,会提高性能。** 在多个尺寸上进行卷积,然后再 **连接**,把相关性强的特征聚集到一起 # 模块1 论文中的模型图: [![](https://www.malaoshi.top/upload/0/0/1EF5WpVYtAyL.png)](https://www.malaoshi.top/upload/0/0/1EF5WpVYtAyL.png) 卷积过程图: [![](https://www.malaoshi.top/upload/0/0/1EF5XBNM4s5j.png)](https://www.malaoshi.top/upload/0/0/1EF5XBNM4s5j.png) 1. 采用不同大小的卷积核,意味着感受野的大小不同,可以得到不同尺度的特征 2. 卷积核大小采用1、3和5,目的: 1. 感受野的大小不同,可以得到不同尺度的特征 2. 方便对齐。设定卷积步长stride=1之后,只要分别设定pad=0、1、2,卷积结果的尺寸相同,可以直接拼接; 3. 文章说很多地方都表明 pooling 挺有效,所以Inception里面也嵌入了。 4. 网络越到后面,特征越抽象,而且每个特征所涉及的感受野也更大了,因此随着层数的增加,3x3和5x5卷积的比例也要增加。 5. 拼接意味着不同尺度特征的融合; ### 缺点: 使用`5x5`的卷积核会带来巨大的计算量 ### 计算量: 论文中第一个经过此模块的尺寸大小是:输入特征图尺寸:`28 × 28 × 192`,卷积核 `5 x 5 x 32`,输出特征图尺寸:`28 x 28 x 32` 根据 https://www.malaoshi.top/show_1EF53TtDvZ4C.html 可知: `5 * 5 * 192 * 28 * 28 * 32 = 120422400`(只算乘法) # 模块2 为解决模型1的缺点,作者提出模型2: 论文中的模型图: [![](https://www.malaoshi.top/upload/0/0/1EF5WpVsuOlO.png)](https://www.malaoshi.top/upload/0/0/1EF5WpVsuOlO.png) 卷积过程图: [![](https://www.malaoshi.top/upload/0/0/1EF5XP3M1sd7.png)](https://www.malaoshi.top/upload/0/0/1EF5XP3M1sd7.png) ### 3个黄色`1*1`卷积核的作用 在相同尺寸的感受野中叠加更多的卷积,能提取到更丰富的特征。 依据:Network in Network(NIN, https://arxiv.org/pdf/1312.4400.pdf) ### 2个红框`1*1`卷积核的作用 使用`1*1*96`和`1*1*16`的卷积核,是为了 **降维**,卷积后的特征图尺寸是`28x28x96`和`28x28x16` 再与后面的卷积核 `3*3*128`和`5*5*32`计算时,就会大大 **降低计算量** ### 瓶颈 像这种为了降维的卷积核,又称之为瓶颈,如下图: [![](https://www.malaoshi.top/upload/0/0/1EF5WTJseyMy.jpg)](https://www.malaoshi.top/upload/0/0/1EF5WTJseyMy.jpg) ### 降维后的计算量 与`1*1*16`的卷积核运算(降维),然后与`5*5*32`的卷积核做运算,两次卷积的计算量,如下(只算乘法): `1*1*16*28*28*192 + 5*5*32*28*28*16=2408448 + 10035200=12443648 ` 与模型1相比,少了1个0 ### 降维后是否会影响网络性能 降维后,虽然特征减少,但合理的运用降维,不会影响性能,而且会降低计算量 ### max pooling 在inception模块中有一个分支使用了max pooling,作者认为pooling也能起到提取特征的作用,所以也加入模块中。注意这个pooling的stride=1,pooling后没有减少数据的尺寸。 ### 拼接 对输入做了4个分支,分别用不同尺寸的filter进行卷积或池化,最后再拼接到一起,有以下作用: 1. 在多个尺度上同时进行卷积,能提取到不同尺度的特征。特征更为丰富也意味着最后分类判断时更加准确。 2. 利用稀疏矩阵分解成密集矩阵计算的原理来加快收敛速度。 举个例子下图左侧是个稀疏矩阵(很多元素都为0,不均匀分布在矩阵中),和一个2x2的矩阵进行卷积,需要对稀疏矩阵中的每一个元素进行计算;如果像右图那样把稀疏矩阵分解成2个子密集矩阵,再和2x2矩阵进行卷积,稀疏矩阵中0较多的区域就可以不用计算,计算量就大大降低。这个原理应用到inception上就是要在特征维度上进行分解!传统的卷积层的输入数据只和一种尺度(比如3x3)的卷积核进行卷积,输出固定维度(比如256个特征)的数据,所有256个输出特征基本上是均匀分布在3x3尺度范围上,这可以理解成输出了一个稀疏分布的特征集;而inception模块在多个尺度上提取特征(比如1x1,3x3,5x5),输出的256个特征就不再是均匀分布,而是相关性强的特征聚集在一起(比如1x1的的96个特征聚集在一起,3x3的96个特征聚集在一起,5x5的64个特征聚集在一起),这可以理解成多个密集分布的子特征集。这样的特征集中因为相关性较强的特征聚集在了一起,不相关的非关键特征就被弱化,同样是输出256个特征,inception方法输出的特征“冗余”的信息较少。用这样的“纯”的特征集层层传递最后作为反向计算的输入,自然收敛的速度更快。 [![](https://www.malaoshi.top/upload/0/0/1EF5XQBxxLXc.jpg)](https://www.malaoshi.top/upload/0/0/1EF5XQBxxLXc.jpg) 图4: 将稀疏矩阵分解成子密集矩阵来进行计算 3. 符合Hebbin赫布原理。 Hebbin原理是神经科学上的一个理论,解释了在学习的过程中脑中的神经元所发生的变化,用一句话概括就是fire togethter, wire together。赫布认为“两个神经元或者神经元系统,如果总是同时兴奋,就会形成一种‘组合’,其中一个神经元的兴奋会促进另一个的兴奋”。比如狗看到肉会流口水,反复刺激后,脑中识别肉的神经元会和掌管唾液分泌的神经元会相互促进,“缠绕”在一起,以后再看到肉就会更快流出口水。用在inception结构中就是要把相关性强的特征汇聚到一起。这有点类似上面的解释2,把1x1,3x3,5x5的特征分开。因为训练收敛的最终目的就是要提取出独立的特征,所以预先把相关性强的特征汇聚,就能起到加速收敛的作用。 # GoogLeNet [![](https://www.malaoshi.top/upload/0/0/1EF5WpQNcQn9.jpg)](https://www.malaoshi.top/upload/0/0/1EF5WpQNcQn9.jpg) [![](https://www.malaoshi.top/upload/0/0/1EF5WpQhwhYC.jpg)](https://www.malaoshi.top/upload/0/0/1EF5WpQhwhYC.jpg) ### 参数 [![](https://www.malaoshi.top/upload/0/0/1EF5WpXqKeER.png)](https://www.malaoshi.top/upload/0/0/1EF5WpXqKeER.png) ### 取消全连层 VGG网络的参数很多,是因为它在最后有两个4096的全连层! 采用了average pooling来代替全连接层 依据来自论文《Network In Network》 https://www.malaoshi.top/show_1EF5XPh0N0a9.html 但是,在最后还是加了一个全连接层,主要是为了方便finetune; ### 使用辅助分类器 避免梯度消失,作用: 1. 把梯度有效的传递回去,不会有梯度消失问题,加快了训练 2. 中间层的特征也有意义,空间位置特征比较丰富,有利于提成模型的判别力 ### 总结: 1. 采用了模块化的结构,方便增添和修改; 2. 网络最后采用了average pooling来代替全连接层,想法来自NIN,事实证明可以将TOP1 accuracy提高0.6%。但是,实际在最后还是加了一个全连接层,主要是为了方便以后大家finetune; 3. 虽然移除了全连接,但是网络中依然使用了Dropout ; 4. 为了避免梯度消失,网络额外增加了2个辅助的softmax用于向前传导梯度。文章中说这两个辅助的分类器的loss应该加一个衰减系数,但看caffe中的model也没有加任何衰减。此外,实际测试的时候,这两个额外的softmax会被去掉。 感谢: https://www.jianshu.com/p/cc830a6ed54b https://blog.csdn.net/shuzfan/article/details/50738394 https://blog.csdn.net/zgcr654321/article/details/90264871 https://zhuanlan.zhihu.com/p/52802896 https://blog.csdn.net/weixin_39953502/article/details/80966046 (v1-v4) https://www.cnblogs.com/leebxo/p/10315490.html https://www.jianshu.com/p/a2ad00eddbd5 原文出处:http://malaoshi.top/show_1EF5XEbYBokh.html