一、数值稳定性
1、计算机使用有限位比特存储数据,在执行数学运算时就会引入近似误差。近似误差在多步数值运算传递积累,从而导致算法失败。因此数值算法设计时要考虑累计误差最小化。
2、从头开始实现数值算法时,需要考虑数值稳定性,而当使用现有的数值计算库时,则不许考虑。(如tensorflow)
1.1 上溢出、下溢出
1、下溢出(underflow):当接近零的数字四舍五入为零时,发生下溢出。
2、上溢出(overflow):数值非常大,超过计算机表示范围时,发生上溢出。
3、一个数值为稳定性的例子是 softmax 函数。
设,则softmax函数定义为:
当所有的 都等于常数
时,
softmax
函数的每个分量的理论值都为 。
1.2 Conditioning
1、Conditioning 刻画了一个函数的如下性质:当函数输入发生了微小的变化时,函数的输出变化有多大。对于 Conditioning 较大的函数,在数值计算中可能有问题。因为函数输入的舍入误差可能导致函数输出的较大变化。
2、对于方阵 ,其条件数 condition number 为:
- 方阵的条件数就是最大的特征值除以最小的特征值。
- 当方阵的条件数很大时,矩阵的求逆将对误差特别敏感(即:
的一个很小的扰动,将导致其逆矩阵一个非常明显的变化)。
- 条件数是矩阵本身的特性,它会放大那些包含矩阵求逆运算过程中的误差。