導航:首頁 > 源碼編譯 > 綜述當前的最優化演算法

綜述當前的最優化演算法

發布時間:2024-10-22 17:57:00

A. 最優化演算法總結


探索最優化演算法的藝術:尋找函數極值的科學之路


機器學習的核心挑戰在於通過求解目標函數的極值來驅動模型的進步,這個過程通常轉化為尋找最小值。微積分中的導數是尋找極值的利器,但在實際問題中,我們往往面臨非光滑的函數。在多元函數的世界裡,梯度作為導數的向量擴展,起著關鍵作用,極值點要求梯度為零。然而,判斷極值類型並非易事,Hessian矩陣(二階導數矩陣)為我們揭示了答案:



數值優化演算法,如梯度下降、一階或二階優化,為我們提供了探索的工具。在遇到超越方程這類復雜問題時,它們通過迭代,利用導數信息逐步逼近極值。一階優化如梯度下降,通過一元函數的泰勒展開,調整方向,確保函數值下降。多元情況下,選擇合適的方向至關重要,比如梯度下降法,它的迭代過程如下:



變種的梯度下降方法如動量梯度下降(加入動量項),自適應演算法如AdaGrad和AdaDelta(分別根據歷史梯度調整學習率和解決學習率過快衰減問題)進一步提升性能。以下是部分方法的簡要概述:



相較於梯度下降,二階優化演算法如牛頓法雖更精確,但代價是計算Hessian矩陣的復雜度和存儲需求。在小批量處理中,二階導數的估計誤差較大,可能導致模型不穩定。


總的來說,最優化演算法是一場精密的舞蹈,每一步都需要精準計算和巧妙設計。通過理解這些核心原理和演算法,我們能在機器學習的海洋中找到最優解的航標。想了解更多,不妨深入探索這個神奇的領域,鏈接在這里就不再贅述了。


B. 現代優化演算法包括

現代優化演算法包括哪些?

1. 什麼是優化演算法?

優化演算法是一個數學方法,它使用計算機程序來尋求最優解。這些最優解是在一定的約束條件下,使目標函數取得最大或最小值的參數或變數值。優化演算法在各種領域和行業都有應用,如金融、工程、農業等。

2. 現代優化演算法包括哪些?

現代優化演算法包括遺傳演算法、蟻群演算法、粒子群演算法、模擬退火演算法等。這些演算法可以用於解決各種問題,如最優化、機器學習、人工智慧等。

3. 遺傳演算法

遺傳演算法是一種模擬自然進化過程的優化演算法。它基於遺傳學的原理,通過對個體進行遺傳操作(選擇、交叉、變異)來搜索解空間中的最優解。遺傳演算法已經被廣泛應用於多目標優化、組合優化等領域,並且在解決復雜優化問題方面具有優越性。

4. 蟻群演算法

蟻群演算法是一種模擬昆蟲群體行為的優化演算法。它利用螞蟻的覓食行為來搜索最優解,通過螞蟻在解空間中留下的信息素來引導群體的行為。蟻群演算法已經在許多領域得到應用,如旅行商問題、生產調度、網路路由等。

5. 粒子群演算法

粒子群演算法是一種模擬粒子群體行為的優化演算法。它通過模擬粒子在解空間中的運動來搜索最優解,利用粒子個體和群體的歷史最優狀態來調整搜索方向。粒子群演算法已經廣泛應用於目標跟蹤、圖像處理、機器學習等領域中。

6. 模擬退火演算法

模擬退火演算法是一種模擬物理退火過程的優化演算法。它可以跨越局部最小值,搜索全局最優解。模擬退火演算法的基本思想是在解空間中隨機產生一個初始解,利用一定條件的接受准則來判斷是否接受該解,然後進行概率性的移動。模擬退火演算法已經廣泛應用於優化調度、電路布局、統計學習等領域。

7. 演算法性能比較

以上提到的現代優化演算法各具特點並具有優越性,但用於不同問題時,其效果也會產生一定的差別。在使用優化演算法解決實際問題時,需要綜合考慮問題的特點、演算法的適用性和計算資源等因素,選擇恰當的演算法。

8. 結論

現代優化演算法包括遺傳演算法、蟻群演算法、粒子群演算法、模擬退火演算法等。這些演算法以不同的方式在解空間中搜索最優解,廣泛應用於優化調度、生產調度、目標跟蹤、機器學習、圖像處理、統計學習等領域。在選擇演算法時需要考慮不同演算法的特點和局限性,以便為實際問題提供最佳的解決方法。

C. 幾種常用最優化方法

學習和工作中遇到的大多問題都可以建模成一種最優化模型進行求解,比如我們現在學習的機器學習演算法,大部分的機器學習演算法的本質都是建立優化模型,通過最優化方法對目標函數(或損失函數)進行優化,從而訓練出最好的模型。常見的優化方法(optimization)有梯度下降法、牛頓法和擬牛頓法、共軛梯度法等等。

