您的位置:首页 > 其它

深度学习之数值计算 (一)overflow and underflow

2017-09-06 10:29 1111 查看
前言:本系列文章,来自Yoshua Bengio大神的《deep learning》,深度学习已经应用了一段时间,打算学习下理论知识,这样才能有突破。

在数字计算机上执行连续数学的基本困难在于,我们需要用有限的(bit)位数来表示无限的实数。这就意味着,当我们在计算机中去表示这些实数时,几乎所有的实数都会发生近似误差。大多数情况,这些是取整误差(rounding error)。取整误差是一个大问题,特别如果不进行累计误差最小化,当它要经常很多操作时,会导致算法理论可行但实际应用失败。

一种毁灭性的rounding error就是下溢(underflow)。当数字接近0被取整为0时,underflow就发生了。许多函数的参数为0时与参数是接近0的正数时,表现是非常不同的。比如,我们经常要避免去除以0。

另一个高危的数值误差是上溢(overflow)。当大数值被近似成

或-

overflow就发生了。计算机中通常会把这些无限数表示成一个非数值(not-a-number
values)。

softmax函数就是一个必须保持稳定避免underflow和overflow的例子。softmax通常用来预测多元分布的概率。softmax的定义是:



(4.1)

当所有的

都等于常数c时,什么会发生。通过公式分析,所有的输出都等于

。当c是一个非常大的负数时,exp(c)就会underflow。这意味着softmax的分母为0,所有最终的值是不确定的。当c是一个很大的正数时,exp(c)会overflow,结果同样会变得不确定。可以通过操作softmax(z),其中

,来解决上面两个问题。代数的知识告诉我们如果输入参数减去或加上一个标量,softmax的值是不会改变的。向量x减去它的最大值,则z中最大的数为0,避免了exp(z)overflow的可能,exp(z)的最大数是1,且必然有一个是1,则避免了分母为0。

仍然存在一个小问题。分子的exp函数的underflow仍然会导致整个评估为0。这意味着,如果一开始做了减去最大值的操作,然后实现log softmax(x),我们可能得到-

。我们可以使用稳定softmax的技巧去稳定log
softmax。

实现底层深度学习库的时候,开发人员应牢记这些数值问题。很多开发者可以依靠稳定的深度学习库去获得稳定的支持。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: