1 背景动机

1.1 深度神经网络训练中的梯度问题

深度神经网络在训练过程中,随着层数增加,反向传播的梯度信号可能会发生剧烈衰减或增长。梯度在逐层传递时,若权重初始化不当,激活函数的导数与权重的乘积可能使梯度的方差逐层缩小(梯度消失)或放大(梯度爆炸),导致浅层网络参数无法有效更新模型收敛困难。这一现象在早期使用逻辑斯蒂函数(sigmoid)或双曲正切函数(tanh)时尤为突出。

1.2 权重初始化的影响

权重初始化直接决定了网络各层输出方差的初始状态。若初始化使方差逐层减小,深层输出会趋近于零,梯度也随之消失;反之方差膨胀则引发梯度爆炸。合理的初始化应确保前向传播时各层输出的方差保持稳定,同时反向传播时梯度方差也保持稳定,从而缓解上述问题。Xavier初始化正是基于这一需求而设计。

2 数学原理

2.1 方差一致性条件

考虑一个全连接层,输入为 \(x\),权重为 \(W\),偏置为 \(b\),输出为 \(y = Wx + b\)。假设输入与权重独立分布且均值为0,则输出方差可表示为 \(\text{Var}(y) = n_{\text{in}} \cdot \text{Var}(W) \cdot \text{Var}(x)\),其中 \(n_{\text{in}}\) 为输入神经元数量。为保持方差一致,需使 \(\text{Var}(y) = \text{Var}(x)\),由此得到权重方差的约束:

\[ \text{Var}(W) = \frac{1}{n_{\text{in}}} \]

类似地,从反向传播角度,梯度方差应满足 \(\text{Var}(\frac{\partial L}{\partial x}) = \text{Var}(\frac{\partial L}{\partial y})\),可得另一约束 \(\text{Var}(W) = \frac{1}{n_{\text{out}}}\),其中 \(n_{\text{out}}\) 为输出神经元数量。综合两者,Xavier初始化采用折中方案:

\[ \text{Var}(W) = \frac{2}{n_{\text{in}} + n_{\text{out}}} \]

2.2 均匀分布初始化

从均匀分布 \(U[-a, a]\) 中采样权重,其方差为 \(\frac{a^2}{3}\)。令该方差等于 \(\frac{2}{n_{\text{in}} + n_{\text{out}}}\),解得:

\[ a = \sqrt{\frac{6}{n_{\text{in}} + n_{\text{out}}}} \]

因此,权重从 \(U\left[-\sqrt{\frac{6}{n_{\text{in}} + n_{\text{out}}}}, \sqrt{\frac{6}{n_{\text{in}} + n_{\text{out}}}}\right]\) 中采样。

2.3 正态分布初始化

从均值为0、标准差为 \(\sigma\) 的正态分布 \(N(0, \sigma^2)\) 中采样权重。根据方差一致条件:

\[ \sigma = \sqrt{\frac{2}{n_{\text{in}} + n_{\text{out}}}} \]

2.3.1 分布的参数推导

该标准差直接来源于方差公式:\(\text{Var}(W) = \sigma^2 = \frac{2}{n_{\text{in}} + n_{\text{out}}}\),因此 \(\sigma = \sqrt{\frac{2}{n_{\text{in}} + n_{\text{out}}}}\)。实际应用中,也可根据输入节点数单独使用 \(\sigma = \sqrt{\frac{1}{n_{\text{in}}}}\)(对应前向传播约束)或 \(\sigma = \sqrt{\frac{1}{n_{\text{out}}}}\)(对应反向传播约束),但两种对称形式在深层网络中效果相近。

3 适用范围与限制

3.1 适用激活函数

3.1.1 双曲正切函数(tanh)

tanh函数在零点附近近似线性,输出值域为(-1,1),均值接近0。Xavier初始化假设激活函数在零点附近近似单位线性,且输出均值为0,与tanh的对称性质高度吻合,因此效果良好。

3.1.2 逻辑斯蒂函数(sigmoid)

sigmoid函数的输出均值为0.5,且非零中心,但Xavier初始化在实际应用中对sigmoid仍有改善作用。由于sigmoid在远离零点时梯度趋近于0,方差一致性有助于避免早期饱和

3.2 不适用激活函数

3.2.1 修正线性单元(ReLU

ReLU的输出均值大于0(约为输入方差的一半),不满足Xavier初始化要求的均值为0假设。此时若使用Xavier初始化,方差会逐层减小,导致梯度消失。实验表明,ReLU网络使用Xavier初始化后深层神经元活性下降。

3.2.2 改进的初始化方法(He初始化)

针对ReLU及其变体(如Leaky ReLU),He Kaiming等人于2015年提出He初始化(又称Kaiming初始化)。其方差设定为 \(\text{Var}(W) = \frac{2}{n_{\text{in}}}\),仅考虑前向传播约束。该初始化有效缓解了ReLU网络的梯度消失问题,成为现代深度学习中的标准方法之一。

4 实现方式

4.1 深度学习框架中的实现示例

4.1.1 TensorFlow/Keras

在TensorFlow或Keras中,通过kernel_initializer参数指定:

import tensorflow as tf
layer = tf.keras.layers.Dense(units=64, activation='tanh',
                              kernel_initializer='glorot_uniform')

也可使用正态分布版本:

layer = tf.keras.layers.Dense(units=64, activation='tanh',
                              kernel_initializer='glorot_normal')

4.1.2 PyTorch

PyTorch提供torch.nn.init模块:

import torch.nn as nn
linear = nn.Linear(128, 64)
nn.init.xavier_uniform_(linear.weight)   # 均匀分布
# 或
nn.init.xavier_normal_(linear.weight)    # 正态分布

通常在使用tanhsigmoid作为激活函数时,在模型__init__方法中显式调用初始化。

5 实验验证与历史影响

5.1 原始论文中的实验结果

Glorot与Bengio在2010年的论文《Understanding the difficulty of training deep feedforward neural networks》中,对多层感知机进行实验。使用sigmoid激活时,Xavier初始化显著提升了5层网络的收敛速度与最终性能,而传统的随机小权重初始化导致上层神经元饱和、梯度消失。可视化实验中,Xavier初始化下各层激活值的方差保持稳定,而标准初始化下方差逐层衰减。

5.2 后续发展及替代方案

Xavier初始化是深度学习早期的重要突破,奠定了权重初始化理论的基础。随着ReLU激活函数的普及,He初始化成为更优选择。此外,批量归一化Batch Normalization)和残差连接Residual Connections)等技术进一步减轻了对初始化的依赖。但Xavier初始化仍广泛应用于tanh/sigmoid网络,以及在特定研究(如循环神经网络自编码器)中作为基准方法。其提出的“保持前向与反向传播方差一致”的思想,深刻影响了后续多种初始化方法的设计。