趋近智
正确初始化神经网络 (neural network)的权重 (weight)是实现稳定高效训练的主要步骤。对于Transformer这类层数较多的架构,梯度通过多层传播,不当的初始化很容易导致梯度消失或梯度爆炸,在学习过程开始前就使其停滞。虽然现代的优化器和归一化 (normalization)层可以缓解这些问题中的一部分,但周全的权重初始化仍然是实际操作中一个主要组成部分。
大多数标准初始化方案的目标是,在激活值和梯度在网络中向前和向后传播时,保持其方差不变。如果方差随每层呈指数增长,梯度就会爆炸;如果呈指数减小,梯度就会消失。
Transformer模型在多头注意力 (multi-head attention)模块(用于Q、K、V投影和最终输出投影)和逐位置前馈网络(FFNs)中大量使用线性(或全连接)层。这些层最常用且有效的初始化策略是Glorot (Xavier) 和 He 初始化。
Glorot (Xavier) 初始化: 由Glorot和Bengio(2010年)提出,此方法旨在保持激活值和梯度在各层间的方差恒定。它对于使用对称激活函数 (activation function)(如)的层尤其有效。对于将输入大小为转换为输出大小为的线性层,权重 (weight)通常从均匀分布中抽取:
或者,也可以使用正态分布:
He 初始化: 由He等人(2015年)提出,此方法专为后接修正线性单元(ReLU)或其变体的层设计,这在Transformer FFN中很常见。它考虑了ReLU将一半激活值归零从而减小方差的事实。权重通常从正态分布中抽取:
也存在均匀分布版本。
在实践中,许多深度学习 (deep learning)框架在预期使用ReLU激活时,默认对线性层采用He初始化,否则采用Glorot初始化。对于Transformer模型,为FFN层使用He初始化,而为注意力投影层(这些层在进一步组合之前通常不会对其直接输出立即应用ReLU)使用Glorot/Xavier初始化,是一个合理的起点。像最初的“Attention Is All You Need”论文中的实现就使用了Glorot均匀初始化。
输入和输出嵌入层将离散的令牌ID映射到稠密向量 (vector)。这些层通常与标准线性层的初始化方式不同。一个常见的做法是从均值为0、标准差相对较小的正态分布(例如)初始化嵌入权重 (weight)。这可以避免初始嵌入值过大,从而可能导致后续计算不稳定,尤其是位置编码 (positional encoding)的加入。
一些实现可能会绑定输入和输出嵌入权重,为两者共享相同的矩阵(可能经过转置),这也会影响初始化方法的选择。
层归一化层也有可训练参数 (parameter):增益()和偏差()。这些参数通常初始化为和。这确保了层归一化在初始时仅将激活值归一化为零均值和单位方差,而不应用任何缩放或平移,从而让网络在训练过程中学习合适的变换。
大多数现代深度学习 (deep learning)库(如PyTorch、TensorFlow、JAX)为其标准层提供了合理的默认初始化,通常与Glorot或He方法一致。例如,Hugging Face Transformers库通常使用标准差由initializer_range配置参数 (parameter)(通常默认为0.02)指定的正态分布初始化权重 (weight),并将偏差初始化为零,而LayerNorm的权重设置为1,偏差设置为0。
比较了层具有512个输入/输出单元时,使用小标准差正态分布初始化和Xavier均匀初始化所产生的权重分布。请注意,与Xavier方法的更宽泛分布相比,N(0, 0.02^2)方法在零点附近聚集更紧密。
虽然这些默认设置通常表现良好,但理解其基本原理有助于在训练变得不稳定时进行更明智的调试。偶尔,可以尝试对初始化标准差进行微小调整,特别是对于嵌入 (embedding)层或最终输出层,但对于核心线性层而言,大幅偏离Glorot或He等既定方法通常是不必要的,并可能适得其反。
这部分内容有帮助吗?
initializer_range)的实用指导,这对于实际实现至关重要。© 2026 ApX Machine LearningAI伦理与透明度•