GoogLeNet Inception v1详解
GoogLeNet Inception v1
论文《Going Deeper with Convolutions》
1. 研究背景
提高神经网络的性能,最直接的方法就是增加神经网络的大小 ,大小包括了网络的深度和宽度。
但是一味地增加网络大小,会带来一些不利的影响:
- 神经网络的大小增加,会带来大量的参数,模型更容易出现过拟合问题;
- 神经网络的大小增加,会使模型在训练过程中的计算开销增加。
解决上述问题方法,在模型中引入稀疏性(sparsity),用一个稀疏的网络结构去代替现有的全连接网络结构 ,以减少网络中的参数数量和计算量。
卷积神经网络(convolutional neural network)就是通过使用卷积层向模型引入空间域的稀疏性。
使用稀疏结构还带来了一个新的问题,即计算机对于稀疏数据结构的运算效率比较低 。
2. 设计思路
文中也通过使用卷积层向模型引入稀疏性。
为了解决结果计算效率低的问题,文中参考了稀疏矩阵计算的文献,通过将稀疏矩阵聚集为一个相对稠密的矩阵的方法来提高矩阵乘法的运算性能。
文中还参考了《Robust object recognition with cortex-like mechanisms》中使用一系列不同大小的Gabor滤波器去处理图像的方法,尝试使用在一层中使用多个不同大小的filter,这也符合了稀疏矩阵聚集为稠密矩阵提高运算性能的思路。
3. 模型结构
3.1 Inception
平移不变形(translation invariance):经过一系列操作后,输入时目标的平移效果在输出中检测不到。例如CNN模型通过降维空间域的降维实现平移不变形。
基于CNN的平移不变形(translation invariance),模型通过多个卷积块构建。
文中提出了名为Inception的局部卷积块去逼近CNN的最优局部稀疏结构 ,以替代网络中的密集连接。
Inception通过将11、33、55的卷积层以及33的池化层的输出串联 (在通道维度进行合并,eg25625664 + 25625664 = 256256128),具体结构如下图。

上述Inception结构仍存在一些问题。
设卷积层的输入为(W1,W1,C1),输出为(W2,W2,C2),filter大小为s。此时,卷积操作的计算量为W2W2ssC1*C2。
从上述计算量表达式可以看出,55卷积层的计算量约为33卷积层的计算量的三倍。
由于55的计算开销过大,文中在Inception中加入11卷积层降维以减少计算量,同时可以增加网络的深度,并引入额外的非线性引入(ReLU)。引入1*1的Inception具体结构如下图。

到此为止,完整的Inception v1模块已经成型。
3.2 辅助分类器
考虑到层数相对较浅的模型在分类上也有很好的表现,GooLeNet中引入辅助分类器。
模型最终loss = 辅助分类器loss * weight + 主分类器loss。
辅助分类器可以看作是一个正则化器,可以在一定程度上防止梯度消失问题。
辅助分类器的具体结构见下图。

3.3 模型整体结构
GoogLeNet的大致结构如下图,其中auxiliary classifier n表示接在第n个Inception块后的辅助分类器。

stem块的具体结构如下图。

总体来看,GooLeNet模型共27层(含pooling层)。
