Xavier Initialization

又名 Glorot Initialization。

思路与推导

为了使得样本空间(feature)与类别空间(label)的映射相对稳定,避免「消失」或「爆炸」,Xavier 试图保持每一个网络层的输入和输出的方差一致。我们将网络层简化为 $Z = WX$,其中 $X$、$Z$、$W$ 分别为该层的输入、输出和参数,并且 $X$ 与 $W$ 相互独立。假设参数所在层的输入维度为 $m$(也称为「fan-in」扇入),输出维度为 $n$(也称为「fan-out」扇出),那么该网络层输出的方差 $D[Z]$ 计算如下:

$$ \begin{aligned} D[Z] &= D[WX] \\ &= \sum_{i=1}^n D[w_ix_i] \\ &= \sum_{i=1}^n D[w_i]D[x_i] \\ &= n D[w_i]D[x_i] \\ \end{aligned} $$

为了使该层的输入与输出的方差尽量一致,则有:

$$ \begin{aligned} D[Z] &= D[X] \\ D[W] &= \frac{1}{n} \\ \end{aligned} $$

又因为正向传播与反向传播的输入层、输出层调换方向,因此可以使 $D[W] = \frac{2}{m + n}$。

至此,只需要用一个方差为 $D[W] = \frac{2}{m + n}$ 的分布来初始化模型权值,即可保证每层的输入与输出的方差期望一致。

如果想使用均匀分布,那么可以从 $[-\sqrt{\frac{6}{m + n}}, \sqrt{\frac{6}{m + n}}]$ 中均匀采样(区间 $[a, b]$ 内的均匀分布的方差为 $\frac{(b - a)^2}{12}$)。如果想使用高斯分布,那么可以从 0 均值、标准差为 $\sqrt{\frac{2}{m + n}}$ 的正态分布中采样。

具体做法

He Initialization

  • 又名 Kaiming initialization、MSRA initialization。
  • 思想
    • 在使用 ReLU 的网络中,假定每一层只有一半的神经元被激活,另一半为 0,那么为了保持方差不变,需要在 Xavier 的基础上再除以 2。
  • 做法
    • 均匀版本(TensorFlow):从 $[-\sqrt{\frac{6}{m}}, \sqrt{\frac{6}{m}}]$ 中均匀采样。
    • 高斯版本(TensorFlow):从 0 均值,标准差 $\sqrt{\frac{2}{m}}$ 的正态分布中采样。
  • 参考

参考