想象你是一名灌溉工程师,负责管理一片建在山坡上的多层梯田。水要从山顶水库出发,沿着七拐八弯的水管一路流到山脚的稻田。通水前,最重要的事不是马上开闸,而是把每一段水管的阀门调到合适的初始开度——开太大,水会冲毁田埂;开太小,水流到半途就渗没了;全部关死,一滴水也到不了田里。神经网络训练也是同样的逻辑:模型里千千万万个“阀门”就是权重,设置它们的初始开度,称为权重初始化。本文会用“调阀门”这个比喻贯穿全程,带你弄懂两本经典“阀门手册”——Xavier初始化和He初始化,并学会判断你的网络该用哪一本。

岗位关联

对AI从业者而言,掌握权重初始化是深度学习的“地基工程”:它能直接决定模型能否收敛、收敛多快,也是复现论文与调优模型的必备技能。

目录
  1. 可视化演示
  2. 起跑线的玄机:为何不能全零开局
  3. 梯度消失与爆炸:管道的放大镜效应
  4. 方差守恒:算出黄金开度
  5. Xavier初始化:为双向阀门定标
  6. He初始化:给ReLU单向阀加量
  7. 按图索骥:初始化策略选择
  8. 通水测试:验证与调试初始化
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

动态演示权重初始化的核心机制,通过采集/分析/决策/反馈四种模式展示关键概念与交互流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

权重初始化:权重初始 权重初始化重要性与全零初始化问 Xavier初始化的方差推导与 核心机制可视化 权重初始化整体架构与关键组件

起跑线的玄机:为何不能全零开局

灌溉工程师都知道,通水前最忌讳的不是阀门调错,而是所有阀门统一关死——这样每段水管的水流状态完全相同,整片梯田变成一条“单管直通”,你根本无法按土壤肥力给不同区域配水。神经网络里的全零初始化正是这个问题:如果所有权重都从0出发,每个神经元在每一层接收到的信息完全一样,梯度更新后权重依然保持相等,网络退化成一个超级简单的“单一神经元”,无论多少层都学不到复杂的特征组合。

“随机”二字因此成了破局关键。从某个分布中采样得到的初始权重可以打破对称性,让不同神经元各司其职。但随机也有讲究:阀门开得太大,第一层就把水流放大得横冲直撞;开得太小,水流经过三五层就渗入泥土消失不见。在数学上,我们给单个权重指定一个采样分布:

回到灌溉现场:科学的初始化,就是找到那套让每段水管流量不变的阀门参数。太激进的方案会毁掉系统,太保守的方案则让水流半路枯竭——而这一切的度量,都在“方差”这把尺子上。

w∼N(0, σ2)\displaystyle w \sim \mathcal{N}(0,\ \sigma^2)
  1. w单个权重,表示某两个神经元之间的连接强度,对应一段小水管的阀门开度。
    ww
  2. 采样符号 ~表示“从某个分布中随机抽取一个数”。训练开始前,每个权重都这样抽一次签,得到各自的初始开度。
    ∼\sim
  3. 正态分布 N(0, σ²)钟形曲线,均值0、标准差σ。均值0保证正负权重对称、无系统性偏移;σ控制离散程度,即阀门开度的随机浮动范围。σ取多大,正是Xavier与He要回答的核心问题。
    N(0,σ2)\mathcal{N}(0, \sigma^2)

梯度消失与爆炸:管道的放大镜效应

水库开闸后,你沿着主管道巡视,发现每段水管都不是理想管道——接口处有渗漏,内壁会改变水压,水流每经过一段就会被乘以某个放大系数。更要命的是,这些系数是相乘而不是相加的:哪怕是 0.9 这样接近1的系数,连续乘上30次后也会衰减到 0.9³⁰≈0.04,水流基本枯竭;反过来,1.1 连续乘30次则放大到 17 倍,下游直接爆管。

神经网络就是这条“水管链”。前向传播时,每一层的输出可以近似看作上一层的输入乘以权重矩阵,因此信号逐层缩放;反向传播时,误差梯度要沿着同一链条逐层回传,梯度值同样被逐层乘上权重系数。这个过程用方差的视角看,就是经典的“方差放大公式”:

