数值计算
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解决二次布局问题。
发表回复