数值稳定性
数值稳定性常见的两个问题:梯度爆炸和梯度消失
梯度爆炸的问题:值超出值域(infinity)
1. 对于16位浮点数尤为严重(数值区间在6e-5 to 6e4)
2. 学习率敏感
3. 如果学习率太大->大参数值->更大的梯度
4. 如果学习率太小->训练无进展
5. 我们可能需要在训练过程中不断调整学习率
梯度消失的问题:
1.梯度变成0,对16位浮点数尤为严重
2.训练没有进展,不管如何选择学习率
3.对于底部层尤为严重,仅仅顶部层训练的较好,无法让神经网络更深
总结
1.当数值过大或者过小的时候,会导致数值问题
2.常发生在深度模型中,因为其会对n个数累乘
模型初始化和激活函数
让训练更加稳定
目标: 让梯度值在合理的范围内,例如[1e-6, 1e3]
将乘法变加法,ResNet,LSTM
归一化,梯度归一化,梯度裁剪
因此,需要选择合理的权重初始和激活函数。
让每层的方差是一个常数
1.将每层的输出和梯度都看作随机变量。
2.让它们的均值和方差都保持一致。
权重初始化
1.在合理的值区间里随机选择初始参数
2.训练开始的时候更容易有数值不稳定:远离最优解的地方损失函数表面可能很复杂,最优解附近表面可能会比较平
3.使用N(0,0.01)来初始可能对小网络没问题,但不能保证深度神经网络。
总结
合理的权重初始值和激活函数的选取可以提升数值稳定性。