Xavier 初始化(Glorot 2010)通过约束权重方差,让每层输入与输出方差近似相等,避免深层网络中信号/梯度的指数爆炸或消失。适用于 Sigmoid、Tanh 等对称激活;ReLU 应改用 Kaiming。

为什么需要

| 权重过大 | 前向信号指数增长,反向梯度爆炸 | | 权重过小 | 前向信号趋 0,反向梯度消失 | | 朴素随机 | 不考虑层维度,难以平衡信号传播 |

数学推导(核心)

假设输入 与权重 均为 0 均值、相互独立。全连接层 ,则

为使 ,前向方向需 ;类似地,反向方向需 。Xavier 取调和平均:

两种实现

分布采样公式
Xavier Uniform
Xavier Normal

实践中常引入 gain 调整尺度。

适用与不适用

场景是否适用
Sigmoid、Tanh 等对称激活
全连接层、传统 CNN
ReLU / Leaky ReLU / PReLU✗ 改用 Kaiming 初始化
自注意力(Transformer)通常用专门的 small-init 或 Xavier×0.02

ReLU 会置零负输入,破坏对称性假设,需 Kaiming 初始化。

PyTorch 用法

import torch
import torch.nn as nn
 
w = torch.empty(3, 5)
 
nn.init.xavier_uniform_(w, gain=nn.init.calculate_gain('tanh'))
nn.init.xavier_normal_(w, gain=1.0)

calculate_gain 返回针对常见激活函数(Tanh、Sigmoid、Linear)的推荐增益。

与 Kaiming 对比

维度XavierKaiming
适用激活对称(Sigmoid、Tanh)ReLU 及其变体
方差公式(fan_in 模式)
考虑负斜率是(Leaky ReLU 的 α)
现代深度学习渐少使用默认推荐