机器学习算法通常需要大量的数值计算。这通常是指通过迭代过程更新解的估计值来解决数学问题的算法,
而不是通过解析过程推导出公式来提供正确解的方法。
常见的操作包括优化(找到最小化或最大化函数值的参数)和线性方程组的求解。
对数字计算机来说实数无法在有限内存下精确表示,因此仅仅是计算涉及实数的函数也是困难的。
舍入误差会导致一些问题,特别是当许多操作复合时,即使是理论上可行的算法,如果在设计时没有考虑最小化舍入误差的
累积,在实践时也可能会导致算法失效。
下溢(underflow):
当接近零的数被四舍五入为零时发生下溢。许多函数在其参数为零而不是一个很小的正数时才会表现出质的不同。
例如,我们通常要避免被零除(一些软件环境将在这种情况下抛出异常,有些会返回一个非数字 (not-a-number, NaN) 的占位符)或避免取零的对数(这通常被视为 −∞,进一步的算术运算会使其变成非数字)。
上溢(overflow):
当大量级的数被近似为∞ 或 −∞ 时发生上溢。进一步的运算通常会导致这些无限值变为非数字。
数值稳定:
必须对上溢和下溢进行数值稳定的一个例子是 softmax 函数。
softmax 函数经常用于预测与 Multinoulli 分布相关联的概率,定义为
(exp = e为底的指数函数)
病态条件:
基于梯度的优化方法:
sign函数(符号函数),sign(x)取x的符号值。
x>0 sign(x)=1,x<0 sign(x)= -1, x=0 sign(x)=0
梯度之上:Jacobian 和 Hessian 矩阵
约束优化:
拉格朗日乘子法和KKT条件:
实例:线性最小二乘