深度学习之数值计算 (一)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)。当大数值被近似成
![](http://chart.googleapis.com/chart?cht=tx&chl=%5Cinfty%20)
或-
![](http://chart.googleapis.com/chart?cht=tx&chl=%5Cinfty%20)
overflow就发生了。计算机中通常会把这些无限数表示成一个非数值(not-a-number
values)。
softmax函数就是一个必须保持稳定避免underflow和overflow的例子。softmax通常用来预测多元分布的概率。softmax的定义是:
![](http://chart.googleapis.com/chart?cht=tx&chl=softmax(x)_%7Bi%7D%3D%5Cfrac%7Bexp(x_%7Bi%7D)%7D%7B%5Csum_%7Bj%3D1%7D%5En%20exp(x_%7Bj%7D)%7D)
(4.1)
当所有的
![](http://chart.googleapis.com/chart?cht=tx&chl=x_%7Bi%7D)
都等于常数c时,什么会发生。通过公式分析,所有的输出都等于
![](http://chart.googleapis.com/chart?cht=tx&chl=%5Cfrac%7B1%7D%7Bn%7D)
。当c是一个非常大的负数时,exp(c)就会underflow。这意味着softmax的分母为0,所有最终的值是不确定的。当c是一个很大的正数时,exp(c)会overflow,结果同样会变得不确定。可以通过操作softmax(z),其中
![](http://chart.googleapis.com/chart?cht=tx&chl=z%3Dx-max_%7Bi%7Dx_%7Bi%7D)
,来解决上面两个问题。代数的知识告诉我们如果输入参数减去或加上一个标量,softmax的值是不会改变的。向量x减去它的最大值,则z中最大的数为0,避免了exp(z)overflow的可能,exp(z)的最大数是1,且必然有一个是1,则避免了分母为0。
仍然存在一个小问题。分子的exp函数的underflow仍然会导致整个评估为0。这意味着,如果一开始做了减去最大值的操作,然后实现log softmax(x),我们可能得到-
![](http://chart.googleapis.com/chart?cht=tx&chl=%5Cinfty%20)
。我们可以使用稳定softmax的技巧去稳定log
softmax。
实现底层深度学习库的时候,开发人员应牢记这些数值问题。很多开发者可以依靠稳定的深度学习库去获得稳定的支持。
在数字计算机上执行连续数学的基本困难在于,我们需要用有限的(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。
实现底层深度学习库的时候,开发人员应牢记这些数值问题。很多开发者可以依靠稳定的深度学习库去获得稳定的支持。
相关文章推荐
- 4. 深度学习的数学基础:数值计算
- 深度学习之数值计算(二)poor conditioning
- 深度学习之数学基础(数值计算)
- 深度学习第四章-数值计算笔记
- 个人喜欢的关于模式识别、机器学习、推荐系统、图像特征、深度学习、数值计算、目标跟踪等方面个人主页及博客
- 随时更新———个人喜欢的关于模式识别、机器学习、推荐系统、图像特征、深度学习、数值计算、目标跟踪等方面个人主页及博客
- 大型计算如何为深度学习火箭助力
- 深度学习计算模型中"门函数"的作用
- 『科学计算』深度学习框架_模拟数据拟合
- 神经网络与深度学习笔记——3.3计算神经网络输出
- Tensorflow 实战google深度学习框架 09 计算图保存,与模型读取
- python-框架-网页爬虫-文本处理-科学计算-可视化-机器学习-数据挖掘-深度学习
- 【深度学习-CNN】CNN中的参数与计算量
- 从深度学习计算过程来分析深度学习工作站\服务器的硬件配置
- 2018最新深度学习与神经网络的计算特点与硬件配置分析
- 深度学习文章4:计算图像数据集的均值
- 认知计算与深度学习
- MXNET:深度学习计算-模型参数
- 云计算+大数据+深度学习+人工智能+量子计算=?