本文主要是介绍努力成为优秀视觉工程师的一天(四),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1. GoogleNet网络的深度理解
GoogleNet相比AleXNet和VGG网络,最大的改进就是引入了Inception模块,为什么引入呢?根据前面神经网络的经验,我们需要通过增加网络深度(层数)来提高训练效果,但缺点是:层数多导致参数多,容易引起过拟合、梯度消失等问题,因此呢,解决上述缺点的根本方法是使用“稀疏连接结构”(为什么呢?一方面,现实中的生物神经网络连接本身就是稀疏的;另一方面,Arora等人证明,对于大规模的稀疏网络,可通过分析前一层激活值的相关统计数据和对高度相关的输出神经元聚类来逐层构建最优的网络结构,这种方法可以在不损失性能的前提下降低网络参数量。)----说实话,我觉得这个涉及到的数学知识比较深,要深入的去理解并不容易~
然而,计算机软硬件对非均匀稀疏数据的计算效率很差,那么有没有一种方法既能够保持网络结构的稀疏性,并且充分利用密集矩阵的高效计算?还真有。大量文献表明对稀疏矩阵进行聚类为密集矩阵可以提高性能。Inception module就是基于这种思想提出来的。
2. Inception是什么?(参考这里:https://zhuanlan.zhihu.com/p/73857137,非常通俗易懂)
Inception是把多个卷积或池化操作,放在一起组装成一个网络模块,设计神经网络时以模块为单位去组装整个网络结构。
3. GoogleNet相比之前的网络有哪些具体的改进?
- 采用了模块化的结构(Inception结构),Inception module的提出主要考虑多个不同size的卷积核能够hold图像当中不同cluster的信息;
- 根据Network-in-Network模型,1*1的模型能够有效进行降维(使用更少的参数来表达尽可能多的信息),NIN最重要的是降维,解决了计算瓶颈,从而解决网络尺寸受限的问题。这样就可以增加网络的深度和宽度了,而且不会有很大的性能损失。
- 网络最后采用了average pooling(平均池化)和Dropout方法来代替全连接层,不仅起到降维作用,还在一定程度上防止过拟合。
- 为了避免梯度消失,网络额外增加了2个辅助的softmax用于向前传导梯度(辅助分类器)
总之,GoogLeNet V1出现的同期,性能与之接近的大概只有VGGNet了,并且二者在图像分类之外的很多领域都得到了成功的应用。但是相比之下,GoogLeNet的计算效率明显高于VGGNet,大约只有500万参数,只相当于Alexnet的1/12(GoogLeNet的caffemodel大约50M,VGGNet的caffemodel则要超过600M)。
这篇关于努力成为优秀视觉工程师的一天(四)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!