在这篇文章Inception网络模块(Inception Network Module)中已经介绍了Inception网络组成模块的基本原理。原论文中基本模块如下图所示:

cnn神经网络模型 知乎 神经网络inception_cnn神经网络模型 知乎

下面讨论如何将这些模块组合起来,构建属于自己的Inception网络,Inception网络又叫做GoogLeNet。

cnn神经网络模型 知乎 神经网络inception_算法_02

 

Inception模块会将之前层的激活或者输出作为它的输入,上图中这是一个28×28×192的输入,和之前视频中的一样。

①第三行:先通过一个1×1的层,再通过一个5×5的层,1×1的层可能有16个通道,而5×5的层输出为28×28×32,共32个通道。

②第二行:为了在这个3×3的卷积层中节省运算量,你也可以做相同的操作,这样的话3×3的层将会输出28×28×128。

③第一行:直接通过一个1×1的卷积层,这时就不必在后面再跟一个1×1的层了,这样的话过程就只有一步,假设这个层的输出是28×28×64。

④第四行:最后是池化层。

为了能在最后将这些输出都连接起来,我们会使用same类型的padding来池化,使得输出的高和宽依然是28×28。但注意,如果你进行了最大池化,即便用了same padding,3×3的过滤器,stride为1,其输出将会是28×28×192,其通道数(the number of channels)或者说深度(depth)与这里的输入(通道数)相同。所以看起来它会有很多通道,我们实际要做的就是再加上一个1×1的卷积层,去进行我们在1×1卷积层的视频里所介绍的操作,将通道的数量缩小,缩小到28×28×32。也就是使用32个维度为1×1×192的过滤器,所以输出的维度其通道数缩小为32。这样就避免了最后输出时,池化层占据所有的通道。这些操作之后,将这些方块全都连接起来(do channel concatenation)。在这过程中,把得到的各个层的通道都加起来,最后得到一个28×28×256的输出。这就是一个Inception模块(Inception module),而Inception网络所做的就是将这些模块都组合到一起。

cnn神经网络模型 知乎 神经网络inception_cnn神经网络模型 知乎_03

上图是一张取自Szegety et al的论文中关于Inception网络的图片,图中有许多重复的模块,可能整张图看上去很复杂,但如果你只截取其中一个环节,就会发现这是Inception模块。所以Inception网络只是很多这些你学过的模块在不同的位置重复组成的网络,所以如果你理解了之前所学的Inception模块,你就也能理解Inception网络。

cnn神经网络模型 知乎 神经网络inception_人工智能_04

事实上,论文中还有一些分支(上图绿色笔记),在网络的最后几层,通常称为全连接层(fully connected layer),在它之后是一个softmax层来做出预测,这些分支所做的就是通过隐藏层来做出预测,所以这其实是一个softmax输出。这是另一条分支(绿色笔记),它也包含了一个隐藏层,通过一些全连接层,然后有一个softmax层来预测,输出结果的标签。这个可以看做Inception网络的一个细节它确保了即便是隐藏单元和中间层也参与了特征计算,它们也能预测图片的分类。在Inception网络中,起到一种调整的效果,并且能防止网络发生过拟合。

最后,有个有趣的事实,Inception网络这个名字又是缘何而来呢?Inception的论文引用了这个网址(http://knowyourmeme.com/memes/we-need-to-go-deeper),连接到这幅图片上:

cnn神经网络模型 知乎 神经网络inception_神经网络_05

如果你看过Inception(盗梦空间)这个电影,你应该能看懂这个由来。作者其实是通过它来表明了建立更深的神经网络的决心,他们正是这样构建了Inception。

自从Inception模块诞生以来,经过研究者们的不断发展,衍生了很多新的版本。你会发现人们使用这些新版本的算法效果也一样很好,比如Inception V2、V3以及V4,还有一个版本引入了跳跃连接(skip connections)的方法,有时也会有特别好的效果。通过这个视频,你应该能去阅读和理解这些Inception的论文,甚至是一些新版本的论文。

说明:记录学习笔记,如果错误欢迎指正!转载请联系我。