常数初始化
将参数全部初始化为相同的常数(通常为 0,也称全零初始化)
- 常见于传统 ML(比如 SVM 或逻辑回归),一般不适用于神经网络的训练
- 神经网络需要一定的随机性来打破对称性(Symmetry breaking),否则同一层的所有神经元会以相同的初始值为起点,进行相同的梯度计算和更新,从而导致模型无法学习复杂特征
随机初始化
从均值为 $\mu$ (通常为 0)和方差为 $\sigma^2$ 的分布中随机采样
- 随机初始化一般考虑正态分布 $N(0,\sigma^2)$ 或均匀分布 $U(\mu-\sqrt{x}\sigma,\mu+\sqrt{x}\sigma)$
- 随机初始化能够打破对称性,但是需要合理的方差约束;对于多层神经网络来说,当方差过小,会导致前向传播信号迅速衰减为 0;当方差过大,容易导致神经元的输出过大,产生 vanishing gradient
稀疏初始化
将权重矩阵中的大部分元素置为 0,从而实现稀疏性
- 在实践中,一般会控制参数的稀疏率在 0.01~0.1,以提高模型的泛化性能
Xavier 初始化
Xavier 初始化是由 Xavier Glorot 提出的,因此也称为 Glorot 初始化。该初始化方法假设参数的初始化均值为 0,根据每层的神经元数量来自动计算初始化参数的方差
Xavier 初始化公式:
- Xavier+正态分布:$N(0,\sqrt{2/(n_{t-1},n_t)})$
- Xavier+均匀分布:$U(-\sqrt{6/(n_{t-1},n_t)},\sqrt{6/(n_{t-1},n_t)})$
Xavier 初始化分析:
- 保证每层前向传播输出方差等于反向传播梯度方差,使信号在网络中稳定流动
- Xavier 初始化适合搭配 Sigmoid 和 Tanh 激活函数,该情况下能有效缓解梯度消失的问题;Xavier 初始化不适合搭配 ReLU,因为 ReLu 会通过置 0 操作来降低一半的方差,导致方差衰减问题
- 更多细节也可以参阅《动手学深度学习》中的解释: 8.2 提高模型稳定性
Kaiming 初始化
Kaiming 初始化由 Kaiming He 提出的,因此也称为 He 初始化。该方法是一种专门针对 ReLU 类激活函数设计的非线性修正,在 Xavier 初始化的基础上将每层的方差扩大一倍
Kaiming 初始化公式:
- Kaiming+正态分布:$N(0,\sqrt{2/(n_{t-1})})$
- Kaiming+均匀分布:$U(-\sqrt{6/n_{t-1}},\sqrt{6/n_{t-1}})$
Kaiming 初始化分析:
- 目前深度卷积网络和 Transformer 的主流方案
- 能够加速了 ResNet、VGG 等深度神经网络的收敛
正交初始化
正交初始化要求权重矩阵 $W$ 满足 $W^TW=I$,即列向量相互正交且模长为 1
初始化方法:先生成标准高斯噪声矩阵,在进行 QR 分解或 SVD 分解取其正交基
方法分析:
- 提高梯度传播的稳定性,缓解梯度爆炸/消失,提高长序列记忆能力
- 无法严格正交化所有矩阵;计算开销略高于简单高斯噪声的随机采样
其他初始化方法
- 恒等初始化:神经网络的权重层初始化为一个单位矩阵,确保神经网络层之间的恒等变换,避免信号和梯度的衰减,能够加速网络的收敛,并提高模型的长记忆能力
- ZerO 初始化:神经网络的权重层初始化为一个哈达玛矩阵(哈达玛矩阵由 +1 与 −1 的元素构成,且满足 $H_n H_n^T=n I_n$),有助于缓解训练衰减的问题,提高模型的可复现性