1. 梯度下降法(Gradient Descent)

梯度下降法是最早最簡單,也是最為常用的最優化方法。梯度下降法實現簡單,當目標函數是凸函數時,梯度下降法的解是全局解。一般情況下,其解不保證是全局最優解,梯度下降法的速度也未必是最快的。 梯度下降法的優化思想是用當前位置負梯度方向作為搜索方向,因為該方向為當前位置的最快下降方向,所以也被稱為是」最速下降法「。最速下降法越接近目標值,步長越小,前進越慢。

梯度下降 法的缺點:

(1)靠近極小值時收斂速度減慢;

(2)直線搜索時可能會產生一些問題;

(3)可能會「之字形」地下降。

在機器學習中,基於基本的梯度下降法發展了兩種梯度下降方法,分別為隨機梯度下降法和批量梯度下降法。

比如對一個線性回歸(Linear Logistics)模型,假設下面的h(x)是要擬合的函數,J( )為損失函數, 是參數,要迭代求解的值,求解出來了那最終要擬合的函數h( )就出來了。其中m是訓練集的樣本個數,n是特徵的個數。

1)批量梯度下降法(Batch Gradient Descent,BGD)

(1)將J( )對 求偏導,得到每個theta對應的的梯度:

(2)由於是要最小化風險函數,所以按每個參數 的梯度負方向,來更新每個 :

        (3)從上面公式可以注意到,它得到的是一個全局最優解,但是每迭代一步,都要用到訓練集所有的數據,如果m很大,那麼可想而知這種方法的迭代速度會相當的慢。所以,這就引入了另外一種方法——隨機梯度下降。

對於批量梯度下降法,樣本個數m,x為n維向量,一次迭代需要把m個樣本全部帶入計算,迭代一次計算量為m*n2。

2)隨機梯度下降(Stochastic Gradient Descent,SGD)

        (1)上面的風險函數可以寫成如下這種形式,損失函數對應的是訓練集中每個樣本的粒度,而上面批量梯度下降對應的是所有的訓練樣本:

(2)每個樣本的損失函數,對 求偏導得到對應梯度,來更新 :

(3)隨機梯度下降是通過每個樣本來迭代更新一次,如果樣本量很大的情況(例如幾十萬),那麼可能只用其中幾萬條或者幾千條的樣本,就已經將

迭代到最優解了,對比上面的批量梯度下降,迭代一次需要用到十幾萬訓練樣本,一次迭代不可能最優,如果迭代10次的話就需要遍歷訓練樣本10次。但是,SGD伴隨的一個問題是噪音較BGD要多,使得SGD並不是每次迭代都向著整體最優化方向。

隨機梯度下降每次迭代只使用一個樣本,迭代一次計算量為n2,當樣本個數m很大的時候,隨機梯度下降迭代一次的速度要遠高於批量梯度下降方法。 兩者的關系可以這樣理解:隨機梯度下降方法以損失很小的一部分精確度和增加一定數量的迭代次數為代價,換取了總體的優化效率的提升。增加的迭代次數遠遠小於樣本的數量。

對批量梯度下降法和隨機梯度下降法的總結:

批量梯度下降---最小化所有訓練樣本的損失函數,使得最終求解的是全局的最優解,即求解的參數是使得風險函數最小,但是對於大規模樣本問題效率低下。

隨機梯度下降---最小化每條樣本的損失函數,雖然不是每次迭代得到的損失函數都向著全局最優方向, 但是大的整體的方向是向全局最優解的,最終的結果往往是在全局最優解附近,適用於大規模訓練樣本情況。

2. 牛頓法和擬牛頓法(Newton's method & Quasi-Newton Methods)

1)牛頓法(Newton's method)

牛頓法是一種在實數域和復數域上近似求解方程的方法。方法使用函數 f  ( x )的泰勒級數的前面幾項來尋找方程 f  ( x ) = 0的根。牛頓法最大的特點就在於它的收斂速度很快。

具體步驟:

首先,選擇一個接近函數 f  ( x )零點的x0,計算相應的 f  ( x 0)和切線斜率 f  '  ( x 0)(這里 f '  表示函數 f   的導數)。然後我們計算穿過點( x 0, f   ( x 0))並且斜率為 f  '( x 0)的直線和 x  軸的交點的 x 坐標,也就是求如下方程的解:

我們將新求得的點的 x  坐標命名為 x 1,通常 x 1會比 x 0更接近方程 f   ( x ) = 0的解。因此我們現在可以利用 x 1開始下一輪迭代。迭代公式可化簡為如下所示:

