权重初始化:让梯度健康流动
权重初始化(Weight Initialization)决定训练起点:把权重按与层宽相关的方差随机分布(Xavier 用 2/(n_in+n_out),Kaiming 用 2/n_in),使信号前向不衰减、梯度后向不爆炸,让深网络从第一步就能学。
一句话定义
权重初始化(Weight Initialization)决定训练起点:把权重按与层宽相关的方差随机分布(Xavier 用 2/(n_in+n_out),Kaiming 用 2/n_in),使信号前向不衰减、梯度后向不爆炸,让深网络从第一步就能学。
直觉
初始化像「合唱团开场定调」:调起太高(方差过大)唱两句就破音(激活爆炸),太低(方差过小)声音传到后排就没了(信号消失);Xavier/Kaiming 就是按「队伍长度」(层宽)科学定调的规则。
为什么重要
零初始化会让同层所有神经元对称死锁、永不分化;朴素随机初始化在深网络中让激活逐层方差滚雪球或滚雪崩,10 层网络都训不动。Xavier(2010)与 Kaiming(2015)两次让「能训多深」跃迁,直接服务于 kp-019 中 152 层 ResNet 的诞生,是「方差分析」工程威力的最佳样本。
前置知识
- kp-007(反向传播中梯度逐层相乘的结构)、kp-006(激活函数的增益差异)。
- 库外前置:随机变量方差的可加性 Var(aX)=a²Var(X)。
核心概念
- 对称性破缺:初始权重必须互不相同,否则同层神经元梯度全同、永远等效一个神经元。
- Xavier/Glorot 初始化:按前向信号方差守恒设计,适合 tanh/sigmoid。
- Kaiming/He 初始化:按 ReLU 有一半输出被截断修正,适合 ReLU 系。
- 扇入/扇出(fan_in/fan_out):n_in 为该层输入维度、n_out 为输出维度。
- bias 初始化:通常置 0 即可(不对称性已由权重保证)。
原理与机制
考察 l 层前向:a⁽ˡ⁾ = φ(W⁽ˡ⁾a⁽ˡ⁻¹⁾)。设权重独立同分布、均值为 0、方差为 Var(w),输入各维方差 Var(a)。z⁽ˡ⁾ 的方差 = n_in · Var(w) · Var(a⁽ˡ⁻¹⁾)(n_in 项独立乘积求和)。要方差逐层不变,需 Var(w) = 1/n_in。kp-007 的反向传播 δ 逐层回传同理要求 Var(w) = 1/n_out。Xavier 取两者几何平均:Var(w) = 2/(n_in+n_out)——同时照顾前向信号与后向梯度,配合零中心的 tanh 恰好成立。ReLU 打破了前提:一半输入被截断为 0,激活方差减半,He 等 2015 修正为 Var(w) = 2/n_in(只用扇入,前向为准),补上被 ReLU 吃掉的那一半。两个公式只差一个因子 2,却是「tanh 时代」与「ReLU 时代」的分界碑。方差不匹配的数值后果:每层方差乘 1.5,30 层后激活量级达 1.5³⁰ ≈ 19 万,浮点溢出、softmax 前 logits 巨大、损失直接 NaN;每层乘 0.66 则 30 层后信号缩到万分之一,梯度同样消失——「方差守恒」不是美学而是数值生存条件。实现上框架已内置:PyTorch 的 nn.Linear 默认即 Kaiming-uniform,多数情况无需手动干预,但自定义层与特殊结构(残差分支的最后一层常再缩放,见 kp-020)需要显式设置。
公式或模型
两个经典初始化的方差设计(均匀分布区间由方差反解:U(−a,a) 的方差 = a²/3):
前向方差: Var(z⁽ˡ⁾) = n_in · Var(w) · Var(a⁽ˡ⁻¹⁾) (要求 = Var(a⁽ˡ⁻¹⁾))
Xavier: Var(w) = 2/(n_in + n_out) → tanh/sigmoid 适用
Kaiming: Var(w) = 2/n_in → ReLU 系适用(截断修正因子 2)变量说明:n_in 为扇入维度,n_out 为扇出维度。推导核心只有一行:独立项求和的方差 = 项数 × 单项方差。
图示
激活量级随深度(方差/层=1.5 时):
层: 1 5 10 20 30
幅: 1.0 → 7.6 → 58 → 3.3e3 → 1.9e5 (爆炸→NaN)
方差/层=0.66 时反向同理衰减万倍(消失→学不动)
Kaiming/Xavier:幅值 ≈ 1 一直到底直观类比
方差守恒像「信号增益一致的有源中继」:每级放大器增益严格为 1,信号传 100 级也不衰减不失真;初始化就是在出厂时校准每一级的增益。
实例或案例
数值实验(10 行代码):构造 30 层 512 宽全连接网络,前向传播后逐层打印激活标准差。用 N(0, 0.1²) 初始化:第 30 层 std 约萎缩 4 个数量级;用 N(0, 1) 初始化:第 8 层即溢出到 inf;用 Kaiming:全层稳定在 1 附近。把同一实验接入训练,前两种初始化的损失曲线分别表现为「平台期无限长」与「第 2 步 NaN」——初始化是损失曲线形态的隐藏导演(kp-027 诊断时的必查项之一)。
常见误区
- 「权重全初始化为 0 最简单安全」:对称性死锁,所有神经元收到相同梯度、永远相同,网络等效单神经元。
- 「框架默认没问题就不用懂原理」:自定义层、残差分支缩放、RNN 正交初始化等场景必须手动处理,不懂原理就会埋雷。
- 「Kaiming 比 Xavier 新所以全用 Kaiming」:tanh/sigmoid 网络用 Xavier 才是正解,选型跟着激活函数走。
- 「bias 也要精心随机初始化」:bias 置 0 即可,破缺由权重承担。
与其他知识点的关系
本知识点是 kp-007 方差链分析的直接应用;kp-006 决定用哪个公式(激活函数选型);kp-010 的动量助推(Sutskever 2013)与初始化强度耦合;kp-020 残差分支的初始化缩放、kp-023 LSTM 的正交初始化是两个进阶延伸点。
自测题
- 为什么权重不能全部初始化为 0?
答案要点:同层神经元完全对称,前向输出与反向梯度全同,永远学成同一个函数。
- 推导 Xavier 方差公式中的 1/n_in 项从何而来。
答案要点:z=Σᵢwᵢaᵢ 有 n_in 个独立项,方差=n_in·Var(w)·Var(a),令其守恒解出 Var(w)=1/n_in。
- Kaiming 相比 Xavier 为什么把分子从 2/(n_in+n_out) 改为 2/n_in?
答案要点:ReLU 截断一半激活使方差减半,为维持方差需把 Var(w) 翻倍;He 版以扇入为准。
延伸阅读
- He、Zhang、Ren、Sun《Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification» ICCV 2015。
- Glorot、Bengio AISTATS 2010(Xavier 原文,含饱和区分析)。
学习状态
状态保存在浏览器本地,用于首页与路径页的进度统计。