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) # 正态分布
通常在使用tanh或sigmoid作为激活函数时,在模型__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网络,以及在特定研究(如循环神经网络、自编码器)中作为基准方法。其提出的“保持前向与反向传播方差一致”的思想,深刻影响了后续多种初始化方法的设计。