Rethinking the Usage of Batch Normalization and Dropout in the Training of Deep Neural Networks 阅读笔记与实战

阅读札记

Abstract

  1. 结果:提出了一个全新的技巧提升神经网络训练效率;
  2. 基本思想:对神经网络输入进行白化可以达到一个更快的收敛速度;
  3. 做法:在每一个权重层前面引入了一个全新的 Independent-Component(IC) layer;
  4. 寻找这种方式前遇到的问题:对输入进行白化处理是一个计算量很大的操作;
  5. 具体的做法与结果:将两个流行的方法( Dropout 和 Batch Normalization )结合,最终使得神经元之间的互信息可以减小为原来的 $p^2$倍,相关系数可以减小为原来的$p$倍,最终实现了更稳定的训练流程,更快的收敛速度以及更好地表现;

1. Introduction

  1. 一个重要的发现:神经系统的表征能力随着网络中独立神经元数量的增多而增强;
  2. independent component analysis (ICA) = zero-phase component analysis (ZCA) + rotates the whitened activations to obtain the independent ones;
  3. 什么是 ZCA:可以参考我的上一篇文章 ZCA
  4. 文中所谓的 Independent Component (IC) layer 指的是:{-BatchNorm-Dropout-};
  5. IC layer 在需要放置在神经网络的什么位置:权重层之前,具体会做实验来验证;
  6. 文章的两大贡献:
    • 通过结合两种流行做法 BN 和 Dropout,提出了一种新的层 —— IC 层;并严格证明了 IC 层可以降低神经元之间的互信息和相关系数,最终加快了模型的收敛速度;
    • 除了理论证明,作者同时在 CIFAR10/100 以及 ILSVRC2012 数据集上进行了实验,结果显示 IC 层实现了更稳定的训练流程,更快的收敛速度以及更好地表现;

2. Preliminary: the Influence of Uncorrelated Components

为了简单起见,我们在这里考虑一个最基础的神经网络,它只由线性层组成。$A$ 记为近似函数的参数,输入为 $x$,输出为 $y$。以下是我们想要最小化的目标函数$$ min_A \Sigma_{i=1}^{n} \left | y_i - Ax_i \right | ,(1)$$ 那么基于梯度下降方法,最优方法中的 $A$ 必须满足 $$A \Sigma_{i=1}^{n} x_ix_i^T = \Sigma_{i=1}^{n} yx_i^T。 (2)$$

那么,假设所有数据都位于局部子空间中,则$\Sigma_{i=1}^{n} x_ix_i^T$就可以由一个低维矩阵表示,这也就意味着存在多种方法来优化 Eq(2)。那么神经网络的训练过程就会变得很不稳定。此外,当我们用梯度下降法对 $A$ 进行优化时,它的收敛速度依赖于 $max(Eigen_i)/min(Eigen_i)$(其中,$Eigen_i$ 为海塞矩阵的特征值)。因此如果 $x_i$ 之间的相关性很小,那么收敛速度会大大提高。

3. Generating Independent Components: IC Layer

由于 independent component analysis (ICA) = zero-phase component analysis (ZCA) + rotates the whitened activations。文中作者选择了 BN 来替代 ZCA,Dropout 来替代 rotates the whitened activations to obtain the independent ones。

IC layer 在 Keras 中的实现也并不复杂。

from keras.layers.normalization import BatchNormalization as BatchNorm
from keras.layers.core import Dropout

def IC(inputs, p):
    x = BatchNorm(inputs) # replace ZCA
    x = Dropout(p)(x)   # replace rotation
    return x

下面主要讨论一下 Dropout 在这其中扮演的角色。

3.1 Mutual Information and Entropy

互信息可以用来度量两个信息源之间的依赖关系,即$$I(x;y) = \Sigma_(x,y) P(x,y) log\frac{P(x,y)}{P(x)P(y)}。$$也就是说只有当 $I(x;y) = 0$ 时,$x$和$y$才是独立的。假设有一个随机门$g_i$,它同$x_i$是相互独立的,它的作用是来修改标准激活值$x_i$,对于$g_i$,它以概率$p$保持为一个常数,其他情况下为0。

Theorem 1. 假设 $g_i$ 是由一个均值为$p$的伯努利分布产生的一系列独立的随机变量。设 $\hat{x_i} = g_ix_i$,那么有$$I(\hat{x_i};\hat{x_j}) = p^2 I(x_i;x_j), {\forall} i \neq j, $$ $$H(\hat{x_i}) = pH(x_i) + \epsilon_p, $$
其中,$H$ 代表香农熵,$\epsilon_p$代表伯努利分布的熵。

接下来就是对定理一的证明了,如图所示。
证明1

这样互信息就减少为原来的$p^2$倍了。

那么我们再来看一下香农熵的变化。(这一部分的证明还有一部存疑,如果大家想通了可以告知我)
证明2

3.2. Correlation Coefficient and Expectation

此部分进一步说明了 Dropout 在优化过程中的作用。
假设第 $i$ 个神经元与第 $j$ 个神经元的标准激活输出为$x_i$和$x_j$,则他们之间的相关系数可以表示为,$$c_{ij} = E(x_ix_j)。(4)$$ 那么经过 Dropout 操作之后,我们有$$\hat{c_{ij}} = \frac{1}{\sigma_i\sigma_j}E(g_ix_ig_jx_j),(5)$$
其中,$\sigma_i = \sqrt{E(g_ix_i)^2}$表示$x_i$的标准差。

有由于$g_i$和$x_i$之间相互独立,则我们有$\sigma_i^2 = Eg_i^2x_i^2 = Eg_i^2Ex_i^2 = p^2$。又因为 $g_i$ 之间是相互独立的,且与$x_i$相互独立,因此$g_ig_j$与$x_ix_j$之间相互独立,因此有$$E[(g_ig_j - v_{ij})(x_ix_j - \mu_{ij})] = 0, (6)$$
其中,$v_{ij}$和$\mu_{ij}$分别是$g_ig_j$与$x_ix_j$的均值,易得$v_{ij} = p^2$,$\mu_{ij} = 0$,因此Eq(6)可以变成$$E[(g_ig_j - p^2)x_ix_j] = 0 (7)$$
再结合(5)有,$$\hat{c_{ij}} = \frac{1}{\sigma_i\sigma_j}p^2E(x_ix_j) = pc_{ij}。(8)$$

因此当引入 Dropout 操作之后,任意两个神经元之间的相关系数都减小到原来的 $p$ 倍。但是这种方法同样存在缺点,因为当引入 Dropout 操作时,$x_i$的均值就变成了$px_i$。这样就意味着,如果当我们为了使得神经元之间的相关性更小而选择更小的$p$时,我们同时也损失了更多的信息。

4. Experiments and Results

4.1. Reformulating ResNet Architectures

这篇文章选择了 3 种不同的残差单元进行试验,每种的不通点在于它们的 short path,这样做主要是为了找到表现最好的残差单元。