Pytorch框架学习(9)——权值初始化
1. 梯度消失与梯度爆炸
不恰当的权值初始化可能会引起梯度消失或者梯度爆炸。
我们从一个例子中来理解梯度消失与梯度爆炸。,下图给出一个两层网络,我们来计算一下的梯度。
从计算过程中可以看到,当趋近于0时,会导致的梯度趋近于0,造成梯度消失;当趋近于无穷时,会导致的梯度趋近于无穷,造成梯度爆炸。
因此,要避免梯度消失或者梯度爆炸,就要控制网络输出层的值的尺度范围,也就是每一层网络输出值不能过大或者太小。
2. Xavier方法与Kaiming方法
2.1 Xavier初始化
- 方差一致性:保持数据尺度维持在恰当范围,通常方差为1(尽量让每个网络层输出的方差等于1)
- **函数:饱和函数,如Sigmoid, Tanh
是输入层的神经元个数,表示输出层神经元的个数,权值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