overflow and underflow

Q: 什么叫underflow, 什么叫overflow? 对于很多的AI问题,如果出现很多概率的相乘,我们通常都在最前面加log, 为什么? ⽐如 argmax p(x), 通常求解 argmax log p(x)。 对于softmax 函数,我们去实现的时候怎么避免underflow 或者 overflow?

首先,实数在计算机内用二进制表示,所以不是一个精确值,当数值过小的时候,被四舍五入为0,这就是下溢(undeflow)。此时如果对这个数再做某些运算(例如除以它)就会出问题。 反之,另一个高危的数值误差是上溢(overflow),计算机中通常会把无限数表示成一个非数值(not-a-number values)。

softmax函数就是一个必须保持稳定避免underflow和overflow的例子。softmax通常用来预测多元分布的概率。softmax的定义是:在这里插入图片描述
通常情况下,计算softmax函数值不会出现什么问题,例如,当softmax函数表达式里的所有 xi 都是一个“一般大小”的数值 c ,x1=x2=x3=c时,那么,计算出来的函数值 softmax(x)1=softmax(x)2=softmax(x)3=1/3

但是,在某些情况发生时,计算函数值就出问题了:

-c 极其大,导致分子计算 exp( c )时上溢出。
-c 为负数,且 |c|很大,此时分母是一个极小的正数,有可能四舍五入为0,导致下溢出。

所以怎样所以怎样规避这些问题呢?
代数的知识告诉我们如果输入参数减去或加上一个标量,softmax的值是不会改变的。令 M = max(xi), i =1,2,3,….,n,即M为所有xi
中最大的值,那么我们只需要计算softmax(xi- M)的值,就可以解决上溢出、下溢出的问题了,并且,计算结果理论上仍然和f(xi)
保持一致。通过这样的变换,对任何一个 xi,减去M之后,e 的指数的最大值为0,所以不会发生上溢出;同时,分母中也至少会包含一个值为1的项,所以分母也不会下溢出(四舍五入为0)。

为了使理解更简单,举个具体的例子:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值