Ch06 神经网络基础修订于 二〇二六年七月二日

6.7 权重初始化

6.7.1 为什么初始化这么重要

训练神经网络的本质是用梯度下降在参数空间中寻找最优点。初始参数的位置决定了:

  • 收敛速度:初始点离最优点近,几步就到了;离得远,可能要跑几万步
  • 能否收敛:初始点落在”悬崖”上,梯度爆炸,参数飞掉;落在”平原”上,梯度消失,永远学不动
  • 最终效果:不同的初始点可能收敛到不同的局部最优解

一个直观的例子:初始化全为0会怎样?所有神经元在每一层都输出相同的值,反向传播时梯度也相同,所以所有神经元学到的参数永远一样——这等于只训练了一个神经元,整个网络的表达能力被完全浪费。这个现象叫”对称性破坏”(symmetry breaking),随机初始化正是为了打破它。

6.7.2 Xavier初始化(Glorot初始化)

2010年,Xavier Glorot 和 Yoshua Bengio 提出:为了让信号在前向和反向传播中都不爆炸也不消失,每层权重的方差应该满足:

Var(W) = 2 / (n_in + n_out)

其中 n_in 是输入维度,n_out 是输出维度。用正态分布 N(0, sqrt(2/(n_in+n_out))) 或均匀分布采样。

Xavier初始化在Sigmoid/Tanh激活函数的时代效果很好,因为它假设激活函数在0附近近似线性。但ReLU出现了之后,这个假设不成立了。

6.7.3 He初始化(Kaiming初始化)

2015年,何恺明(Kaiming He)针对ReLU的特性做了修正。ReLU会把一半的神经元输出置零(负数区域),这意味着有效的信号方差会减半。He初始化的补偿方案:

Var(W) = 2 / n_in

分母只用 n_in(不用 n_out),分子是2(补偿ReLU的50%信号损失)。用正态分布 N(0, sqrt(2/n_in)) 采样。

实践效果:He初始化让ResNet(152层)训练成功,而Xavier初始化在同样深的网络上会梯度消失。这是为什么2015年之后,卷积网络几乎全部切换到He初始化。

6.7.4 不同初始化对训练的影响

初始化方法适用激活函数特点典型场景
全零初始化无对称性不破坏,无法训练永远不要用
全1初始化无同上,且梯度爆炸永远不要用
小随机数 N(0, 0.01)Sigmoid/Tanh浅层还行,深层梯度消失2012年之前的做法
XavierSigmoid/Tanh信号方差在前向和反向都稳定2012-2015年的主流
HeReLU及其变体补偿ReLU的信号损失CNN标配,2015年至今
小随机数 N(0, 0.02)GELU/SiLUGPT系列的默认做法Transformer/LLM

6.7.5 2026年默认做法

在2026年,如果你从零训练一个网络:

  • CNN/ResNet:torch.nn.init.kaiming_normal_(He初始化),搭配ReLU
  • Transformer/LLM:torch.nn.init.normal_(std=0.02) 或 std=1/sqrt(d_model),这是GPT-2以来的经验默认值,虽然理论上不如He/Xavier优雅,但经过大量实验验证有效
  • 简单MLP:He初始化 + ReLU,简单可靠
  • PyTorch默认:nn.Linear 默认使用 kaiming_uniform_,对大多数场景已经是合理的起点

← 上一节:6.6 归一化层:BatchNorm 与 LayerNorm | 下一节:6.8 前向传播:从输入到输出 →

关联8

知识图谱

局部图谱 · 点节点跳转