第十四节,卷积神经网络之经典网络Inception(四) (2)

GoogLeNet在2014年获得了ILSVRC竞赛的冠军,GoogLeNet除了层数增加到22层之外,主要的创新在与它的Inception,这是一种网中网(Network In Network)的结构,即原来的节点也是一个网络。用了Inception之后整个网络结构的宽度和深度都可扩大,能带来2到3倍的性能提升,并且不会过拟合。

除此之外,GoogLeNet网络去除了最后的全连接层,用全局平均池化层(即使用与图片尺寸相同的过滤器来做平均池化)来取代它。

这么做的原因是:在以往的AlexNet和VGGNet网络中,全连接层几乎占据了90%的参数,占用了过多的运算内存使用率,而且还会引起过拟合。GoogLeNet的做法去除全连接层,使得模型训练更快并且减轻了过拟合,之后的GoogLeNet的Inception还在继续发展,目前已经有v2,v3,v4版本,但所有的这些变体都建立在同一种基础的思想上,主要针对解决深层网络的以下三个问题:

参数太多,容易过拟合,训练数据有限

网络越大计算复杂度越大,难以应用

网络越深,梯度越往后梯度容易消失

Inception的核心思想是要通过增加网络深度和宽度的同时减少参数的方法来解决问题,深度也就是网络中的层数,宽度指每层中所用到的神经元的个数。Inception v1有22层深,比AlexNet的8层或者VGG的16,19层更深,但其计算量只用15亿浮点运算,同时只用500万的参数,仅为AlexNet的参数(6000万)的1/12,却有着更高的准确率。

下面会详细介绍Inception模块。

构建卷积层时,你要决定过滤器的大小究竟是 1×1, 3×3 还是 5×5,或者要不要添加池化层。而 Inception 网络的作用就是代替你来决定,虽然网络架构因此变得更加复杂,但网络表现却非常好,我们来了解一下其中的原理。

例如,这是 28×28×192 维度的输入, Inception 网络或 Inception 层的作用就是代替人工来确定卷积层中的过滤器类型,或者确定是否需要创建卷积层或池化层,我们演示一下。

第十四节,卷积神经网络之经典网络Inception(四)

如果使用 1×1 卷积,输出结果会是 28×28×#(某个值),假设输出为 28×28×64。

第十四节,卷积神经网络之经典网络Inception(四)

如果使用 3×3 的过滤器,那么输出是 28×28×128。然后我们把第二个值堆积到第一个值上,为了匹配维度,我们应用 same 卷积,输出维度依然是 28×28,和输入维度相同,即高度和宽度相同。

第十四节,卷积神经网络之经典网络Inception(四)

或许你会说,我希望提升网络的表现,用 5×5 过滤器或许会更好,我们不妨试一下,输出变成 28×28×32,我们再次使用 same 卷积,保持维度不变。

第十四节,卷积神经网络之经典网络Inception(四)

或许你不想要卷积层,那就用池化操作,得到一些不同的输出结果,我们把它也堆积起来,这里的池化输出是 28×28×32。为了匹配所有维度,因为如果输入的高度和宽度为 28×28,则输出的相应维度也是28×28。我们需要对最大池化使用 padding,它是一种特殊的池化形式,然后再进行池化,padding 不变,步幅为 1。

这个操作非常有意思,但我们要继续学习后面的内容,一会再实现这个池化过程。

第十四节,卷积神经网络之经典网络Inception(四)

有了这样的 Inception 模块,你就可以输入某个量,因为它累加了所有数字,这里的最终输出为 32+32+128+64=256。 Inception 模块的输入为 28×28×129,输出为 28×28×256。这就是 Inception 网络的核心内容,提出者包括 Christian Szegedy、刘伟、贾阳青、Pierre Sermanet、Scott Reed、 Dragomir Anguelov、 Dumitru Erhan、 Vincent Vanhoucke 和 Andrew Rabinovich。基本思想是 Inception 网络不需要人为决定使用哪个过滤器或者是否需要池化,而是由网络自行确定这些参数,你可以给网络添加这些参数的所有可能值,然后把这些输出连接起来,让网络自己学习它需要什么样的参数,采用哪些过滤器组合。Inception的这种结构不仅增加了网络的宽度,还增减了网络对尺度的适应性。

下面我们来考虑一下Inception这种结构的计算成本,我们以5×5 过滤器为例 :

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgydfd.html