可见,深层网络的训练困难本质上来自“乘法链”的放大镜效应。要让这条链稳定,就必须让每段的放大系数恰好等于1——这不是靠运气,而是靠数学精确计算出来的。

Var(y)=nin×Var(w)×Var(x)\displaystyle \mathrm{Var}(y) = n_{\mathrm{in}} \times \mathrm{Var}(w) \times \mathrm{Var}(x)
  1. Var(y)某层输出的方差。方差大,说明这一层的信号浮动范围大、信息丰富;方差趋近0,说明所有样本的输出挤成一团,网络“失明”了。
    Var(y)\mathrm{Var}(y)
  2. 输入神经元数 n_in汇入这一层的“水管支路数”。支路越多,叠加效应越强,信号被放大的基数就越大。
    ninn_{\mathrm{in}}
  3. 权重方差 Var(w)单个权重的方差,即初始阀门开度的分散程度。这是初始化方法唯一能拧动的旋钮。
    Var(w)\mathrm{Var}(w)
  4. 输入方差 Var(x)上一层送来的信号强度。如果每经过一层 Var(x) 都保持不变,信号就能稳定穿越整条管道。
    Var(x)\mathrm{Var}(x)

方差守恒:算出黄金开度

作为工程师,你拿起计算器,开始求解那道核心方程:阀门开度取什么值,水流经过每一段后强度等于进入时的强度?从上面的方差放大公式出发,要求输出方差等于输入方差,立即得到前向约束:$\mathrm{Var}(w) = 1 / n_{\mathrm{in}}$。

但水流不仅要往前走(前向传播),还要往回流(反向传播的梯度回传)。从输出端向输入端检查时,同样的守恒要求给出一个对称的约束:$\mathrm{Var}(w) = 1 / n_{\mathrm{out}}$。这就像在一条双向管道上校表——只看进水表或只看回水表都不够,必须让两个方向的读数都稳定。于是Xavier的聪明之处出现了:对这两个约束取调和平均,谁也不偏袒:

回看水管系统:前向校准给出一套开度,反向校准给出另一套,Xavier取了两者的中间值。这个“黄金开度”神奇地让信号在梯田管网中无论去程还是回程都保持稳定——你第一次拥有了可量化的阀门手册。

Var(w)=2nin+nout\displaystyle \mathrm{Var}(w) = \frac{2}{n_{\mathrm{in}} + n_{\mathrm{out}}}
  1. 前向项 n_in前向传播时,输入神经元数量决定信号叠加的规模。若权重方差为 $1/n_{\mathrm{in}}$,信号前向不衰减。
    ninn_{\mathrm{in}}
  2. 反向项 n_out反向传播时,输出神经元数量也参与梯度叠加。若权重方差为 $1/n_{\mathrm{out}}$,梯度回传不衰减。
    noutn_{\mathrm{out}}
  3. 黄金折中 2/(n_in+n_out)前向约束要求 $1/n_{\mathrm{in}}$,反向约束要求 $1/n_{\mathrm{out}}$,二者相差往往不大,取调和平均 $2/(n_{\mathrm{in}}+n_{\mathrm{out}})$ 让两个方向都接近守恒。这就是Xavier初始化的思想本体。
    2nin+nout\frac{2}{n_{\mathrm{in}} + n_{\mathrm{out}}}

Xavier初始化:为双向阀门定标

你打开第一本阀门手册,里面有 tanh 和 sigmoid 这样的“双向阀门”:正压、负压都能通过,水流方向不影响阀门特性。Xavier初始化就是为这类激活函数量身定做的。它的工程实现有两种等价配方——均匀分布与正态分布,二者方差完全相同,你可以根据口味选用。均匀分布版本在对称区间 $[-a, a]$ 内等概率采样,边界 $a$ 由黄金方差公式反推出来:

正态分布版本则直接以黄金方差的平方根作为标准差:

这套手册发布后迅速成为标准配置。但工程师们很快发现,当换上 ReLU 这种“单向阀门”时,水流损失了一半,Xavier 的保守设定就不够用了——市场需要一份更新版的阀门手册。

