卷积神经网络之-BN-Inception / Inception-v2

622 阅读3分钟

大纲

简介

论文地址:arxiv.org/abs/1502.03…

Inception 的第二个版本也称作 BN-Inception,该文章的主要工作是引入了深度学习的一项重要的技术 Batch Normalization (BN) 批处理规范化。 BN 技术的使用,使得数据在从一层网络进入到另外一层网络之前进行规范化,可以获得更高的准确率和训练速度

题外话:BN-Inception 在 ILSVRC 竞赛数据集上分类错误率是 4.8%,但是该结果并没有提交给 ILSVRC 官方。

为什么需要 BN 技术?

BN 技术可以减少参数的尺度和初始化的影响,进而可以使用更高的学习率,也可以减少 Dropout 技术的使用

BN 有效性

网络的输入输出表达式一般表示为:Y=F(W·X+b) ,其中 F 是 sigmoid 函数,如下图所示,蓝色虚线是 sigmoid 函数,橙色曲线是 sigmoid 函数的导数。从中可以看出,sigmoid 函数在两端容易使导数为 0,而且随着网络深度的加深,这种影响程度更严重,会导致训练速度变慢。

如果将激活函数换成 ReLU(x)=max(x,0) 激活(见下图),可以解决 sigmoid 存在的问题,但是使用 Relu 也需要细心的设置学习率和进行参数初始化。

随着训练的不断进行,数据的分布保持不变对训练是有利的,使用BN前后对训练的影响可以对照下图

使用BN前后对训练的影响.png

BN 原理

Batch Normalization原理

Batch Normalization 中的 batch 就是批量数据,即每一次优化时的样本数目,通常 BN 网络层用在卷积层后,用于重新调整数据分布。假设神经网络某层一个 batch 的输入为 X=[x1,x2,...,xn],其中 xi 代表一个样本,n 为 batch size。步骤如下:

  • 首先求解一个 batch 数据的均值 \mu_{\mathcal{B}}
  • 求解一个 batch 的方差 \sigma_{\mathcal{B}}^{2}
  • 然后对每一个数据进行规范化 \widehat{x}_{i} \leftarrow \frac{x_{i}-\mu_{\mathcal{B}}}{\sqrt{\sigma_{\mathcal{B}}^{2}+\epsilon}},\epsilon是为了防止分母为 0
  • 并使用其他可学习的参数 γ 和 β 进行缩放和平移,这样可以变换回原始的分布,实现恒等变换

最终得到的输出表达式是 Y=F(BN(W ⋅ X+b))

在测试阶段,我们利用 BN 训练好模型后,我们保留了每组 mini-batch 训练数据在网络中每一层的\mu_{\mathcal{batch}}\sigma_{\mathcal{batch}}^{2} 。此时我们使用整个样本的统计量来对 Test 数据进行归一化。

实验结果

MNIST 数据集

在 MNIST 数据上使用一个简单的网络比较使用BN技术和未使用BN技术训练精度的差异,如上图(a);上图 (b, c) 代表未使用 BN 技术和使用 BN 技术输入数据的分布,可以看出,使用 BN 技术,输入数据的分布更加稳定。

ILSVRC 数据集

将 BN 运用到 GoogLeNet 网络上,同时将 Inception 模块中的 5×5 卷积替换成 2 个 3×3 卷积,将 5x5 卷积分解为两个 3x3 卷积运算,以提高计算速度。虽然这看似违反直觉,但 5x5 卷积比 3x3 卷积多 2.78 倍的参数量。因此,堆叠两个 3x3 卷积实际上可以提高性能。

在数据集 ILSVRC 上,使用 BN 技术并设计使用不同参数的 Inception 的网络,对比其精度,结果如下:使用 BN 技术,可以显著提高训练速度;对比 BN-×5 和 BN-×30,可以观察到,使用大的学习率可以提高训练速度。

与其他网络性能对比

参考: