概述
在机器学习中,我们会经常通过迭代过程来更新解的估计值,最终解决问题(比如最常见的梯度优化)。而不是通过推导公式来提供正确解,因为模型很多不是线性的无法得到闭合解。
并且,对于计算机来说,实数在内存中无法精确表示,因此计算实数涉及的函数也是困难的。
我们介绍一下计算机在数值计算中产生的陷阱。
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.病态条件
当输入微小变化使输出产生很大剧烈变化,这就是一个病态的系统。
而条件数就是度量矩阵对于数值计算的稳定性和敏感性。
对于病态矩阵,也就是当矩阵最大特征值和最小特征值之比很大时,是病态的,他对矩阵求逆的输入特别敏感。
最后
以上就是机灵发带为你收集整理的机器学习中的数值计算问题的全部内容,希望文章能够帮你解决机器学习中的数值计算问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复