已經證明,如果 f   '是連續的,並且待求的零點 x 是孤立的,那麼在零點 x 周圍存在一個區域,只要初始值 x 0位於這個鄰近區域內,那麼牛頓法必定收斂。 並且,如果 f   ' ( x )不為0, 那麼牛頓法將具有平方收斂的性能. 粗略的說,這意味著每迭代一次,牛頓法結果的有效數字將增加一倍。下圖為一個牛頓法執行過程的例子。

由於牛頓法是基於當前位置的切線來確定下一次的位置,所以牛頓法又被很形象地稱為是"切線法"。

關於牛頓法和梯度下降法的效率對比:

從本質上去看,牛頓法是二階收斂,梯度下降是一階收斂,所以牛頓法就更快。如果更通俗地說的話,比如你想找一條最短的路徑走到一個盆地的最底部,梯度下降法每次只從你當前所處位置選一個坡度最大的方向走一步,牛頓法在選擇方向時,不僅會考慮坡度是否夠大,還會考慮你走了一步之後,坡度是否會變得更大。所以,可以說牛頓法比梯度下降法看得更遠一點,能更快地走到最底部。(牛頓法目光更加長遠,所以少走彎路;相對而言,梯度下降法只考慮了局部的最優,沒有全局思想。)

根據wiki上的解釋,從幾何上說,牛頓法就是用一個二次曲面去擬合你當前所處位置的局部曲面,而梯度下降法是用一個平面去擬合當前的局部曲面,通常情況下,二次曲面的擬合會比平面更好,所以牛頓法選擇的下降路徑會更符合真實的最優下降路徑。

註:紅色的牛頓法的迭代路徑,綠色的是梯度下降法的迭代路徑。

牛頓法的優缺點總結:

優點:二階收斂,收斂速度快;

缺點:牛頓法是一種迭代演算法,每一步都需要求解目標函數的Hessian矩陣的逆矩陣,計算比較復雜。

2)擬牛頓法(Quasi-Newton Methods)

擬牛頓法是求解非線性優化問題最有效的方法之一,於20世紀50年代由美國Argonne國家實驗室的物理學家W.C.Davidon所提出來。Davidon設計的這種演算法在當時看來是非線性優化領域最具創造性的發明之一。不久R. Fletcher和M. J. D. Powell證實了這種新的演算法遠比其他方法快速和可靠,使得非線性優化這門學科在一夜之間突飛猛進。

擬牛頓法的本質思想是改善牛頓法每次需要求解復雜的Hessian矩陣的逆矩陣的缺陷,它使用正定矩陣來近似Hessian矩陣的逆,從而簡化了運算的復雜度。 擬牛頓法和最速下降法一樣只要求每一步迭代時知道目標函數的梯度。通過測量梯度的變化,構造一個目標函數的模型使之足以產生超線性收斂性。這類方法大大優於最速下降法,尤其對於困難的問題。另外,因為擬牛頓法不需要二階導數的信息,所以有時比牛頓法更為有效。如今,優化軟體中包含了大量的擬牛頓演算法用來解決無約束,約束,和大規模的優化問題。

具體步驟:

擬牛頓法的基本思想如下。首先構造目標函數在當前迭代xk的二次模型:

這里Bk是一個對稱正定矩陣,於是我們取這個二次模型的最優解作為搜索方向,並且得到新的迭代點:

其中我們要求步長ak 滿足Wolfe條件。這樣的迭代與牛頓法類似,區別就在於用近似的Hesse矩陣Bk 代替真實的Hesse矩陣。所以擬牛頓法最關鍵的地方就是每一步迭代中矩陣Bk的更新。現在假設得到一個新的迭代xk+1,並得到一個新的二次模型:

我們盡可能地利用上一步的信息來選取Bk。具體地,我們要求

從而得到

這個公式被稱為割線方程。常用的擬牛頓法有DFP演算法和BFGS演算法。

原文鏈接: [Math] 常見的幾種最優化方法 - Poll的筆記 - 博客園

閱讀全文

與綜述當前的最優化演算法相關的資料

熱點內容
大淘寶網站源碼 瀏覽:178
抖音機械兔特效什麼app有 瀏覽:584
hypixel伺服器的地址和埠是多少 瀏覽:590
照片藝術處理python 瀏覽:397
win10提示沒有插入加密狗 瀏覽:716
直播源碼怎麼弄 瀏覽:989
獵人筆記pdf 瀏覽:885
數據結構冒泡排序演算法 瀏覽:523
column命令 瀏覽:104
java運行的快捷鍵 瀏覽:246
安卓studiokey是什麼 瀏覽:286
app開發先學什麼 瀏覽:578
ox圖pdf 瀏覽:624
scratch編程選擇題如何製作 瀏覽:785
伺服器的陣列卡有什麼作用 瀏覽:888
linux登錄超時 瀏覽:481
播放音樂dll命令 瀏覽:903
javajdk和jre 瀏覽:492
程序員都是怎麼關機的 瀏覽:771
如何更換文件夾的格式 瀏覽:529