深度神经网络参数初始化方法详解
一、引言
在深度学习中,神经网络的参数初始化对模型的训练速度和最终性能有着至关重要的影响。不恰当的初始化可能导致梯度消失(Vanishing Gradient)或梯度爆炸(Exploding Gradient),使得网络无法有效学习。本文基于深度学习基础理论,详细解析随机初始化与预训练初始化的原理、方法及最佳实践。
二、为什么需要初始化?
2.1 对称权重问题
在线性模型中,参数通常被初始化为 0。但在神经网络中,如果所有权重都初始化为 0,会导致以下问题:
- 前向传播:同一层的所有神经元接收相同的输入并拥有相同的权重,因此它们的激活值完全相同。
- 反向传播:由于激活值相同,计算出的梯度也相同,导致权重更新量一致。
- 结果:隐藏层神经元失去区分度,丧失了表达能力,这种现象称为对称权重现象。
为了打破这种平衡,必须引入随机性,使不同神经元之间的特征提取能力有所差异。
2.2 固定方差随机初始化的风险
简单的随机初始化(如从均匀分布或高斯分布采样)需要谨慎设置方差范围:
- 方差过大:输入状态过大,对于 Sigmoid 或 Tanh 等饱和型激活函数,激活值进入饱和区,梯度接近于 0,导致梯度消失。深层网络中此问题尤为严重。
- 方差过小:神经元输出过小,信号经过多层传递后逐渐消失;同时 Sigmoid 在 0 附近近似线性,多层网络的非线性表达能力受限。
三、方差缩放初始化方法
为了解决上述问题,现代初始化方法倾向于根据神经元的连接数量自适应地调整初始化分布的方差,以保持每一层的输入和输出方差一致。这类方法统称为方差缩放(Variance Scaling)。
3.1 Xavier 初始化
Xavier 初始化(也称 Glorot 初始化)假设激活函数是线性的或类似 Sigmoid/Tanh 的平滑函数。其核心思想是保持前向传播时的方差不变,同时也保持反向传播时的梯度方差不变。
公式定义:
- 均匀分布:$W \sim U[-\sqrt{\frac{6}{n_{in} + n_{out}}}, \sqrt{\frac{6}{n_{in} + n_{out}}} ]$
- 正态分布:$W \sim N(0, \sqrt{\frac{2}{n_{in} + n_{out}}})$
其中 $n_{in}$ 为输入节点数,$n_{out}$ 为输出节点数。
适用场景:
- 激活函数为 Sigmoid 或 Tanh。
- 适用于全连接层(Dense Layer)。
3.2 He 初始化
随着 ReLU 及其变体(Leaky ReLU, PReLU)的广泛使用,Xavier 初始化不再是最优选择。因为 ReLU 会将负值置为 0,这改变了数据的分布特性。He 初始化专门针对 ReLU 类激活函数进行了优化。
公式定义:
- 正态分布:$W \sim N(0, \sqrt{\frac{2}{n_{in}}})$
- 均匀分布:$W \sim U[-\sqrt{\frac{6}{n_{in}}}, \sqrt{\frac{6}{n_{in}}}]$
相比 Xavier,He 初始化将方差扩大了约 2 倍,以补偿 ReLU 将一半数值截断带来的信息损失。
适用场景:
- 激活函数为 ReLU 或 Leaky ReLU。
- 广泛应用于卷积神经网络(CNN)和深层网络。
3.3 代码实现示例
以下是使用 Python 和 NumPy 实现 Xavier 和 He 初始化的示例代码:


