文章地址

本文介绍了 BN 在很深的 Resnet 中起到的作用:通过正则化使得网络最大训练深度增加。同时提出了一个替代 BN 的方法。

BN 在 Deep Resnet 中作用

一个朴素的 CNN 如果太多层,就很难训练的动。Resnet 通过 shortcut 使得梯度更轻松的传播,在这里 BN 发挥了很大的作用:BN 限制了每次 Conv 后 feature map 的大小。有了 BN 和 shortcut,Resnet 的深度甚至可以达到上万层。

通过试验发现,BN 通过缩小 conv 后的方差,使得 Resnet 的方差可以随着深度平稳增长,保持每层 conv 带来相等水平的贡献。

如果没有了 BN,假如每层 conv 都会带来上一层原有基础上 $\sigma$ 倍的方差,那么第 $n$ 层的 conv 会带来 $n-1$ 层基础上 $\sigma$ 倍的方差,相对于第一层 conv 就带来了 $\sigma^{n-1}$ 的方差。这种指数级的变化过于剧烈,导致越靠后的 conv,对结果的影响过于明显,使得较深的网络非常难以训练。

但是在实验中发现,BN 可以缩小每一层 conv 带来的方差,使得每层 conv 都带来相同方差,也就是说网络每层 conv 都贡献了相同规模的方差,使得整个网络方差随深度的变化是线性的。如图 Fig 4. 方差的增长于深度成正比,每层带来的影响都是一致的。

Fig 4.

对于方差变化是线性的网络,每一层方差的增长必然是前一层方差的 $1/n$ 倍。这与实验相符,批归一化将每层 conv 缩小到了 $1/\sqrt n$,正好保证了方差的线性增长。

如 Fig 3. 所示,该缩小因子很强大,可确保具备 10000 个残差块的网络 97% 的方差仅来自 10 个左右的 conv。

Fig 3.

替代 BN 的方法

既然我们知道了 BN 通过将 conv 缩小到 $1/\sqrt n$,保证方差的线性增长。那么我们如果手动设置一个参数 $\alpha$ 使得每一层的 $\alpha=1/\sqrt d$,其中 $d$ 为 res block 的数量,是不是也能起到于 BN 相同的作用呢?

文章将这种方法叫做 SkipInit,如图 Fig 1. 所示,分别为传统 Resnet 和 SkipInit。

Fig 1.

Experiment

Tab 2. 验证了不同 $\alpha$ 的设置在不同深度的 Resnet 下的表现。

Tab 2.

Fig 5. 说明使用 BN 可以提高 lr 和 batchsize。

Fig 5.

Fig 6. 不同情况下的最优 lr。

Fig 6.

Tab 3. 验证了不同情况下的最优准确率。

Tab 3.

文章目录