算法工程獅4、數學基礎 數值計算及其餘

數值計算

1.上溢與下溢

數值計算首先面臨的一個問題就是數值的上溢和下溢。上溢指的是數值很是大溢出爲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操做。網絡

2.病態條件

函數相對於輸入的微小變化而變化的快慢程度就是條件數。對於矩陣來講,條件數就是最大最小特徵值絕對值之比:$\max\limits_{i,j}\dfrac{\lambda_i}{\lambda_j}$。當矩陣的條件數很大時,矩陣求逆會對輸入偏差特別敏感,這是矩陣的固有特性,並非偏差問題,稱之爲病態條件。(小聲說,PCA不就是丟棄小λ嘛)app

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.使用標準差而不是方差

使用標準差而不是方差描述數據離散程度,由於標準差有三個優點:it

  • 數量級一致
  • 單位一致
  • 方便運算,在正態分佈下,$\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解決二次規劃問題。變量

相關文章
相關標籤/搜索