Inception系列
Inception
背景
一般来说,提升神经网络性能最直接的办法就是增加网络的尺寸,包括增加网络的深度和宽度两个方面。但这种方式存在一些问题:
参数太多,如果训练数据集有限,很容易产生过拟合;
网络越大,参数越多,计算复杂度越高,难以应用;
网络越深,容易出现梯度弥散问题,难以优化模型;
Inception-v1
深度研究 Inception Net模型之前,必须了解 Inception 网络的一个重要概念:
1×1卷积:1×1 卷积简单地将输入像素及其所有相应通道映射到输出像素。1×1卷积作为降维模块,一定程度上减少的计算量。
- 例如,在不使用1×1卷积的情况下执行5×5卷积,如下所示:
FLOPs运算次数:(14×14×48)×(5×5×480)= 112.9M
- 使用 1×1 卷积:
FLOPs运算次数
1×1卷积的操作数= (14×14×16)×(1×1×480)=1.5M
5×5卷积的操作数= (14×14×48)×(5×5×16 ) = 3.8M
相加后,1.5M + 3.8M = 5.3M
因此1×1卷积可以帮助减少模型大小,这可以在某种程度上帮助减少过度拟合问题;
降维初始模型
Inception v2
Inception v1架构的问题
Inception V1有时会使用5×5等卷积,导致输入维度大幅下降。这导致神经网络使用一些精度下降。其背后的原因是,如果输入维度下降得太快,神经网络容易丢失信息。 此外,与3×3相比,
当我们使用更大的卷积(如5×5 )时,复杂度也会降低. 我们可以在因式分解方面走得更远,即我们可以将3×3卷积分成1×3的非对称卷积,然后是3×1卷积。这相当于滑动一个具有与3×3卷积相同感受野但比*3×3便宜33%的两层网络。当输入维度很大但仅当输入大小为mxm时,这种分解不适用于早期层(m 在 12 到 20 之间)。根据 Inception V1 架构,辅助分类器提高了网络的收敛性。他们认为,通过将有用的梯度推到较早的层(以减少损失),它可以帮助减少深层网络中梯度消失问题的影响。但是,这篇论文的作者发现这个分类器在训练的早期并没有很好地提高收敛性。
Batch Normalization
在BN的论文里,作者提出了Internal Covariate Shift这个问题,即在训练神经网络的过程中,因为前一层的参数变化而导致每层的输入分布都在不断变化(the distribution of each layer’s inputs changes during training, as the parameters of the previous layers change)。这使得我们需要更低的学习率和更小心地进行参数初始化,导致我们难以充分构建一个具有饱满地非线性结构的模型,而这个现象就被称作Internal Covariate Shift。为了解决这个问题,Google提出了Batch Normalization(批规范化)。即在每次梯度下降前,对每个mini-batch做归一化操作来降低数据分布的影响。
小卷积和代替大卷积核
该架构还将 nXn 分解转换为1xn和 nx1 分解。正如我们上面讨论的,3×3 卷积可以转换为1×3 ,然后是 3×1 卷积,与*3×3相比,计算复杂度降低了 33% 。
Inception v3
Inception v3 类似于 Inception v2,并做了以下改动:
使用 RMSprop 优化器;
辅助分类器全连接层的BN;
使用 7×7 分解卷积;
Inception v4
将 Inception 模块和残差连接 结合起来。
EmbOding!9196#CN360