← 返回题目列表

神经网络的权重为什么不能初始化为全 0?Xavier、He 初始化是什么?

高频 中等 第 6 / 25 题 更新于 2026/08/02
深度学习权重初始化XavierHe

简化版

权重不能初始化为全 0(或全相同值):那样同一层所有神经元收到的输入、算出的输出、反向传播得到的梯度完全一样,更新后仍然一样——它们永远保持对称、学到的东西完全相同,等于每层只有一个有效神经元,网络学不到东西(对称性无法打破)。所以要随机初始化打破对称。但也不能随便随机——初始值太大→激活饱和/梯度爆炸,太小→信号逐层衰减/梯度消失。Xavier(Glorot)初始化 让权重方差适配「输入+输出神经元数」,保持前向和反向的信号方差稳定,适合 sigmoid/tanhHe 初始化 针对 ReLU(考虑负半轴被截断掉一半),是 ReLU 网络的标配。

详细版

为什么不能全 0(对称性问题):

全 0 或全相同 → 同层神经元前向输出相同 → 反向梯度相同 → 更新后仍相同
→ 同层神经元永远「对称」、学一样的东西 → 等价于每层一个神经元
  • 必须随机初始化打破对称,让不同神经元学不同特征。

随机也有讲究(方差要合适):

初始值后果
太大激活进入饱和区、梯度爆炸
太小信号逐层衰减、梯度消失
恰当各层激活/梯度方差稳定

主流初始化:

方法方差适配激活
Xavier/Glorot正态方差常取 2/(fan_in+fan_out)sigmoid、tanh
He/Kaiming≈ 2/n_in 量级ReLU 及其变体
  • 核心思想:让每层输出的方差 ≈ 输入的方差,信号不逐层放大或缩小。

完整版教学

一、为什么初始化很重要

神经网络训练前,权重要先赋一个初始值。这个初始值看似不起眼,其实严重影响能否训练起来:初始化不当会直接导致梯度消失/爆炸、对称性无法打破、收敛极慢甚至训不动。所以有一套专门的初始化方法(Xavier、He)。理解它要回答两个问题:为什么不能全 0(对称性)?为什么随机也要控制方差?

二、为什么不能全 0——对称性无法打破

假设把某一层所有权重都初始化为 0(或同一个常数),会发生什么:

  1. 前向:该层每个神经元收到相同的输入、用相同的权重,算出的输出完全相同
  2. 反向:因为输出相同、在网络里的角色对称,每个神经元收到的梯度也完全相同
  3. 更新:梯度相同 → 更新量相同 → 更新后这些神经元的权重依然完全相同

于是同一层的所有神经元永远保持一模一样,学到的东西完全相同——等价于这一层只有一个有效神经元,网络的表达能力被浪费殆尽,根本学不到复杂特征。这叫对称性无法打破(symmetry breaking failure)

结论:必须用随机初始化让每个神经元有不同的初始权重,从一开始就打破对称,使它们能分化、学到不同的特征。(注意:偏置 b 可以初始化为 0,因为权重随机已经打破了对称。)

三、随机也不能乱来——方差要合适

随机初始化打破了对称,但随机值的大小(方差) 还要仔细控制,否则会引发梯度问题(详见梯度消失专题):

  • 初始权重太大:加权和 z 很大,激活进入饱和区(sigmoid/tanh 两端导数≈0)→ 梯度消失;或数值逐层放大 → 梯度爆炸
  • 初始权重太小:信号逐层被乘以小数、方差逐层衰减,传到深层几乎为 0 → 前向信号消失、梯度也消失。

理想状态是:让信号(激活值)和梯度在逐层传播时方差保持稳定——不逐层放大也不逐层缩小。Xavier 和 He 初始化就是为达到这个目标而设计的。

四、Xavier / Glorot 初始化:适配 sigmoid/tanh

Xavier(又叫 Glorot)初始化 的核心目标:让每一层输出的方差 ≈ 输入的方差,同时兼顾前向传播和反向传播的信号稳定。它根据该层的输入神经元数 n_in 和输出神经元数 n_out 设定权重方差:

