算法简介
GoogLeNet 专注于加深网络结构,同时引入了新的基本结构————Inception模块,以增加网络的宽度。GoogLeNet一共22层,没有全连接层,在2014年的ImageNet图像识别挑战赛中获得了冠军。
GoogLeNet最初始的想法很简单,想要更好的预测效果,就要从网络深度和网络宽度2个角度出发增加网络的复杂度。但是这个思路有明显的问题:
- 更复杂的网络意味着更多的参数,就是ILSVRC这种有1000类标签的数据集也很容易过拟合。
- 更复杂的网络需要消耗更多的计算资源,卷积核的设计不合理,会导致卷积核中有大量的参数没有被完全利用(多数权重趋近于0),会导致大量计算资源的消耗。
Inception v1
GoogLeNet 引入了inception模块来解决上述问题,这里解释一下inception模块设计的思路
设计思路
首先,神经网络的权重矩阵是稀疏的,如果能将下列 (1)式的卷积运算 转化成 (2)+ (3)两个卷积运算,那么就可以大大降低运算量。
(1)
(2)
(3)
同样的道理。应用在降低卷积神经网络的计算量上,就有了下图所示的Inception结构。在这个结构中,将原始矩阵的特征转换为不同尺度的聚类,就可以使计算更有效,收敛更快。
其次,inception结构仍然有很大的计算量,为了降低计算成本,作者在 3x3 和 5x5 卷积层之前添加了额外的 1x1 卷积层,来限制输入信道的数量。尽管添加额外的卷积操作似乎是反直觉的,但是 1x1 卷积比 5x5 卷积要廉价很多,而且输入信道数量减少也有利于降低算力成本。需要注意的是,1x1 卷积在最大池化层之后,而不是之前。添加了这些额外的 1x1 卷积之后,就构成了可实现降维的Inception模块:
结构图
Inception V2 - v4
Inception 第二版其实是在输入的时候增加了批量标准化操作(batch_normal)。加入标准化操作后,模型收敛更快,学习起来更高效。把5x5的卷积改成两个3x3的卷积串联,这样可以增加网络深度,并减少运算量。
第三版把GoogLeNet中的一些 7x7 卷积,变成了 1x7 和 7x1两层卷积串联。 3x3 变成了 1x3 和 3x1 两层卷积串联。这样做加速了计算,还增加了网络的非线性,较小过拟合的概率。另外,网络的输入特征图尺寸从 224x224 变成了 299x299。
第四版实在上一版的基础上增加了ResNet方法以及一些微小的改变。引入ResNet方法并不是为了提高深度和准确度,而是为了提高训练速度。
参考资料
v1 Going deeper with convolutions
v2 Batch Normalization: Accelerating Deep Network Training b y Reducing Internal Covariate Shift
v3 Rethinking the Inception Architecture for Computer Vision
v4 Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning