大纲
论文地址:https://arxiv.org/abs/1502.03167
Inception 的第二个版本也称作 BN-Inception,该文章的主要工作是引入了深度学习的一项重要的技术 Batch Normalization (BN) 批处理规范化。BN 技术的使用,使得数据在从一层网络进入到另外一层网络之前进行规范化,可以获得更高的准确率和训练速度
题外话:BN-Inception 在 ILSVRC 竞赛数据集上分类错误率是 4.8%,但是该结果并没有提交给 ILSVRC 官方。
BN 技术可以减少参数的尺度和初始化的影响,进而可以使用更高的学习率,也可以减少 Dropout 技术的使用
网络的输入输出表达式一般表示为: ,其中 F 是 sigmoid 函数,如下图所示,蓝色虚线是 sigmoid 函数,橙色曲线是 sigmoid 函数的导数。从中可以看出,sigmoid 函数在两端容易使导数为 0,而且随着网络深度的加深,这种影响程度更严重,会导致训练速度变慢。
如果将激活函数换成 ReLU (x)=max (x,0) 激活(见下图),可以解决 sigmoid 存在的问题,但是使用 Relu 也需要细心的设置学习率和进行参数初始化。
随着训练的不断进行,数据的分布保持不变对训练是有利的,使用 BN 前后对训练的影响可以对照下图
使用 BN 前后对训练的影响
Batch Normalization 原理
Batch Normalization 中的 batch 就是批量数据,即每一次优化时的样本数目,通常 BN 网络层用在卷积层后,用于重新调整数据分布。假设神经网络某层一个 batch 的输入为 X=[x1,x2,...,xn],其中 xi 代表一个样本,n 为 batch size。步骤如下:
最终得到的输出表达式是 Y=F(BN(W ⋅ X+b))
在测试阶段,我们利用 BN 训练好模型后,我们保留了每组 mini-batch 训练数据在网络中每一层的 与 。此时我们使用整个样本的统计量来对测试数据进行归一化。
在 MNIST 数据上使用一个简单的网络比较使用 BN 技术和未使用 BN 技术训练精度的差异,如上图 (a);上图 (b, c) 代表未使用 BN 技术和使用 BN 技术输入数据的分布,可以看出,使用 BN 技术,输入数据的分布更加稳定。
将 BN 运用到 GoogLeNet 网络上,同时将 Inception 模块中的 5×5 卷积替换成 2 个 3×3 卷积,将 5x5 卷积分解为两个 3x3 卷积运算,以提高计算速度。虽然这看似违反直觉,但 5x5 卷积比 3x3 卷积多 2.78 倍的参数量。因此,堆叠两个 3x3 卷积实际上可以提高性能。
在数据集 ILSVRC 上,使用 BN 技术并设计使用不同参数的 Inception 的网络,对比其精度,结果如下:使用 BN 技术,可以显著提高训练速度;对比 BN-×5 和 BN-×30,可以观察到,使用大的学习率可以提高训练速度。
参考: