阅读量:0
数值稳定性的两个常见问题
1. 梯度爆炸
梯度爆炸的问题:
值超出值域, 对于16位浮点数尤为严重
对学习率敏感:如果学习率太大->大参数值->更大的梯度,如果学习率太小->训练无进展
2. 梯度消失
梯度消失的问题:
梯度值变成0,对16位浮点数尤为严重
不管如何选择,训练没有进展
对于底部层尤为严重,仅仅顶部层训练的效果好,无法让神经网络更深
数值稳定性总结
当数值过大或过小时会导致数值问题
问题常发生在深度模型中,因为其会对n个数值累乘
让训练更加稳定
目标:让梯度值在合理的范围内,如[1e-6,1e3]
方法:将乘法变为加法、归一化、梯度裁剪、合理的权重初始化和选择合适的激活函数
让每层的方差是一个常数
将每层的输出和梯度都看作随机变量,让他们的均值和方差都保持一致。
权重初始化
在合理值区间内随机初始参数。训练开始时更容易发生数值不稳定,如远离最优解的地方损失函数表面可能很复杂,最优解附近损失函数表面较为平缓。使用正态分布N(0, 0.01)来初始权重对于较小的神经网络没有问题,但不能保证深度神经网络的稳定性。
默认初始化
如果我们不指定初始化方法, 框架将使用默认的随机初始化方法,对于中等难度的问题,这种方法通常很有效。
Xavier初始化
Xavier初始化也是一种常用的初始化方法。Xavier初始化从均值为0,方差为 的高斯分布中采样权重。我们也可以将其改为选择从均匀分布中抽取权重,均匀分布服从
目录
合理的权重初始值和激活函数可以提升数值稳定性