《用Python學習數值分析 最優化》

2021-08-09 19:46:54 字數 2202 閱讀 2476

2017-09-13

最優化對應的術語是」optimization「。是工科的基礎課程。數值分析與最優化是高度相關的,都大概在四年級或者研一時教授。最優化課程更加基礎一些,覆蓋了理論基礎,想要把課程裡的演算法實現出來,需要深入的線性代數、矩陣計算、數值計算的知識。最優化就是機器學習的核心,在圖形學方向也是基礎的課程。這也是我這兩三年來用固定的業餘時間來補充數學課程的原因。na 和 optimization本就是一體的,相當於實踐與理論的關係,有一本教材甚至就叫numercial optimization[1],太厚。在這裡稍微提一下optimization,就相當於提綱挈領的做一下總結吧。 

optimization指尋找現實世界實值函式(objective function f (x))的最大值或者最小值。把函式翻轉,最大值就變成了最小值,所以,只有乙個問題。優化問題一般分為「無約束」與「約束」兩類。與直覺相反,有約束條件的問題,反而更難以求解一些。所以,我們可以把注意力集中在無約束優化上,這是基礎。timothy的書中也只提到了這一部分。無約束優化也分為兩種:是否依賴於f的導數。我們應該盡量的使用導數,na問題中都是如此。人腦對乙個函式降維較為容易,第三四代程式語言寫的程式對函式降維可沒那麼簡單,對於高維複雜函式,我們人腦也無能為力。維度,是困難的始祖,是深淵。即使高維中的線性規劃問題,都需要海量的計算。單純形法複雜度為o(2n

)。高維非線性問題,更是困難。

optimization問題比解方程困難。解方程組,我們只是求解乙個乙個或者幾個確定解。而求解optimization問題,我們求解的結果是乙個集合。用數值計算的方法解optimization問題,一般按照是否有導數來分為兩類。 

一,沒有導數

**分割搜尋

successive parabolic interpolation(spi) 

nelder-mead search

我們很少見到這類方法,是因為我們很少用。這裡只需要簡單了解一下即可。解方程的方法中也有不依賴於的導數的方法:割線法、brent's method。

**分割搜尋類似於解方程用的「包圍法」,如熟知的解單變數方程的二分法。前者尋找函式曲線的最低點,後者尋找曲線與y軸的交點,為什麼分割比例不一樣呢?因為二分法在最糟糕的情況下表現的比其他比例要好。

nelder-mead 方法是更常用的方法,2023年提出。這個方法使用了單純形的概念,是n維空間n+1個頂點的多邊形。導數是帶有解析資訊的,不用導數必然會有代價。這裡的代價就是這個方法可能收斂到乙個非駐點(非駐點對於我們來說是沒有意義的),除非求解的問題滿足很強烈的要求。常見的改良演算法是再利用梯度下降的資訊。這種改良依然會遇到其他問題。

二,有導數

newton's method

steepest method

conjugate gradient search(cg)

這三個方法就更常見了,在解方程(組)中就開始使用。newton–raphson method,需要我們提供求解的區間。類似於解方程時需要提供距離根足夠近的初始點,這裡提供的求解區間也需要足夠的小。

最速下降法,並不是指從山峰下降到谷底的速度最快,而是指每一步邁出,都是朝著坡度最大的方向下去,但是,沒有長遠的目光。牛頓法,每邁一部前,向後多看幾步。所以,目光長遠的,反而能以最短的路徑下到谷底。wiki的圖很形象。

共軛梯度法通常和前面的梯度下降法比較,兩個演算法都針對對稱正定矩陣。本方法一般用來解決無約束凸二次規劃問題。這個問題稍微複雜一些。以後單獨總結一下吧。

scipy提供的演算法以nelder-mead,newton, cg,trust region方法為主。衍生方法可能是結合了其他的方法。單變數函式使用minimize_scalar(),多變數使用minimize()。使用方式參看鏈結[4],基本上就能夠明白如何使用了。在這裡,我覺得,如果不做演算法研究,前期只需要了解這些數學概念的基礎,在了解一下lib的使用方法與限制。等用到工作中後,如果發現有問題,再來深入。

numercial optimization, 2nd edition,jorge nocedal

numerical analysis,  timothy sauer

2017-09-13  後記

這段時間,把我學習數值分析時做的雜亂的筆記、練習整理了一下,貼了出來,再不整理就怕丟了。算是乙個階段性的總結了。完成了乙個里程碑,還有下乙個。我在大學期間沒有好好學習這些東西,需要花費時間補回來--實在令人悲傷。轉眼已畢業四年,我也能對自己問心無愧的說,這時間,沒有白過。在未來還有很多困難,慢慢解決吧。

[主頁 ]

機器學習筆記 數值最優化 1 最優化條件

方向導數 設x k是經k 步迭代後 得到的迭 代點,d k是xk 在xk使 f x 下降的方 向,k 0是 沿k的步 長,則第 k 1個 迭代待是 xk 1 x k k dk滿足 f xk 1 f xk 終止準則 f xk 1 f x k 足夠小 設 當前點為xk 搜尋方向是dk 視為 的 函式 h...

數值分析 深度學習中的數值計算技巧

overflow 浮點數上溢,數值逼近無窮大時出現 浮點數溢位,不論是上溢還是下溢,會使得最終的結果 undefined 比如為 nan 或者跟真實的結果相差很大的量級 softmax 函式用於 多分類問題,各個類別的概率輸出。softmax x i exp x i n j 1exp x j sof...

python學習筆記 數值

獲取圓周率不同的精度 import math for precision in range 10 print round math.pi,precision int,round,math.floor的不同之處 import math for n in 2,7,1.2,1.7,2,7,1.2 1.7 ...