1.7 权重初始化
从优化动力学角度系统分析权重初始化的作用、机制,以及常见的策略与实践细节
什么是权重初始化
正确初始化神经网络的权重是实现稳定高效训练的重要环节
对于像 Transformer 这样层数较多的架构,梯度需要跨多层传播,不当初始化会导致梯度消失或爆炸,使训练在一开始就陷入停滞
虽然现代优化器和归一化层可以缓解部分问题,但周全的权重初始化仍是实践中的核心组成部分
大多数标准初始化方法的目标是保证在激活值和梯度向前 / 向后传播时其方差保持稳定
如果方差在网络中呈指数增长,则容易出现梯度爆炸;如果呈指数减小,则出现梯度消失
线性层初始化
Transformer 在多头注意力的 Q/K/V 投影、输出投影以及逐位置前馈网络(FFN)中大量使用线性(全连接)层,常见且有效的初始化策略如下
Glorot(Xavier)初始化
由 Glorot 和 Bengio 提出,旨在保持层间激活值和梯度的方差恒定
对于输入维度为 $fan_{in}$、输出维度为 $fan_{out}$ 的线性层,权重 $W$ 可按以下方式初始化:
均匀分布:
W∼U[−fanin+fanout6, fanin+fanout6]正态分布:
W∼N(0, fanin+fanout2)Glorot 初始化对对称激活函数(如 $tanh$)尤其有效,Transformer 的最初实现中也采用了 Glorot 均匀初始化
He 初始化
由 He 等人提出,特别适合接 ReLU 或其变体的层,因为 ReLU 将约一半激活置零,会降低激活方差
常见的 He 初始化(使用正态分布)为:
W∼N(0, fanin2)对应的均匀分布版本
W∼U[−fanin6, fanin6]
在实践中:
对 FFN 层使用 He 初始化较合理(因为 FFN 通常紧接 ReLU / GELU 等非线性)
对注意力投影层(Q/K/V 和输出线性层)使用 Glorot 初始化是一个稳健起点
许多深度学习框架会根据层的默认激活自动选择 Glorot 或 He 初始化策略
嵌入层初始化
嵌入层负责将离散的 token ID 映射为稠密向量,与标准线性层有细微区别,常见做法是:
E∼N(0, σ2)其中 $\sigma$ 是较小的标准差(例如约 0.02),以避免初始嵌入值过大,从而产生后续计算不稳定性,尤其是在添加位置编码时
某些实现会共享输入和输出嵌入权重(可能经过转置),这也影响初始化策略的选择
层归一化初始化
层归一化(LayerNorm)中包含可训练参数增益 $\gamma$ 和偏置 $\beta$。通常采用:
$\gamma = 1$
$\beta = 0$
这样的初始化确保 LayerNorm 在初始阶段仅起到“归一化作用”,不施加缩放或平移,让网络在训练过程中自行学习适当变换
工程实现
主流深度学习库(如 PyTorch、TensorFlow、JAX)为常见层提供了合理的默认初始化,通常与 Glorot 或 He 方法一致
在 Hugging Face Transformers 中,权重通常使用由配置参数
initializer_range指定标准差(默认约 0.02)的正态分布初始化,偏置为零
Last updated
Was this helpful?