数值稳定性和模型初始化——2020.3.2
一、衰减和爆炸
当神经⽹络的层数较多时,模型的数值稳定性容易变差。例如假设权重分别为0.2和5,\(0.2^{30} \approx 1\times 10^{-21}\)(此时得到一个很小的数,会导致神经元学习非常慢,从而导致衰减。),\(5^{30} \approx 9\times 10^{20}\)(此时得到一个非常大的数,因此造成梯度爆炸。)
二、 随机初始化模型参数
如果一个网络里面包含若干神经元,这些参数在基于梯度的优化算法迭代后值依然相等,之后的迭代也是如此。那么着若干个神经元就好比等同于一个神经元,为了使其余的神经元发挥作用,因此需要进行随机初始化。
( 一 )PyTorch默认随机初始化
可以使用torch.nn.init.normal_()
使模型net
的权重参数采用正态分布的随机初始化方式。其中nn.model
对每一个layer采取的初始化策略都有考量,可参考源代码.
( 二 )Xavier随机初始化
还有⼀种⽐较常⽤的随机初始化⽅法叫作Xavier随机初始化[1]。 假设某全连接层的输⼊个数为 \(a\),输出个数为 \(b\) ,Xavier随机初始化将使该层中权᯿参数的每个元素都随机采样于均匀分布:
\[U\left(- \sqrt{\frac{6}{a + b}},\sqrt{\frac{6}{a + b}}\right)
\]
它的设计主要考虑到,模型参数初始化后,每层输出的⽅差不该受该层输⼊个数影响,且每层梯度的⽅
差也不该受该层输出个数影响。
三、小结
- 深度模型有关数值稳定性的典型问题是衰减和爆炸。当神经⽹络的层数较多时,模型的数值稳定性容易变差。
- 我们通常需要随机初始化神经⽹络的模型参数,如权重参数。