上一期,我们一起学习了深度学习卷积神经网络中的经典网络之LeNet-5和AlexNet,
深度学习三人行(第10期)----CNN经典网络之LeNet-5和AlexNet
接下来我们一起学习下关于CNN中的另一个比较经典的网络GoogLeNet的相关知识,学习的路上我们多多交流,共同进步。本期主要内容如下:
GoogLeNet网络是由Christian Szegedy在Google Research中发展起来的,该网络赢得2014年ILSVRC的冠军,成功的把top-5的错误率降到了7%,很大一个原因就是因为这个网络比之前介绍的CNN有更深的层。虽然层数更深,但是权重参数却是更少,比前面学的AlexNet网络要少上10倍。为什么呢?
一. Inception Module
那是因为该网络中有很大一部分的子网络是由如下图的Inception Module组成,我们来看一下下面的这个Inception Module:
其中表示“3x3+1(S)”表示该层的卷积核大小为3x3,stride为1,S means SAME padding。从上面的网络可以看出,首先输入信号被copy并输入到四个不同的层中,所有的卷积层都用ReLU激活函数。注意到上面的卷积层用的分别用1x1, 3x3, 5x5的卷积核,这样有助于捕捉到不同尺度的pattern。还有每个层都用了SAME padding,这就意味着,输入图像的宽高和输出的宽高是一致的,这就能够使得最终的Depth Concat能够实现(不同size的图像无法叠加)。在TensorFlow中,Depth Concat的实现是由concat()函数实现的,将其中的参数axis设为3.
我们可能已经发现,为什么会有一些卷积核的size是1x1呢?由于只有一颗像素,所以这些卷积层其实是无法获取任何特征的。事实上,这种层有两个目的:
每一个卷积层中卷积核的数量都是一个超参数,这就意味着一个Inception Module就有6个超参数需要调节。
二. GoogLeNet 构成
来我们一起看下GoogLeNet的构成,如下图。图中包含有9个inception module(图中带有螺旋形的标识)。inception module上的6个数字分别对应上图中每一个卷积层的输出个数。并且图中所有的卷积层都使用ReLU激活函数。
我们来一起看下这个网络:
上面的这个图相对来说更简单一些,原始的GoogLeNet在第三个和第六个inception module顶端还包含了两个辅助的分类器,他们都是由一个均值池化层,一个卷积层,两个全连接层和一个softmax激活层组成。在训练期间,他们损失的70%被加到网络整体损失中,这样做是为了防止梯度消失,并且正则化网络。然而,效果却相对较小。
三. 小结
今天,我们一起学习了卷积神经网络的经典框架GoogLeNet网络的组成,以及其原理,希望其组成能够对我们构建网络有所启发,在学习的路上,我们共同进步,多谢有你。