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 对比
| 维度 | Xavier | Kaiming |
|---|---|---|
| 适用激活 | 对称(Sigmoid、Tanh) | ReLU 及其变体 |
| 方差公式 | (fan_in 模式) | |
| 考虑负斜率 | 否 | 是(Leaky ReLU 的 α) |
| 现代深度学习 | 渐少使用 | 默认推荐 |