乐趣区

关于算法:算法工程狮四数学基础-数值计算及其他

数值计算

1. 上溢与下溢

数值计算首先面临的一个问题就是数值的上溢和下溢。上溢指的是数值十分大溢出为 NaN 值,而下溢指的是数值十分小下溢为 0。数值溢出极有可能会导致数值计算问题,因而也产生了相应的解决办法。

下溢

下溢为 0 首先要思考得是除 0 操作。当计算波及除法时,如果分母下溢为 0,计算过程就会报错。比拟驰名的一个例子就是 softmax 和穿插熵损失函数。穿插熵损失函数在反向流传时波及 $\frac{1}{y}$ 得计算,当 softmax 的 y 下溢为 0 时,此过程就会报错,解决办法就是 将 softmax 和穿插熵损失函数合并为一个过程,防止除法操作

上溢

当数值大到超过计算机最大数值示意范畴时,就会溢出为 NaN,导致整个计算过程失败。同样是 softmax,softmax 的公式为:
$$y_i=\dfrac{e^{z_i}}{\sum\limits_{j}e^{z_j}}$$
当分子中的 $z_i$ 很大时,整个 $e^{z_i}$ 会增长的很快,极有可能溢出为非法数值。解决办法是 $z_{i,new}=z_i-\max\limits_j{z_j}$,此时,分子最大为 1,防止了分子上溢的问题。尽管这样会带来下溢问题(分子指数幂会呈现极小的负值),但当分子下溢为 0 时,输入的 $y=0$ 是一个有意义的数值(但此处的 0 也就决定了下面提到的解决下溢的合并操作的必要性)。并且上述操作也会使分母蕴含 1,防止除 0 操作。

2. 病态条件

函数绝对于输出的渺小变动而变动的快慢水平就是条件数。对于矩阵来说,条件数就是最大最小特征值绝对值之比:$\max\limits_{i,j}\dfrac{\lambda_i}{\lambda_j}$。当 矩阵的条件数很大时,矩阵求逆会对输出误差特地敏感,这是矩阵的固有个性,并不是误差问题,称之为病态条件。(小声说,PCA 不就是抛弃小 λ 嘛)

3. 二阶导数

梯度降落只用到了一阶导数,指向函数降落最快的方向。然而,这是一种过于简化的思维,咱们只对指标函数做了一阶泰勒开展,从此看的确是降落最快的方向。然而如果变成做二阶泰勒开展呢?
二阶导数就是管制一阶导如何随输出变动而变动,以及判断是否会产生预期的那样大的改善
Hessian 矩阵能够合成为 $d^THd$,d 方向的二阶导就是特征值。对函数 f(x) 做二阶泰勒开展:
$$f(x)\approx f(x_0)+\nabla f(x_0)(x-x_0)+\frac{1}{2}(x-x_0)^TH(x-x_0)$$
当咱们应用学习率 $\epsilon$ 新的点将会是 $x_0-\epsilon g$,则:
$$f(x_0-\epsilon g)\approx f(x_0)-\epsilon g^Tg+\frac{1}{2}\epsilon^2g^THg$$
从上式能够看出,当二阶项为 0 或者正数时,函数会降落,然而 $\epsilon$ 须要足够小后果才会精确(泰勒开展自身就是部分线性近似);当二阶项为正时,f(x)甚至会回升,梯度降落会生效。
另外,如果 Hessian 矩阵的条件数很差,那么梯度降落也会变得很差。因为某些方向梯度减少很快,某些方向减少很慢,使得 sgd 产生振荡。
二阶导为 0 的状况,是鞍点的可能性更大,此时特征值有正有负。牛顿法很容易被鞍点吸引。

补充

1. 径向基函数

