1. 梯度消失与梯度爆炸
不恰当的权值初始化可能会引起梯度消失或者梯度爆炸。
我们从一个例子中来理解梯度消失与梯度爆炸。,下图给出一个两层网络,我们来计算一下
W
2
W_2
W2的梯度。
从计算过程中可以看到,当
H
1
H_1
H1趋近于0时,会导致
W
2
W_2
W2的梯度趋近于0,造成梯度消失;当
H
1
H_1
H1趋近于无穷时,会导致
W
2
W_2
W2的梯度趋近于无穷,造成梯度爆炸。
因此,要避免梯度消失或者梯度爆炸,就要控制网络输出层的值的尺度范围,也就是每一层网络输出值不能过大或者太小。
2. Xavier方法与Kaiming方法
2.1 Xavier初始化
- 方差一致性:保持数据尺度维持在恰当范围,通常方差为1(尽量让每个网络层输出的方差等于1)
- 激活函数:饱和函数,如Sigmoid, Tanh
n i n_i ni是输入层的神经元个数, n i + 1 n_{i+1} ni+1表示输出层神经元的个数,权值w的初始化值可按照上述公式推导方法得到。
2.2 Kaiming初始化
参考文献《Delving deep into rectifiers: Surpassing human-level performance on ImageNet classification》
- 方差一致性:保持数据尺度维持在恰当范围,通常方差为1
- 激活函数:ReLU及其变种
3. 常用初始化方法
- Xavier均匀分布
- Xavier标准正态分布
- Kaiming均匀分布
- Kaiming标准正态分布
- 均匀分布
- 正态分布
- 常数分布
- 正交矩阵初始化
- 单位矩阵初始化
- 稀疏矩阵初始化
- nn.init.calculate_gain
- 功能:计算方法变化尺度:输入数据的方差除以经过激活函数之后输出数据的方差。
- 主要参数
- nonlinearity:激活函数名称
- param:激活函数的参数,如leaky ReLU的negative_slop