在深度学习中,线性层(全连接层)的权重初始化范围通常设置为 [-1/√n, 1/√n],其中 n 是输入神经元的数量(例如你提到的 10)。这种初始化方法被称为 Xavier 初始化(也称为 Glorot 初始化),其目的是保持信号在神经网络中的方差一致性,避免梯度消失或爆炸。
-
数学原理:
假设输入 x 的每个维度相互独立且方差为 Var(x),线性变换为 y = Wx + b,则输出 y 的方差为:
Var(y) = n * Var(W) * Var(x)
为了保持 Var(y) ≈ Var(x),需要 n * Var(W) ≈ 1,即 Var(W) ≈ 1/n。
当权重 W 均匀分布在 [-a, a] 时,其方差为 a²/3,因此:
a²/3 = 1/n ⇒ a = √(3/n) ≈ 1/√n
实际应用中,常简化为 a = 1/√n。
-
防止梯度消失 / 爆炸:
如果权重初始化过大,信号在网络中会被放大导致梯度爆炸;反之,若权重过小,信号会被缩小导致梯度消失。Xavier 初始化通过平衡方差来缓解这个问题。
以下是一个简单的 Python 示例,验证 Xavier 初始化对信号方差的影响:
import numpy as np
import matplotlib.pyplot as plt
- Xavier 初始化适用于 Sigmoid/Tanh 激活函数,因为它们的导数在原点附近约为 1。
- 对于 ReLU 激活函数,推荐使用 He 初始化(范围为
[-√(2/n), √(2/n)]),因为 ReLU 会使一半的神经元输出为 0,需要更大的权重来保持方差。
深度学习框架(如 PyTorch/TensorFlow)通常提供了这些初始化方法的内置实现,例如:
1/√n 范围是 Xavier 初始化的简化形式,用于保持信号方差,避免梯度问题。
- 初始化策略需根据激活函数类型调整(如 He 初始化更适合 ReLU)。
- 合理的初始化是训练深层网络的关键一步。