a=6nin+nout\displaystyle a = \sqrt{\frac{6}{n_{\mathrm{in}} + n_{\mathrm{out}}}}
w∼N(0, 2nin+nout)\displaystyle w \sim \mathcal{N}\left(0,\ \sqrt{\frac{2}{n_{\mathrm{in}} + n_{\mathrm{out}}}}\right)
  1. 均匀分布边界 a均匀分布 $\mathcal{U}(-a, a)$ 的方差为 $a^2/3$。令它等于黄金方差 $2/(n_{\mathrm{in}}+n_{\mathrm{out}})$,解出 $a=\sqrt{6/(n_{\mathrm{in}}+n_{\mathrm{out}})}$,这就是均匀版本Xavier的边界。
    a=6nin+nouta = \sqrt{\frac{6}{n_{\mathrm{in}} + n_{\mathrm{out}}}}
  2. 常数 6来自均匀分布方差公式 $a^2/3$ 与黄金方差 $2/(n_{\mathrm{in}}+n_{\mathrm{out}})$ 的联立:$a^2/3 = 2/(n_{\mathrm{in}}+n_{\mathrm{out}})$,移项即得 $a^2 = 6/(n_{\mathrm{in}}+n_{\mathrm{out}})$。
    a23=2nin+nout\frac{a^2}{3} = \frac{2}{n_{\mathrm{in}} + n_{\mathrm{out}}}
  3. 正态版本标准差正态分布 $\mathcal{N}(0, \sigma^2)$ 直接用 $\sigma = \sqrt{2/(n_{\mathrm{in}}+n_{\mathrm{out}})}$,与均匀版本方差完全相同,只是采样形状不同。
    σ=2nin+nout\sigma = \sqrt{\frac{2}{n_{\mathrm{in}} + n_{\mathrm{out}}}}

He初始化:给ReLU单向阀加量

ReLU 激活函数的数学表达式是 $\max(0, x)$——输入为正,原样通过;输入为负,一律截断为零。在灌溉比喻中,它就是一个只允许正向水流通过的单向阀。问题是:如果权重初始值围绕0对称分布,那么每经过一层ReLU,大约一半的神经元输出被置零,信号的方差整体减半。这就好比水流过一段管道后,有一半的水被挡掉,下游自然越来越干。

He初始化的解决思路非常直接:阀门开度加倍,把被ReLU截掉的一半方差补回来。于是权重方差从Xavier的 $2/(n_{\mathrm{in}}+n_{\mathrm{out}})$ 调整为只依赖输入规模的 $2/n_{\mathrm{in}}$:

He初始化就像是给单向阀管道单独标定的加量手册。当 $n_{\mathrm{in}} \approx n_{\mathrm{out}}$ 时,He 的方差大约是 Xavier 的两倍——这也呼应了“补偿ReLU砍掉的那一半”。现代深度网络几乎都标配ReLU家庭,因此 He 初始化成了深度学习事实上的默认阀门设定。

Var(w)=2nin\displaystyle \mathrm{Var}(w) = \frac{2}{n_{\mathrm{in}}}
  1. ReLU 定义 max(0, x)输入为负时输出0,输入为正时原样输出。由于初始权重均值为0,每层约一半神经元输出为0。
    max⁡(0,x)\max(0, x)
  2. 方差减半设随机变量 $x$ 关于0对称,则 $\mathbb{E}[\max(0,x)^2] = \frac{1}{2}\mathrm{Var}(x)$,输出方差变为输入的一半。
    Var(ReLU(x))=12Var(x)\mathrm{Var}(\mathrm{ReLU}(x)) = \frac{1}{2}\mathrm{Var}(x)
  3. 2 的补偿为了让输出方差等于输入方差,权重方差需要在前向约束 $1/n_{\mathrm{in}}$ 基础上乘以2,得到 $2/n_{\mathrm{in}}$。
    Var(w)=2nin\mathrm{Var}(w) = \frac{2}{n_{\mathrm{in}}}

按图索骥:初始化策略选择

现在你手里有两本阀门手册,该用哪一本?工程师的做法是“先看地形,再选手册”。地形就是激活函数:tanh 和线性激活是双向阀,用 Xavier;ReLU 和它的变体(LeakyReLU、PReLU)是单向阀,用 He。sigmoid 虽然也是双向阀,但它在两端极易饱和,实践中往往配合 BN 或干脆换成 tanh。这个决策逻辑可以写成一张分段选择表:

