核心要点

  • 初始化目标:让逐层激活梯度方差保持稳定,防止信号指数级衰减或放大

  • Xavier/Glorot 适配 tanh/sigmoid,方差取 ~1/fan_avg(前后向折中)

  • He/Kaiming 适配 ReLU 族,方差取 ~2/fan_in,补偿 ReLU 砍掉一半激活

  • 全 0 或全相同会破坏对称性,过大易爆炸、过小易消失,需按激活函数选择

标准回答

为什么重要

深网络中每层都会缩放信号,若初始权重过大,前向激活和反向梯度会逐层放大导致爆炸;过小则逐层衰减导致梯度消失。好的初始化让各层方差近似不变,训练初期就能稳定收敛。

Xavier / Glorot

针对 tanh、sigmoid 等关于 0 对称、近似线性的激活,让前向与反向方差同时守恒,取权重方差约 1/fan_avg(fan_avg = (fan_in+fan_out)/2),有均匀分布与正态分布两种形式。

He / Kaiming

针对 ReLU/Leaky ReLU:ReLU 会把约一半激活置零,使方差减半,故方差放大到约 2/fan_in 来补偿。深层 CNN/ResNet 默认用它。

一句话:对称激活用 Xavier,ReLU 族用 He;配合 BatchNorm/残差连接可进一步降低对初始化的敏感度。

常见误区

⚠️ 常见踩坑

把 Xavier 用在 ReLU 网络上会让深层激活方差偏小、信号衰减;初始化不能替代归一化,BatchNorm/残差仍是稳定深层训练的关键。

追问

追问 1为什么不能把所有权重初始化为同一个常数(如全 0)?

同层神经元会接收相同输入、产生相同输出与相同梯度,更新后始终保持一致,称为对称性无法打破,等效于该层只有一个神经元。必须用随机初始化引入差异。

追问 2fan_in 和 fan_out 分别指什么?为什么影响方差选择?

fan_in 是该层输入维度(前向方差由它决定),fan_out 是输出维度(反向梯度方差由它决定)。Xavier 用两者平均兼顾前后向;He 关注前向激活存活,故只用 fan_in。

延伸学习

与本题相关的知识库文章、术语、工具与行业资讯。