1. 程式人生 > >數學基礎-求解優化問題的演算法比較

數學基礎-求解優化問題的演算法比較

問題型別

在對比演算法之前,我們先給出不同型別問題的定義

P問題:可以在多項式時間內求解的問題

NP問題:可以在多項式時間內驗證解是否為問題的解,猜解和驗證解的過程,NP問題存在多項式級的演算法,所有的P類問題都是NP問題,P≠NP

NPC問題:不存在多項式求解演算法的問題
NPC問題是一個NP問題,所有的NP問題都可以約化到NPC問題。所有的NP問題都能約化成NPC問題,只要任意一個NPC問題找到了一個多項式的演算法,那麼所有的NP問題都能用這個演算法解決了,NP也就等於P 了。NPC問題目前沒有多項式演算法,只能用指數級甚至階乘級複雜度的搜尋。

NP-Hard問題:

所有的NP問題都可以約化到NP-Hard問題,但NP-Hard問題不一定是一個NP問題,NP-Hard問題同樣難以找到多項式的演算法。

演算法型別

確定演算法和啟發式演算法的區別

確定演算法:

系統地、以確定的步驟去尋求答案,各種可能性都一一進行嘗試,最終能找到問題的答案,但它是在很大的問題空間內,花費大量的時間和精力才能求得答案。

梯度下降法、牛頓法、擬牛頓法、Normal Equation的對比

這些方法都是是求解無約束最優化問題的演算法

梯度下降法,是用來求函式值最小處的引數值,需要預先選定學習速率,需要多次迭代,需要對特徵進行歸一化(feature scaling),但是每次迭代的代駕較小

牛頓法,是用來求一階導數函式值為0處的引數值,不需要選擇任何引數,不需要對特徵進行歸一化,但是要求函式二階可微,收斂性與初始點的選擇依賴較大,牛頓法每一次迭代需要計算Hesse矩陣的逆,計算量大,奇異矩陣導致無法求解。

擬牛頓法,為了避免計算矩陣的逆,擬牛頓法的思路是用一個n階矩陣來代替hesse矩陣的逆,擬牛頓法包括DFP、BFGS、Broyden。
牛頓法和擬牛頓法在李航的《統計學習方法》第219-224頁有詳細的介紹。

Normal Equation,是線性迴歸引數求解方法,Normal Equation需要大量的矩陣運算,特別是求矩陣的逆。在矩陣很大的情況下,會大大增加計算複雜性以及對計算機記憶體容量的要求。當特徵向量的維度過多,或者存在相關特徵,導致矩陣不可逆,需要對特徵進行處理,例如刪除冗餘的維度。

啟發式演算法
利用過去的經驗,選擇已經行之有效的方法,在有限的搜尋空間內,大大減少嘗試的數量,能迅速地達到問題的解決。但由於這種方法具有嘗試錯誤的特點,所以也有失敗的可能性。科學家的許多重大發現,常常是利用極為簡單的啟發式規則,啟發式演算法是一種技術,這種技術使得在可接受的計算成本內去搜尋最好的解,但不一定能保證所得的可行解和最優解,甚至在多數情況下,無法闡述所得解同最優解的近似程度。啟發式搜尋會造成這樣的結果:找到的解雖然是令人滿意的,卻不是最優的。

啟發式演算法包括,仿動物類的演算法:粒子群優化,螞蟻優化,魚群演算法,蜂群演算法等;仿植物類的演算法:向光性演算法,雜草優化演算法等;仿人類的演算法有:和聲搜尋演算法是較好的演算法;

啟發式演算法的要素:
(1)隨機初始可行解;
(2)給定一個評價函式(常常與目標函式值有關);
(3)鄰域,產生新的可行解;
(4)選擇和接受解得準則;
(5)終止準則。
引數設定、迭代停止條件、收斂速度是啟發式演算法的關鍵因素。