GoogLeNet,后更名为Inception v1,是一种用于计算机视觉的卷积神经网络(CNN),由谷歌的研究人员于2014年提出。它在2014年ImageNet大规模视觉识别挑战赛(ILSVRC14)中获胜,显著降低了图像分类的错误率。该架构在历史上具有重要意义,是早期将主干(数据输入)、主体(数据处理)和头部(预测)分离的CNN之一,这一设计在现代大多数CNN架构中仍被沿用。
“GoogLeNet”这一名称是对LeNet的致敬,LeNet是Yann LeCun于1998年提出的CNN,两者的共同点在于都是CNN。团队还将其称为“Inception”,源于“我们需要更深入”的互联网迷因,这个短语出自2010年电影《盗梦空间》。由于后续版本相继发布,原始架构被更名为“Inception v1”。模型和代码以Apache 2.0许可证在GitHub上发布。
架构与关键创新
Inception v1是一种深度CNN,由22层组成,其中大部分是“Inception模块”。原始论文将Inception模块描述为Network in Network方法和Arora等人(2014)工作的“逻辑结晶”。每个Inception模块并行应用不同大小(1x1、3x3、5x5)的多个卷积滤波器以及池化,然后将其输出拼接在一起,使网络能够捕获不同尺度的特征。
由于其深度,Inception v1面临梯度消失问题。团队通过在网络深度的三分之一和三分之二处插入两个“辅助分类器”来解决这一问题。损失函数是三个分类器的加权和:L = 0.3 L_aux1 + 0.3 L_aux2 + L_real。这些辅助分类器在训练完成后被移除。该问题后来被ResNet架构更根本地解决。
该架构由三个部分堆叠而成:
- 主干(数据输入):最初几个卷积层执行数据预处理,将图像下采样到较小尺寸。
- 主体(数据处理):后续众多Inception模块执行大部分数据处理工作。
- 头部(预测):最后的全连接层和softmax为图像分类生成概率分布。
Inception v2
Inception v2于2015年发布,其论文更以提出批归一化而闻名。它拥有1360万个参数。相比Inception v1,它通过添加批归一化并移除dropout和局部响应归一化进行了改进,研究人员发现使用批归一化后这些操作变得不再必要。
Inception v3
Inception v3于2016年发布。它通过使用分解卷积改进了Inception v2。例如,单个5x5卷积可以分解为两个堆叠的3x3卷积,两者都具有5x5的感受野。5x5卷积核有25个参数,而分解版本有18个,使得分解版本在参数效率上更高。团队通过实验发现分解卷积有助于提升性能。
它还引入了一种通过拼接卷积层和池化层输出来实现维度缩减的方法。例如,一个尺寸为35x35x320的张量可以通过步长为2的卷积缩减为17x17x320,通过池化大小为2x2的最大池化缩减为17x17x320,然后将两者拼接为17x17x640。
Inception v3还在训练过程中移除了最低的辅助分类器,发现辅助头部起到了正则化的作用。此外,它提出了标签平滑正则化:对于标签为c的图像,模型不再预测独热分布δ_c,而是预测平滑分布(1 - ε)δ_c + ε/K,其中K是类别总数。
Inception v4与Inception ResNet
2017年,团队发布了Inception v4、Inception ResNet v1和Inception ResNet v2。Inception v4是一项增量更新,采用了更多分解卷积和其他经实验发现能提升基准性能的复杂设计。Inception ResNet v1和v2都是Inception v4的修改版本,在每个Inception模块中加入了残差连接,受到ResNet架构的启发。
Xception
Xception(“极端Inception”)于2017年发表。它是一个线性堆叠的深度可分离卷积层,并带有残差连接。该设计基于一个假设:在CNN中,特征图的跨通道相关性和空间相关性可以完全解耦。每个Xception网络的训练在60块K80 GPU上耗时3天,即大约0.5 petaFLOP·天。
Inception系列对深度学习在计算机视觉领域的发展产生了深远影响,其架构原则至今仍继续影响着现代CNN的设计。