初始化决定训练起点:全部置零会让同一层神经元梯度完全相同,对称性无法打破,等价于单神经元;初始化过大则激活饱和、梯度爆炸,过小则信号逐层衰减。好的初始化要让各层激活和梯度的方差大致稳定。

Xavier(Glorot)初始化假设使用近似线性的激活(tanh),取权重方差为 2/(fan_in+fan_out),均衡考虑前向与反向信号。He 初始化针对 ReLU——ReLU 把一半输出置零使方差减半,因此方差加倍为 2/fan_in,补偿这一损失。

易错点:用 Xavier 配 ReLU 会让激活方差逐层衰减;现代 Transformer 常用较小的初始化(如 std=0.02 的正态分布),配合 LayerNorm 和残差连接保证稳定。追问方向:为什么残差网络可以用更简单的初始化?LayerNorm 的存在是否降低了对初始化的敏感度?

nn.init.kaiming_normal_(layer.weight, nonlinearity='relu')  # He
nn.init.xavier_uniform_(layer.weight)                        # Xavier