光看激活函数还不够,管道长度同样重要。网络深度超过 50 层时,即便用了 He,微小的方差误差也会随层数累积。这时需要第二个稳压器——批归一化(Batch Normalization)。BN 强制把每层输出拉回标准分布,相当于在每段水管中间装了一个“恒定水压调节器”,让初始化即使不是完美也能被快速校正。工程上 He + BN 是极深网络的标配组合,二者配合可以让上百层的残差网络稳定训练。

θ(0)∼{U ⁣(−6nin+nout, 6nin+nout),激活函数为 tanh/线性N ⁣(0, 2nin),激活函数为 ReLU 系\displaystyle \theta^{(0)} \sim\begin{cases}\mathcal{U}\!\left(-\sqrt{\frac{6}{n_{\mathrm{in}}+n_{\mathrm{out}}}},\ \sqrt{\frac{6}{n_{\mathrm{in}}+n_{\mathrm{out}}}}\right), & \text{激活函数为 tanh/线性}\\[4pt]\mathcal{N}\!\left(0,\ \sqrt{\frac{2}{n_{\mathrm{in}}}}\right), & \text{激活函数为 ReLU 系}\end{cases}
  1. 第一行 tanh/线性双向阀门,使用 Xavier 均匀分布,边界为 $\sqrt{6/(n_{\mathrm{in}}+n_{\mathrm{out}})}$。
    U ⁣(−6nin+nout, 6nin+nout)\mathcal{U}\!\left(-\sqrt{\frac{6}{n_{\mathrm{in}}+n_{\mathrm{out}}}},\ \sqrt{\frac{6}{n_{\mathrm{in}}+n_{\mathrm{out}}}}\right)
  2. 第二行 ReLU 系单向阀门,使用 He 正态分布,标准差为 $\sqrt{2/n_{\mathrm{in}}}$。
    N ⁣(0, 2nin)\mathcal{N}\!\left(0,\ \sqrt{\frac{2}{n_{\mathrm{in}}}}\right)

通水测试:验证与调试初始化

阀门调完,真正的工程师不会直接宣布完工——他要开闸放水,逐段检查水压表。对应到神经网络,这个“水压表”就是每层输出的方差。操作方法很简单:喂一批随机输入,记录每个线性层输出的方差值。如果相邻层方差之比稳定在1附近,说明信号穿越健康;如果逐层衰减到0.01,说明初始化偏小;如果指数级膨胀到几十上百,说明初始化偏大。诊断指标写作:

除了前向测压,还有反向测压:检查首次反向传播时各层梯度的范数分布,若梯度从后向前逐层消失或爆炸,同样能定位问题。最后一步是训练曲线对比——同一模型分别用全零、Xavier、He 初始化跑几十个 batch,观察 loss 下降速度与早期波动幅度。通常 He + ReLU 的组合会让 loss 以肉眼可见的速度俯冲,而错误初始化要么停滞不前、要么剧烈震荡。这套“通水测试”流程,正是区分调参老手与新手的关键所在。

Var(al)Var(al−1)≈1\displaystyle \frac{\mathrm{Var}(a_l)}{\mathrm{Var}(a_{l-1})} \approx 1
  1. a_l 与 a_{l-1}第 l 层与它前一层的输出激活值。两者的方差比值就是该段水管的“放大系数”。
    al, al−1a_l,\ a_{l-1}
  2. 比值≈1方差比接近1表示信号稳定穿越。实践中 0.8~1.2 属于健康区间;偏差过大则说明初始化需要调整。
    Var(al)Var(al−1)≈1\frac{\mathrm{Var}(a_l)}{\mathrm{Var}(a_{l-1})} \approx 1

AI 应用场景

训练ResNet-50图像分类模型

阶段:模型训练准备阶段

解决的问题:ResNet-50 有上百层网络,传统的小随机数初始化会导致信号在深层逐层衰减,前向传播时特征消失,反向传播时早期层几乎收不到梯度,训练陷入停滞。使用 He 初始化配合批归一化,能让信号在残差连接中稳定流动。

具体案例:某电商团队训练商品图片分类模型,最初使用默认的小方差正态初始化,ResNet-50 训练 20 个 epoch 后精度仍不足 40%。改用 He 初始化并加上 BN 后,同样的硬件上第 5 个 epoch 就超过了原方案 20 个 epoch 的水平,最终 Top-5 精度提升到 92% 以上。

GAN生成对抗网络的稳定训练

阶段:模型构建与训练阶段

解决的问题:生成器和判别器互为对抗,任何一方信号失衡都会导致训练崩溃。判别器多用 LeakyReLU 激活,生成器输出层用 tanh,二者需要不同初始化策略,统一使用一种方案会让其中一方梯度不稳定。

具体案例:在训练人脸生成 GAN 时,判别器卷积层使用 He 初始化(适配 LeakyReLU),生成器靠近输出的全连接层使用 Xavier 均匀初始化(适配 tanh)。这种“按层选手册”的做法显著减少了模式坍塌的出现频率,生成图片的 FID 分数从 35 降至 21。

复现论文模型:让实验可复现

阶段:模型复现与调优阶段

解决的问题:复现论文时,初始化的微小差异会导致训练曲线与论文结果对不上。PyTorch 的默认初始化与论文指定的初始化可能不同,必须显式设置与论文一致的分布。

具体案例:研究团队复现一篇 Transformer 改进论文时,发现训练 loss 始终比论文高 15%。排查后确认论文使用 Xavier 均匀初始化而 PyTorch 默认是 Kaiming 均匀初始化。显式调用 nn.init.xavier_uniform_ 后,loss 曲线与论文完全吻合。

Python 演示

python43 行
import torchimport torch.nn as nn  def build_mlp(init_name):    layers = []    sizes = [784, 512, 256, 128, 10]    for i in range(len(sizes) - 1):        layers.append(nn.Linear(sizes[i], sizes[i + 1]))        layers.append(nn.ReLU())    model = nn.Sequential(*layers)    if init_name == "zero":        for m in model:            if isinstance(m, nn.Linear):                nn.init.zeros_(m.weight)    elif init_name == "xavier":        for m in model:            if isinstance(m, nn.Linear):                nn.init.xavier_uniform_(m.weight)    elif init_name == "he":        for m in model:            if isinstance(m, nn.Linear):                nn.init.kaiming_uniform_(m.weight, mode="fan_in",                                         nonlinearity="relu")    return model  def check_forward(init_name):    model = build_mlp(init_name)    x = torch.randn(256, 784)    with torch.no_grad():        y = x        for i, layer in enumerate(model):            y = layer(y)            if isinstance(layer, nn.Linear):                var = y.var().item()                print(f"  Linear_{i} output var = {var:.4f}")  if __name__ == "__main__":    for name in ["zero", "xavier", "he"]:        print(f"[{name}]")        check_forward(name)
目的:用同样的随机输入分别经过三种初始化的 MLP,打印每个线性层的输出方差,验证不同初始化策略对信号强度的影响。
  1. model = nn.Sequential(*layers)把多个线性层和激活函数串成一条“水管链”,每个模块按顺序前向传播。
  2. nn.init.zeros_(m.weight)演示全零初始化:所有阀门关死,这是会导致对称瘫痪的错误示范。
  3. nn.init.xavier_uniform_(m.weight)调用 PyTorch 内置的 Xavier 均匀分布初始化,对应 tanh 类激活的黄金开度。
  4. nn.init.kaiming_uniform_(m.weight, mode="fan_in", nonlinearity="relu")调用 PyTorch 内置的 He(Kaiming)初始化,按前向输入规模 fan_in 计算方差并适配 ReLU。
  5. y = layer(y)逐层前向传播,让数据依次流过每个阀门,观察信号被逐层缩放的情况。
  6. y.var().item()取出当前层输出的方差数值,相当于读取这段水管的“水压表”读数。

常见误区

误区“把权重全部初始化为 0 最稳妥,反正训练过程会自动调整,又不引入随机性。”

正解全零初始化会让所有神经元的输入、输出、梯度完全相同,网络退化为一个线性模型,无论多深都学不到复杂特征。这就像把所有灌溉阀门统一关死,水流系统完全失去调节能力。必须用随机初始化打破对称性,让每个神经元探索不同特征。

为何常见:直觉上“零”代表中立、无偏,容易被理解为安全的起点,而忽略了对称性这个隐性陷阱。

误区“初始化权重应该尽量小,这样不会出现梯度爆炸,训练更稳定。”

正解权重过小恰恰会导致梯度消失,多层相乘后信号指数级衰减,深层网络根本学不到东西。正确的目标不是“小”,而是“方差守恒”——让信号在每一层既不放大也不缩小。就像阀门开太小水流会干涸,开太大又会爆管,合适才是王道。

为何常见:人们容易把梯度爆炸这一种失败模式过度泛化,走向另一个极端,忽略了消失与爆炸是同一枚硬币的两面。

误区“Xavier 是经典方法,不管用 ReLU、tanh 还是 sigmoid,都直接套用它初始化就行。”

正解Xavier 假设激活函数可近似为线性且信号能双向通过,这个假设对 tanh 成立,对 ReLU 却失效——ReLU 会截断一半负信号,方差减半。此时必须用 He 初始化把阀门开度加倍。就像单向阀管道不能照搬双向阀门的开度标准。

为何常见:Xavier 发表在 ReLU 大规模流行之前,很多人沿袭旧习惯,没有意识到激活函数变化对初始化假设的冲击。

误区“BN 会把每层输出强行拉回标准分布,那初始化随便写写就行。”

正解BN 确实能缓解内部协变量偏移(internal covariate shift),但它无法修复初始化带来的信息彻底消失——如果某一层输出方差在初始化后已经趋近于 0,BN 处理的是一堆近乎相同的数值,无法恢复已丢失的信号多样性。而且 BN 仅在前向传播中稳压,对反向传播早期的梯度消失帮助有限。初始化仍是第一道防线。

为何常见:BN 的“稳压器”形象容易让人误以为它可以兜底一切,忽视了信息在源头就已损失的事实。

误区“无论怎么初始化,只要训练足够久,最终都能收敛到同样的好结果。”

正解损失曲面充满局部极小值和平坦区域,初始位置直接决定了你能到达哪个谷底。糟糕的初始化不仅拖慢收敛,还可能让模型困在对称解或梯度消失区,最终精度显著低于用 Xavier/He 启动的模型。这就像从不同海拔出发登山,起步位置错了,再努力也到不了同一座山顶。

为何常见:在小网络上训练多次可能感觉差别不大,但深层网络对初始点的敏感度会被层数急剧放大,这种经验在小模型上不成立。

面试题

Q1. 全零初始化最根本的危害是什么?

单选题 · easy

  • A.参数数量太多导致过拟合
  • B.所有神经元对称更新,网络退化← 正确答案
  • C.训练速度变得过快难以控制
  • D.模型占用的显存空间翻倍

答案:B。全零初始化让每个神经元接收到相同的输入、产生相同的输出、得到相同的梯度,更新后权重依然保持相等,网络等价于一个单一神经元,学不到任何复杂特征。这就像所有阀门统一关死,整条灌溉系统变成一个无差异的管道。

Q2. Xavier 初始化的权重方差公式是?

单选题 · easy

  • A.$\frac{1}{n_{in}}$
  • B.$\frac{1}{n_{out}}$
  • C.$\frac{2}{n_{in}+n_{out}}$← 正确答案
  • D.$\frac{2}{n_{in}}$

答案:C。Xavier 同时考虑前向与反向两个方向的方差守恒,前向要求 $1/n_{in}$,反向要求 $1/n_{out}$,取调和平均得到 $2/(n_{in}+n_{out})$。这是“黄金开度”公式,让信号在双向管道中都保持稳定。

Q3. He 初始化主要针对哪类激活函数设计?

单选题 · easy

  • A.sigmoid
  • B.tanh
  • C.ReLU 及其变体← 正确答案
  • D.softmax

答案:C。ReLU 会把负输入截断为 0,导致每层约一半神经元输出为 0、方差减半。He 初始化通过把权重方差加倍来补偿这个损失,因此专门适配 ReLU、LeakyReLU 等“单向阀”激活函数。

Q4. 权重初始化过大会直接导致什么问题?

单选题 · mid

  • A.梯度消失,网络无法学习
  • B.梯度爆炸,训练震荡发散← 正确答案
  • C.模型过拟合,泛化变差
  • D.模型欠拟合,偏差增大

答案:B。权重过大时,信号在每一层被放大,多层相乘后数值指数级膨胀,反向传播的梯度也同步爆炸,权重更新步长失控,损失值剧烈震荡甚至发散。就像阀门开得太大,水流越冲越猛最终爆管。

Q5. 均匀分布版 Xavier 的边界参数 a 等于什么?

单选题 · mid

  • A.$\sqrt{\frac{2}{n_{in}+n_{out}}}$
  • B.$\sqrt{\frac{6}{n_{in}+n_{out}}}$← 正确答案
  • C.$\sqrt{\frac{2}{n_{in}}}$
  • D.$\sqrt{\frac{6}{n_{in}}}$

答案:B。均匀分布 $\mathcal U(-a,a)$ 的方差为 $a^2/3$,令其等于黄金方差 $2/(n_{in}+n_{out})$,解得 $a=\sqrt{6/(n_{in}+n_{out})}$。常数 6 正是均匀分布方差公式带来的系数。

Q6. 若某层权重方差设置为 $Var(w)=1/n_{in}$,前向传播的输出方差与输入方差关系是?

单选题 · mid

  • A.输出方差约为输入方差的 n 倍
  • B.输出方差与输入方差近似相等← 正确答案
  • C.输出方差约为输入方差的 1/n
  • D.输出方差与输入方差无关

答案:B。前向方差公式 $Var(y)=n_{in}\times Var(w)\times Var(x)$,代入 $Var(w)=1/n_{in}$ 后 $n_{in}$ 约掉,得到 $Var(y)=Var(x)$。这就是前向方差守恒约束,是 Xavier 推导的一半根基。

Q7. 为什么 ReLU 网络中 He 初始化效果优于 Xavier?

单选题 · hard

  • A.ReLU 输出包含大量负值需要抑制
  • B.ReLU 让一半神经元输出 0,方差减半需补偿← 正确答案
  • C.Xavier 的计算复杂度在深层网络中过高
  • D.He 初始化能自动调整学习率

答案:B。ReLU 将负输入截断为 0,由于初始权重以 0 为中心对称分布,每层约一半神经元失活,输出方差变为输入的一半。He 通过把权重方差乘以 2(即 $2/n_{in}$)补偿这 50% 的水流损失,让信号恢复守恒,而 Xavier 未做此补偿。

Q8. 以下哪些是良好初始化应具备的特性?

多选题 · mid

  • A.打破神经元之间的对称性← 正确答案
  • B.前向传播方差逐层稳定← 正确答案
  • C.梯度在反向传播中可控← 正确答案
  • D.所有权重初始化为正数

答案:ABC。良好初始化必须用随机性打破对称(A),让前向信号方差守恒(B),并保证梯度回传不消失不爆炸(C)。权重全为正会让所有激活偏向同一方向,且将围绕平均值移动,并不满足对称性要求,因此 D 错误。

Q9. 哪些手段可以有效缓解深层网络的梯度消失?

多选题 · mid

  • A.使用 ReLU 作为激活函数← 正确答案
  • B.在网络中加入批归一化层← 正确答案
  • C.使用 He 初始化← 正确答案
  • D.使用全零初始化

答案:ABC。ReLU 的梯度在正区间恒为 1,比 sigmoid 的饱和区梯度消失问题轻得多(A 正确);BN 把每层输出拉回标准分布,稳定了前向和反向的信号尺度(B 正确);He 初始化从源头保证了信号方差守恒(C 正确)。全零初始化会让梯度完全对称且无法打破,加剧问题,D 错误。

Q10. 关于 Xavier 与 He 初始化的关系,下列说法正确的有?

多选题 · hard

  • A.He 的权重方差约为 Xavier 的两倍← 正确答案
  • B.二者的思想本质都是方差守恒← 正确答案
  • C.He 初始化适用于 sigmoid 激活网络
  • D.极深网络中 He 常与 BN 搭配使用← 正确答案

答案:ABD。当 $n_{in}\approx n_{out}$ 时,He 方差 $2/n_{in}$ 约是 Xavier 方差 $2/(n_{in}+n_{out})$ 的两倍(A 正确)。两者实质都是求解让信号方差不增不减的开度(B 正确)。sigmoid 不是单向阀且易饱和,He 的加倍方差反而会加剧饱和问题,C 错误。极深网络往往需要 He + BN 双重保障,D 正确。