SVM 外面会用到,当作核函数的一种
$$ K(x,x’)=e^{-\dfrac{||x-x’||_2^2}{2\sigma^2}},\sigma 为自在参数 $$
令 $\gamma=-\dfrac{1}{2\sigma^2}$,则 $K=e^{\gamma||x-x’||_2^2}$。rbf 使得样本点只被左近输入输出激活,相比多项式核参数少。另外,径向基网络应用径向基函数激活。

2.Jensen 不等式

凸函数上,若对于任意点集 $\{x_i\},\lambda_i\ge0 且 \sum_i\lambda_i=1,如果用数学归纳法,可证实凸函 f(\sum\limits_{i=1}^{M}\lambda_ix_i)\leq\sum\limits_{i=1}^{M}\lambda_if(x_i)$, 在概率论中 $f(E(x))\leq E(f(x))$
Jensen 不等式在证实 EM 算法中有用到。另外,如果判断一个函数凸或者非凸,能够通过二阶导 /Hessian 来判断,如果 $f”(x)\ge0$ 或者 hessian 半正定,则凸。还能够通过 jenson 判断,如果函数凸,则满足 $f(E(x))\leq E(f(x))$

3. 全局最优和部分最优

柏拉图有一天问老师苏格拉底什么是恋情?苏格拉底叫他到麦田走一次,摘一颗最大的麦穗回来,不许回头,只可摘一次。柏拉图空着手进去了,他的理由是,看见不错的,却不晓得是不是最好的,一次次幸运,走到止境时,才发现还不如后面的,于是放弃。苏格拉底通知他:“这就是恋情。”这故事让咱们明确了一个情理,因为生命的一些不确定性,所以全局最优解是很难寻找到的,或者说基本就不存在,咱们应该设置一些限定条件,而后在这个范畴内寻找最优解,也就是部分最优解——有所斩获总比空手而归强,哪怕这种斩获只是一次乏味的经验。
​ 柏拉图有一天又问什么是婚姻?苏格拉底叫他到树林走一次, 选一棵最好的树做圣诞树,也是不许回头,只许选一次。这次他一身疲乏地拖了一棵看起来直挺、葱绿,却有点稠密的杉树回来,他的理由是,有了上回的教训,好不容易看见一棵看似不错的,又发现工夫、膂力曾经快不够用了,也不论是不是最好的,就拿回来了。苏格拉底通知他:“这就是婚姻。”

优化问题个别分为部分最优和全局最优。其中,

  • 部分最优,就是在函数值空间的一个无限区域内寻找最小值;而全局最优,是在函数值空间整个区域寻找最小值问题。
  • 函数部分最小点是它的函数值小于或等于左近点的点,然而有可能大于较远距离的点。
  • 全局最小点是那种它的函数值小于或等于所有的可行点。

4. 应用标准差而不是方差

应用标准差而不是方差形容数据离散水平,因为标准差有三个劣势:

  • 数量级统一
  • 单位统一
  • 不便运算,在正态分布下,$\begin{cases}99\% 在 \mu 前后 3 个 \sigma 内 \\\ 95\% 在 \mu 前后 2 个 \sigma 内 \\\ 68\% 在 \mu 前后 1 个 \sigma 内 \end{cases}$

5. 二次布局

n 个变量,m 个限度的二次布局问题如下:
$$\begin{cases}\argmin\limits_Xf(X)=\frac{1}{2}X^TQX+C^TX \\\ s.t. AX\leq b \end{cases}$$
当 Q 为半正定时,为凸二次布局问题,可行域不为空,则有全局最优解;如果 Q 非正定,则 NP 难问题,有多个安稳点;Q= 0 进化为一般二次布局。
一个点 x 为全局最小值,则其满足 KKT 条件,当 f(x)为凸函数,则 kkt 变为充要条件,即满足 KKT 则 X 为全局最小值。
对于对偶问题,二次布局的对偶也是二次布局,凸二次布局的对偶也是凸二次布局。
凸二次布局的解决方案有内点法、共轭梯度法、椭球法。
python 中有 CVXOPT 解决二次布局问题。

退出移动版