权重矩阵初始化
是神经网络训练中至关重要的一步,它直接影响模型的收敛速度和性能。不恰当的初始化可能导致梯度消失、梯度爆炸或训练停滞。 以下是常见的几种权重矩阵初始化方法:
- 零初始化 (Zero Initialization):
- 将所有权重都设置为零。
- 问题:这会导致对称性问题(symmetry breaking problem)。所有神经元学习相同的特征,梯度下降法无法区分不同的神经元,导致模型无法有效学习。因此,通常不使用零初始化。
- 随机初始化 (Random Initialization):
- 将权重矩阵初始化为小的随机值(通常来自均匀分布或高斯分布)。
- 优点:打破了对称性,使每个神经元可以学习不同的模式。
- 问题:如果随机值过大,可能导致梯度爆炸;如果随机值过小,可能导致梯度消失,尤其是在深层网络中。
- Xavier/Glorot 初始化 (Xavier/Glorot Initialization):
- 旨在保持每一层激活值的方差恒定,从而维持信号在网络中的流动。
- 适用场景:最适合使用 sigmoid 或 tanh 等关于零对称的激活函数。
- 方法:权重从均值为 0、方差为
的分布(均匀或高斯)中抽取,其中
2/(fan_in+fan_out)2 / open paren fan_in plus fan_out close paren2/(fan_in+fan_out)是输入连接数,
fan_infan_infan_in是输出连接数。
fan_outfan_outfan_out
- He/Kaiming 初始化 (He/Kaiming Initialization):
- Xavier 初始化的改进版,专门针对 ReLU 及其变体(如 Leaky ReLU)激活函数。
- 适用场景:使用 ReLU 族激活函数时首选 He 初始化。
- 方法:权重从均值为 0、方差为
的分布(通常是高斯分布)中抽取。
2/(fan_in)2 / open paren fan_in close paren2/(fan_in)
- 预训练模型初始化 (Pre-trained Initialization):
- 在迁移学习中,使用在大规模数据集上预训练好的模型权重作为新模型的初始值。
- 优点:能显著加快训练速度,提高模型性能,尤其适用于目标任务数据集较小的情况。
总结与建议
在现代深度学习实践中:
- 优先使用 He 初始化,因为 ReLU 是最常用的激活函数之一。
- 如果使用
tanh或sigmoid,则使用 Xavier 初始化。 - 如果使用批量归一化(Batch Normalization),权重的具体初始化方法变得不那么关键,通常简单的随机初始化(如小的正态分布)即可。