机器学习中的数值计算问题

在机器学习中,我们会经常通过迭代过程来更新解的估计值,最终解决问题(比如最常见的梯度优化)。而不是通过推导公式来提供正确解,因为模型很多不是线性的无法得到闭合解。
并且,对于计算机来说,实数在内存中无法精确表示,因此计算实数涉及的函数也是困难的。
我们介绍一下计算机在数值计算中产生的陷阱。

1、上溢和下溢
当一个接近于0的数值被四舍五入为0时,会产生很大的不同,我们必须保证避免被零除。比如拉普拉斯平滑处理等。
当一个很大量级的数表示成无穷时,会导致无限值变成非数字。
必须对上溢和下溢进行稳定的一个例子就是softmax函数。
函数形式为:exp(xi)/(exp(x1)+exp(x2)…可能选项累加)
指数形式保证了概率的非负性,整体保证了概率和为1。用于多分类。

如果我们让所有xi等于常数c,那么理论上所有输出都是1/n,但是,如果,c是一个很小的负数,那么分母就会下溢成为0,如果c是个很大的数,上溢就会产生。
那么解决办法是什么呢?就是计算softmax(z),z=x-maxxi,我们知道,输入向量同时加上或者减去一个标量,最后的输出结果是不变的。这样的话,exp最大参数为0,就排除了上溢的可能性。同样,分母中至少有一个值为1的项(e的0次方等于1),排除了分母下溢为0的可能性。
对于分子下溢,无可厚非,非常接近于0和0没什么区别,不过计算log softmax时会产生问题,我们可以用类似的方法构造一个数值稳定的log softmax函数。

2.病态条件
当输入微小变化使输出产生很大剧烈变化,这就是一个病态的系统。
而条件数就是度量矩阵对于数值计算的稳定性和敏感性。
对于病态矩阵,也就是当矩阵最大特征值和最小特征值之比很大时,是病态的,他对矩阵求逆的输入特别敏感。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值