引言:
参数初始化
是训练深度神经网络的一个关键步骤,目的是给网络中权重(weights)和偏置(biases)赋予初始值。合适的参数初始化方法有助于提高训练速度、避免梯度消失/爆炸问题,并且加速网络的收敛。
一、参数初始化目的
避免梯度消失和梯度爆炸
:在深度神经网络中,参数初始化对梯度流动非常重要。如果初始权重值太大或太小,可能导致梯度爆炸或梯度消失,从而增加网络的训练难度。加速收敛
:良好的初始化可以帮助网络在训练过程中更快地收敛,减少训练时间。打破对称性
:在神经网络中,如果所有的神经元参数都初始化为相同的值,那么在训练过程中,它们会在每一层的计算中产生相同的输出,导致神经元学习到相同的特征。因此,初始化时需要打破对称性,给每个神经元不同的初始值。
二、 常见参数初始化方法
1. 零初始化 (Zero Initialization)
- 特点:所有的权重都被初始化为 0。
- 缺点:会导致网络中的每个神经元学到相同的特征,因为它们的输出相同。这违反了网络中神经元之间的多样性,因此不可用于权重初始化。
- 使用场景:一般情况下不推荐使用,除非用于偏置的初始化。
2. 随机初始化 (Random Initialization)
- 特点:权重是从一个均匀分布或正态分布中随机抽取的,避免了对称性的问题。
- 缺点:若初始化的随机值过大或过小时,可能会导致梯度爆炸或梯度消失的问题。
- 使用场景:适合较简单的网络结构,通常会在后续优化方法中进行改进。
3. Xavier 初始化(Glorot 初始化)
-
概念:由Xavier Glorot 提出的初始化方法,适用于 Sigmoid 和 Tanh 等激活函数。权重初始化时从均匀分布或正态分布中抽取,值的范围与输入和输出的维度相关。
-
公式(均匀分布):
W ∼ U ( − 6 n in + n out , 6 n in + n out ) W \sim U\left( -\sqrt{\frac{6}{n_{\text{in}} + n_{\text{out}}}}, \sqrt{\frac{6}{n_{\text{in}} + n_{\text{out}}}} \right) W∼U(−nin+nout6,nin+nout6)
其中 n in n_{\text{in}} nin和 n out n_{\text{out}} nout分别是当前层和下一层的神经元个数。 -
特点:适用于
Sigmoid
和Tanh
激活函数。通过调节初始化的方差,使得信号在网络中保持稳定,避免了梯度爆炸和梯度消失。 -
使用场景:对于使用
Sigmoid
或Tanh
激活函数的神经网络层(特别是全连接层),是一个常用的初始化方法。
4. He 初始化(Kaiming 初始化)
-
概念:由 Kaiming He 提出的初始化方法,特别适用于 ReLU 激活函数及其变种(如 Leaky ReLU)。
-
公式(正态分布):
W ∼ N ( 0 , 2 n in ) W \sim \mathcal{N}\left( 0, \frac{2}{n_{\text{in}}} \right) W∼N(0,nin2)
其中 n in n_{\text{in}} nin 是当前层的神经元个数。 -
特点:适用于
ReLU
和其他ReLU
类似的激活函数。相比于 Xavier 初始化,He 初始化增加了一个因子 2,确保 ReLU 在正数区域时有更大的方差,避免梯度消失。 -
使用场景:对于 ReLU 激活函数及其变种(如 Leaky ReLU)常用的初始化方法。
5. LeCun 初始化
-
概念:LeCun 初始化特别适用于 Sigmoid 和 Tanh 激活函数,尤其是在卷积神经网络(CNN)中应用广泛。
-
公式(正态分布):
W ∼ N ( 0 , 1 n in ) W \sim \mathcal{N}(0, \frac{1}{n_{\text{in}}}) W∼N(0,nin1)
其中 n in n_{\text{in}} nin 是当前层的神经元个数。 -
特点:适用于
Sigmoid
和Tanh
激活函数。适用于卷积神经网络,特别是在处理小型图像数据时。 -
使用场景:适用于卷积层的初始化,特别是用于 Tanh 和 Sigmoid 激活函数的情况。
6. Orthogonal 初始化
-
概念:Orthogonal 初始化方法初始化权重矩阵为一个正交矩阵。这种方法在每一层之间保持信号的稳定传播,尤其在深度神经网络中效果显著。
-
特点:适用于
深度神经网络
的权重初始化。通过使用正交矩阵保持不同层之间的梯度传播稳定,避免梯度消失。 -
使用场景:适用于深度网络,特别是使用 ReLU 或其他激活函数的网络层。
三、总结
初始化方法 | 适用激活函数 | 特征 | 使用场景 |
---|---|---|---|
零初始化 | 不适用 | 所有权重初始化为0 | 主要用于偏置初始化,避免用作权重初始化 |
随机初始化 | 所有激活函数 | 随机选择权重,打破对称性 | 简单网络结构,但可能导致梯度爆炸/消失问题 |
Xavier 初始化 | Sigmoid, Tanh | 根据输入输出神经元数调整权重方差 | 适用于深度网络,特别是使用 Sigmoid 或 Tanh 激活函数 |
He 初始化 | ReLU, Leaky ReLU | 更大的方差,适用于 ReLU 等激活函数 | 适用于使用 ReLU 或其变种的深度神经网络 |
LeCun 初始化 | Sigmoid, Tanh | 小的方差,适用于卷积神经网络 | 适用于卷积神经网络,特别是 Sigmoid 和 Tanh 激活函数 |
Orthogonal 初始化 | 所有激活函数 | 初始化为正交矩阵,保持信号稳定传播 | 深度神经网络,特别是 ReLU 或其变种的网络 |
- Xavier 和 LeCun 初始化:适用于使用 Sigmoid 或 Tanh 激活函数的网络,帮助防止梯度消失问题。
- He 初始化:适用于 ReLU 激活函数,特别是在深度神经网络中,能有效防止梯度消失。
- LeCun 初始化:适用于卷积神经网络,尤其是在图像处理中。
- Orthogonal 初始化:适用于深层网络,保持信号的稳定传播,适用于 ReLU 激活函数。