03-训练核心 核心 预计 20 分钟

权重初始化:让梯度健康流动

权重初始化(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 的正交初始化是两个进阶延伸点。

自测题

  1. 为什么权重不能全部初始化为 0?

答案要点:同层神经元完全对称,前向输出与反向梯度全同,永远学成同一个函数。

  1. 推导 Xavier 方差公式中的 1/n_in 项从何而来。

答案要点:z=Σᵢwᵢaᵢ 有 n_in 个独立项,方差=n_in·Var(w)·Var(a),令其守恒解出 Var(w)=1/n_in。

  1. 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 原文,含饱和区分析)。

学习状态

状态保存在浏览器本地,用于首页与路径页的进度统计。