数值计算首先面临的一个问题就是数值的上溢和下溢。上溢指的是数值很是大溢出为NaN值,而下溢指的是数值很是小下溢为0。数值溢出极有可能会致使数值计算问题,所以也产生了相应的解决办法。python
下溢为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操做。网络
函数相对于输入的微小变化而变化的快慢程度就是条件数。对于矩阵来讲,条件数就是最大最小特征值绝对值之比:$\max\limits_{i,j}\dfrac{\lambda_i}{\lambda_j}$。当矩阵的条件数很大时,矩阵求逆会对输入偏差特别敏感,这是矩阵的固有特性,并非偏差问题,称之为病态条件。(小声说,PCA不就是丢弃小λ嘛)app
梯度降低只用到了一阶导数,指向函数降低最快的方向。可是,这是一种过于简化的思想,咱们只对目标函数作了一阶泰勒展开,今后看确实是降低最快的方向。可是若是变成作二阶泰勒展开呢?
二阶导数就是控制一阶导如何随输入变化而变化,以及判断是否会产生预期的那样大的改善。
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的状况,是鞍点的可能性更大,此时特征值有正有负。牛顿法很容易被鞍点吸引。函数
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使得样本点只被附近输入输出激活,相比多项式核参数少。另外,径向基网络使用径向基函数激活。学习
凸函数上,若对于任意点集$\{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))$优化
柏拉图有一天问老师苏格拉底什么是爱情?苏格拉底叫他到麦田走一次,摘一颗最大的麦穗回来,不准回头,只可摘一次。柏拉图空着手出来了,他的理由是,看见不错的,殊不知道是否是最好的,一次次侥幸,走到尽头时,才发现还不如前面的,因而放弃。苏格拉底告诉他:“这就是爱情。”这故事让咱们明白了一个道理,由于生命的一些不肯定性,因此全局最优解是很难寻找到的,或者说根本就不存在,咱们应该设置一些限定条件,而后在这个范围内寻找最优解,也就是局部最优解——有所斩获总比空手而归强,哪怕这种斩获只是一次有趣的经历。
柏拉图有一天又问什么是婚姻?苏格拉底叫他到树林走一次,选一棵最好的树作圣诞树,也是不准回头,只许选一次。此次他一身疲惫地拖了一棵看起来直挺、翠绿,却有点稀疏的杉树回来,他的理由是,有了上回的教训,好不容易看见一棵看似不错的,又发现时间、体力已经快不够用了,也不论是不是最好的,就拿回来了。苏格拉底告诉他:“这就是婚姻。”
优化问题通常分为局部最优和全局最优。其中,数学
使用标准差而不是方差描述数据离散程度,由于标准差有三个优点:it
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解决二次规划问题。变量