1. 引言
在本文中,我们将探讨人工神经网络中权重初始化的常见方法及其重要性。
权重初始化对网络训练过程的优化速度和质量有显著影响。一个良好的初始化策略可以显著提升模型的收敛速度,甚至影响最终模型的性能。
2. 基本概念
我们以典型的全连接前馈神经网络为例,如下图所示:
网络中的每个神经元对其输入的加权和进行非线性变换(激活函数)以生成输出:
$$ y=\mathcal{F}\left(w_{0}+\sum_{i}w_{i}x_{i}\right) $$
其中 $ x_i $ 是上一层神经元的输出,$ w_i $ 是连接权重,$ w_0 $ 是偏置项,$ \mathcal{F} $ 是激活函数。
3. 打破对称性
初始化权重时,我们通常面临两个极端选择:为所有权重设置相同值,或在一定范围内随机生成。
✅ 最佳实践是使用随机初始化,并将偏置初始化为 0。其核心目的是“打破对称性”,即确保每个神经元执行不同的计算。否则,训练过程可能受到严重影响,甚至无法进行。
3.1. 同一网络内部的对称性问题
如果所有神经元的初始参数相同,且使用确定性学习算法(如梯度下降),则这些神经元在整个训练过程中会以相同方式更新权重。
这会导致所有神经元输出相同,从而失去学习能力。这种“对称性”会限制网络的表达能力。
3.2. 不同网络之间的对称性问题
在尝试不同网络结构时,如果所有网络的初始权重都相同,它们将从相同的误差空间起点开始优化。
这会导致它们在训练过程中更新方向相似,难以探索到最优解。使用不同的初始权重有助于从不同起点探索误差空间,提高找到最优解的概率。
4. 随机初始化策略
既然我们已经知道需要随机初始化权重,那问题来了:应该在什么范围内进行?
这取决于所使用的激活函数。
以 tanh
函数为例:
当输入值过大或过小时,函数梯度趋近于零(梯度消失问题)。因此,权重初始化应避免使输入值落入这些区域。
常见推荐范围如下:
[-1, 1]
[-0.1, 0.1]
- 若使用
tanh
或sigmoid
,[-0.5, 0.5]
是一个合理选择
5. 高级随机初始化技术
除了均匀分布,我们也可以使用高斯分布进行初始化。以下两种方法在现代深度学习中被广泛使用:
5.1. Xavier-Bengio 初始化(Glorot 初始化)
适用于 sigmoid
和 tanh
激活函数。
该方法的核心思想是:保持每一层输入和输出的方差一致,以避免梯度消失或爆炸问题。
对于均匀分布:
$$ \mathbf{W} \in \mathcal{U}\left[-\sqrt{\frac{6}{n_{i}+n_{o}}},\sqrt{\frac{6}{n_{i}+n_{o}}}\right] $$
对于高斯分布:
$$ \mathbf{W} \sim \mathcal{N}\left(0,\sqrt{\frac{6}{n_{i}+n_{o}}}\right) $$
其中:
- $ n_i $:当前层输入神经元数(fan_in)
- $ n_o $:当前层输出神经元数(fan_out)
对于 tanh
,也可以使用四次根:
$$ \mathbf{W} \in \mathcal{U}\left[-\sqrt[4]{\frac{6}{n_{i}+n_{o}}},\sqrt[4]{\frac{6}{n_{i}+n_{o}}}\right] $$
一些更常见的变体包括:
- $ \mathcal{N}(0, \sqrt{1/n_i}) $
- $ \mathcal{N}(0, \sqrt{2/(n_i + n_o)}) $
5.2. He 初始化(Kaiming 初始化)
适用于 ReLU
及其变体激活函数。
He 初始化由 Kaiming He 等人在 2015 年提出,专门针对 ReLU 的非线性特性进行优化。
对于均匀分布:
$$ \mathbf{W} \in \mathcal{U}\left[-\sqrt{2}\sqrt{\frac{6}{n_{i}+n_{o}}},\sqrt{\frac{6}{n_{i}+n_{o}}}\right] $$
对于高斯分布:
$$ \mathbf{W} \sim \mathcal{N}\left(0,\sqrt{2}\sqrt{\frac{6}{n_{i}+n_{o}}}\right) $$
更常见的形式是:
$$ \mathbf{W} \sim \mathcal{N}\left(0,\sqrt{\frac{2}{n_{i}}}\right) $$
其理论依据是避免输入信号的幅度在传播过程中呈指数级变化,从而缓解梯度消失问题。
更通用的形式:
$$ \mathbf{W} \sim \mathcal{N}\left(0,\sqrt{\frac{2}{(1+a^{2})n_{i}}}\right) $$
其中 $ a $ 是当前层后激活函数的负斜率,默认为 0
(适用于 ReLU)。
6. 其他初始化方法
许多深度学习框架如 Keras 提供了多种初始化方法:
Zeros
:全部初始化为 0Ones
:全部初始化为 1Constant
:指定常数初始化RandomNormal
:正态分布初始化RandomUniform
:均匀分布初始化TruncatedNormal
:截断正态分布初始化VarianceScaling
:根据权重形状自适应缩放Orthogonal
:正交矩阵初始化Identity
:单位矩阵初始化lecun_uniform
、glorot_normal
、glorot_uniform
、he_normal
、he_uniform
等
7. 总结
虽然权重初始化看似是一个次要问题,但它对训练质量和收敛速度有深远影响。
✅ 推荐使用 Xavier 初始化(sigmoid
/tanh
)或 He 初始化(ReLU
)等基于理论的方法,而非简单随机初始化。
这些方法背后都有坚实的数学基础,旨在解决诸如梯度消失、梯度爆炸等经典问题。