深度神经网络的参数初始化方法
引言
在深度学习模型训练中,参数初始化是决定模型能否成功收敛的关键步骤之一。不恰当的初始值可能导致梯度消失、梯度爆炸或对称权重问题,使得网络无法有效学习特征。本文基于《深度学习入门:基于 Python 的实现》及神经网络与深度学习(NNDL)等经典资料,系统梳理深度神经网络的参数初始化策略,涵盖随机初始化、方差缩放方法及预训练初始化,并提供实践建议。
一、随机初始化基础
1.1 为什么不能全零初始化
在线性模型中,将所有参数初始化为 0 通常是可以接受的。但在神经网络中,如果所有权重 $W$ 和偏置 $b$ 都初始化为 0,会导致严重的对称权重现象:
- 前向传播:同一层的所有神经元接收相同的输入,由于权重相同,计算出的激活值也完全相同。
- 反向传播:由于激活值相同,计算出的梯度也相同,导致权重更新量一致。
- 结果:隐藏层神经元失去区分性,相当于只有一个神经元在工作,丧失了多层网络的表达能力。
为了打破这种对称性,必须对每个参数进行随机初始化(Random Initialization),确保不同神经元之间的差异。
1.2 固定方差初始化的局限性
早期的随机初始化方法通常使用均匀分布或高斯分布,并设定固定的方差(如标准正态分布 $N(0, 1)$)。然而,这种方法存在明显缺陷:
- 方差过大:若权重取值范围太大,会导致输入状态过大。对于 Sigmoid 型激活函数,激活值进入饱和区,梯度接近于 0。在深层网络的反向传播中,梯度会不断变小,引发梯度消失问题。
- 方差过小:若权重取值范围太小,神经元输出趋近于 0。经过多层传递后信号逐渐消失(学不动)。此外,Sigmoid 函数在 0 附近近似线性,多层网络的非线性能力受限,优势不再存在。
因此,简单的固定方差无法满足深层网络的需求,需要根据网络结构自适应调整。
二、基于方差缩放的初始化方法
为缓解梯度消失或爆炸问题,核心思想是尽可能保持每一层神经元的输入和输出的方差一致。根据神经元的连接数量(fan-in),自适应地调整初始化分布的方差,这类方法称为方差缩放(Variance Scaling)。
2.1 Xavier 初始化
Xavier 初始化(也称 Glorot 初始化)假设激活函数为恒等函数或线性区间较大的函数(如 Sigmoid、Tanh)。其目标是保持前向传播时信号的方差不变,同时保持反向传播时梯度的方差不变。
公式定义: 设第 $l$ 层的输入维度为 $n_l$,输出维度为 $n_{l+1}$。权重 $W$ 从以下分布中采样:
$$ W \sim U\left[-\frac{\sqrt{6}}{\sqrt{n_l + n_{l+1}}}, \frac{\sqrt{6}}{\sqrt{n_l + n_{l+1}}}\right] $$
或者使用高斯分布: $$ W \sim N\left(0, \frac{2}{n_l + n_{l+1}}\right) $$
特点:
- 前一层的节点数越多,目标节点的权重尺度越小。
- 使各层的激活值呈现出具有相同广度的分布,避免梯度消失,保持网络表达能力。
- 适用于 Sigmoid 和 Tanh 激活函数。
2.2 He 初始化
随着 ReLU 及其变体(Leaky ReLU, PReLU)的广泛应用,Xavier 初始化不再是最优选择。因为 ReLU 在负值区域输出为 0,这改变了方差的统计特性。He 初始化专门针对 ReLU 设计。
原理: ReLU 将负半轴截断,导致方差减半。为了补偿这一损失,需要将方差扩大 2 倍。
公式定义: $$ W \sim N\left(0, \frac{2}{n_l}\right) $$ 其中 $n_l$ 是输入连接的个数(fan-in)。
对比总结:
| 激活函数 |
|---|