权重方差 ≈ 2 / (n_in + n_out)
(均匀分布或正态分布采样,方差按此设定)
  • 直觉:神经元连接越多(扇入扇出越大),每个权重就应该越小,才能让加权和的方差不至于爆炸。
  • 常用于线性或 tanh;具体增益应匹配激活 这类关于 0 对称的激活函数。

五、He / Kaiming 初始化:适配 ReLU

He(又叫 Kaiming)初始化 是针对 ReLU 激活设计的。为什么 ReLU 要单独搞一套?因为 ReLU 会把负半轴全部置 0——对零均值对称输入,ReLU 约保留一半非零响应;He 初始化按二阶矩近似补偿这部分损失。为了补偿这个「减半」,He 初始化把方差放大一倍:

权重方差 ≈ 2 / n_in
  • 只用输入神经元数 n_in,且系数是 2(Xavier 大致相当于系数 1)。
  • 适合 ReLU;Leaky ReLU 等变体应按负斜率选择对应 gain,是现代 ReLU 网络(CNN、ResNet 等)的标配

六、实践要点

  • 选择sigmoid/tanh → Xavier;ReLU 系 → He。用错会影响收敛(如 ReLU 用 Xavier 可能偏保守)。
  • 框架默认:PyTorch/TF 的层通常有合理默认初始化(如线性层默认 Kaiming 均匀),一般不用手动设,但要知道原理。
  • 配合 BatchNorm:有了 BN 后,网络对初始化没那么敏感(BN 会重新标准化每层输入),但好的初始化仍有帮助。
  • 偏置:一般初始化为 0(偏置通常置 0;是否使用非零偏置应由具体结构验证,不能替代正确初始化)。
  • 别用全 0/全相同:永远打不破对称。

七、从 fan-in 算出 Xavier 与 He 的标准差

设全连接层 fan_in=fan_out=100。Xavier 正态方差为 2/(100+100)=0.01,标准差是 0.1;ReLU 的 He 正态方差为 2/100=0.02,标准差约 0.1414。He 的标准差更大,是为了补偿 ReLU 截去负半轴后的二阶矩损失。

初始化方差本例标准差典型激活
Xavier normal2/(fan_in+fan_out)0.1000tanh、线性
He normal2/fan_in0.1414ReLU
Leaky-ReLU Kaiming2/[(1+a²)fan_in]随负斜率 a 变化Leaky ReLU

卷积层的 fan_in=K_h×K_w×C_in/groups,不能只拿输入通道数。初始化公式依赖独立、零均值等近似假设;残差分支、归一化层和门控结构还可能使用缩放或零初始化末层等专门策略。

记忆钩子:随机性负责打破对称,方差尺度负责让信号稳定;这是初始化的两个不同任务。

八、常见误区与追问

  • 误区:只要不是全零,任意随机范围都可以。 过大或过小都会让前向与反向尺度逐层失真。
  • 误区:所有偏置也必须随机才能打破对称。 随机权重已区分神经元,偏置通常可安全初始化为零。
  • 追问:卷积层的 fan-in 怎么算? 用核高×核宽×每组输入通道数,分组卷积要除以 groups。
  • 追问:为什么 Leaky ReLU 的 gain 依赖负斜率? 负半轴也保留能量,二阶矩不再恰好减半。
  • 追问:有归一化层还要关注初始化吗? 仍要;归一化不能消除首步数值、残差分支和无归一化路径的风险。

九、加强记忆

权重不能初始化为全 0/全相同:同层神经元前向输出、反向梯度都相同→永远对称→学一样的东西,等于每层一个神经元(对称性无法打破),所以要随机初始化(偏置可为 0)。随机值的方差也要控制:太大→激活饱和/梯度爆炸,太小→信号衰减/梯度消失,目标是各层信号方差稳定Xavier/Glorot(方差 ≈2/(n_in+n_out))适配 sigmoid/tanhHe/Kaiming(方差 ≈2/n_in,因 ReLU 砍掉负半轴使方差减半、放大一倍补偿)适配 ReLU 系,是现代 ReLU 网络标配。有了 BatchNorm 对初始化没那么敏感,但好初始化仍有益。