权重初始化,又称参数初始化,是在训练前为神经网络的可训练参数赋予初始值的步骤。在深度学习中,神经网络包含在训练过程中被修改的权重和偏置;初始值的选择会影响收敛速度、激活值的尺度、反向传播中梯度信号的尺度以及最终模型的质量。恰当的初始化对于避免梯度消失、梯度爆炸和激活函数饱和等问题是必要的。尽管本文标题为“权重初始化”,但权重和偏置都是可训练参数,同样的原理也适用于卷积神经网络(CNN)中的卷积核和偏置。
常数初始化
最简单的初始化形式是零初始化,即所有权重和偏置都设为零。这通常用于偏置,但不用于权重,因为它会导致对称性问题:一层中的所有神经元接收相同的梯度,从而学习相同的特征,严重限制了网络的容量。在大多数情况下,偏置被初始化为零,但某些情况需要非零值。例如,在LSTM的遗忘门等乘法单元中,偏置可以初始化为1,以便让良好的梯度信号通过门。对于使用ReLU激活的神经元,将偏置初始化为0.1这样的小正值有助于避免ReLU死亡问题,即神经元变得不活跃并停止学习。
对于循环神经网络(RNN),通常使用有界范围的激活函数(如sigmoid或tanh),因为无界激活可能导致值爆炸。Le、Jaitly和Hinton(2015)建议将网络中循环部分的权重初始化为单位矩阵,偏置初始化为零,这与残差连接和无遗忘门LSTM的思路类似。
随机初始化
随机初始化涉及从正态分布或均匀分布中采样权重,通常对每个权重独立进行。这打破了对称性,允许不同神经元学习不同特征。分布的尺度至关重要:值过大会导致激活或梯度爆炸,而值过小会导致信号消失。已有多种方法被开发出来以选择合适的尺度。
LeCun初始化
LeCun初始化由Yann LeCun及其同事在1998年推广,旨在在前向传播过程中保持激活值的方差。它从均值为0、方差为1/n_in的分布中独立采样每个权重,其中n_in是层的输入数量(扇入)。对于均匀分布,这对应于从U(±√(3/n_in))中采样。该方法适用于在零附近近似线性的激活函数,如tanh,但对ReLU可能不是最优的。
Glorot初始化
Glorot初始化,又称Xavier初始化,由Xavier Glorot和Yoshua Bengio在2010年提出。它被设计为两个目标之间的折中:在前向传播中保持激活方差,以及在反向传播中保持梯度方差。对于均匀初始化,每个权重从U(±√(6/(n_in + n_out)))中采样,其中n_in是扇入,n_out是扇出(下一层的神经元数量)。该方法广泛用于使用sigmoid或tanh激活的网络,但由于整流非线性,对ReLU可能效果较差。
He初始化
He初始化由Kaiming He及其同事在2015年提出,专门针对ReLU激活设计。它从均值为0、方差为2/n_in的分布中采样权重,其中n_in是扇入。对于正态分布,这是N(0, 2/n_in);对于均匀分布,这是U(±√(6/n_in))。因子2考虑了ReLU将一半激活置零,从而有效减半方差的事实。He初始化已成为许多深度网络的默认选择,包括残差网络和CNN。
正交初始化
正交初始化将权重矩阵设置为随机正交矩阵,意味着行和列是标准正交的。这在前向和反向传播过程中保持激活和梯度的范数,对循环神经网络和深度网络有益。它常用于RNN和LSTM以缓解梯度消失问题。该方法通常应用于循环权重矩阵,而其他权重可能使用随机初始化。
数据相关初始化
在某些情况下,初始化可以从训练数据本身推导。例如,在无监督预训练中,自编码器可以使用逐层贪婪训练进行初始化。最近,诸如逐层顺序初始化等数据相关方法也被探索。然而,由于计算成本和复杂性,这些方法不如固定随机方法常见。
对训练动态的影响
初始化的选择影响训练的多个方面。恰当的初始化可以加速收敛,降低梯度消失或爆炸的风险,并提高最终模型质量。相反,糟糕的初始化可能导致训练缓慢、激活饱和或无法收敛。在深度网络中,初始化与激活函数之间的交互至关重要;例如,ReLU网络需要比tanh网络更大的初始权重以维持信号传播。
实践考虑
在现代深度学习框架中,初始化方法已内置,并可通过参数选择。例如,PyTorch和TensorFlow提供了Xavier和He初始化的函数。在训练诸如Transformer等大型模型时,仔细的初始化至关重要;例如,Transformer中的残差分支通常初始化为零,以确保训练开始时稳定。这是对网络特定部分的一种零初始化形式。
相关技术
权重初始化与解决梯度问题的其他技术密切相关,如Batch Normalization、Layer Normalization和Gradient Clipping。这些方法可以缓解糟糕初始化的影响,但不能替代合理起点的需求。在实践中,良好的初始化和归一化的组合常用于训练非常深的网络。