① 支持向量機原理詳解(六): 序列最小最優化(SMO)演算法(Part I)
序列最小最優化演算法原理詳解:
1. 演算法背景與目的: 提出者:SMO演算法由Platt於1998年提出。 目的:旨在解決訓練支持向量機時遇到的大規模二次規劃問題。
2. 演算法核心思想: 分解策略:SMO演算法將大問題分解為一系列小型的二次規劃子問題。 解析求解:通過解析求解這些子問題,而不是進行數值優化,以節省計算時間。
3. 停機條件: 優化變數條件:優化變數滿足特定條件時,演算法停機,保證最終收斂至最優解。
4. 優化變數選擇與迭代: 兩變數子問題:每次優化兩個變數,確保至少一個變數違反KKT條件,以維持演算法的收斂性。 啟發式規則:在選擇優化變數時,首先遍歷整個訓練集尋找可能違反KKT條件的變數,然後聚焦於非邊界樣本進行優化。
5. KKT條件檢查: 精度內檢查:演算法在精度范圍內進行KKT條件的比較,以加速收斂速度並處理浮點運算的舍入誤差。
6. 演算法偽代碼與實現細節: 偽代碼:SMO演算法的偽代碼在相關文獻中給出。 實現細節:具體實現細節在文獻[14]中有所描述,涉及演算法的核心高效策略,使SVM的訓練過程更加高效且可擴展。
通過上述內容,我們可以對序列最小最優化演算法的基本原理有一個初步且全面的了解。
② 史上最詳細單純形法—從理解到計算(帶約束規劃問題)
1947年,Dantzig在美國五角大樓工作時,經常被空軍要求解決實際計劃問題,如分配人力、經費、飛機等資源。他針對這些問題建立了線性規劃模型,並提出了著名的單純形法(Simplex Method)。
基本問題:[公式]
詳細來說,最優化方程可以寫成如下形式:[公式]
定理一:線性規劃的可行域是凸集。設可行域的極點為[公式],極方向為[公式],任何可行點均可以表示為[公式]。由定理一可得到的關鍵最優值是[公式]的加權組合。如果存在極方向[公式],則[公式]可以無限大,因此不存在最優值。如果存在極方向[公式],則[公式]必取0。所以最優化其實是優化到某個極點上。
下面對約束方程引入鬆弛變數化為A矩陣。假設[公式],[公式],[公式]是自由未知量,相當於自由基,取不同的值則方程會有不同的解。[公式]是基變數,[公式]為非基變數,這時的x就是一個基本可行解,所謂基本可行解就是符合約束條件的一個解,可以是很多種。
這里最關鍵的是理解[公式]。之前說過,最優解一定在某個極點上,這里[公式]其實就是一個極點,那[公式]是什麼那?是移動量。請繼續看解釋:
以一個二維的最優問題為例,[公式]。加入鬆弛變數,[公式]。畫出圖解,可以發現不停地使不同的量等於0,就是一直在換不同的極點作為可行解。如果每次只換一個變數為0,那麼就相當於每次移動都是從一個極點在沿著一條邊移動到另一個極點。所以線性規劃最優化的過程就是在不停的換極點作為可行解試,試出來一個最優的解就達到目的了。
每次試都是沿著一條邊,對於三維優化問題,就是沿著空間中的一條棱。如下圖所示。
而這就是單純形法。現在我們已經有了一個基本可行解[公式],我們的目的是沿著某個棱,換到不同的極點上,但是換這個操作不便於用數學方法表示,換的過程就是[公式]中的不同元素為0的過程,例如上述二維優化的例子,[公式]其實就是[公式],讓[公式]中某兩個為0其實完全可以只通過改變[公式]做到,即在基本可行解的基礎上,每次減去不同的[公式]。
當然我們不能隨便移動,我們應該保證每次都向著最佳的方向移動,這樣才能最快地到達最優極點。由我們要最小化的代價函數入手:[公式]。
註:[公式]是N矩陣的第j列,N是鬆弛變數對應的系數矩陣,所以在上述二維例子中,j從3開始取。[公式]是行向量。顯而易見,如果想使[公式]最快的減小,直接減去最大的[公式],([公式]),其他[公式]就好了(因為我們想要的是每次只沿著一個棱移動,所以只能改變一個平移量的值,其他都還是保持0不變)。
現在我們想找到最大的[公式],但是[公式]的取值不確定,無法確定最大的?只能分兩步進行:1.按[公式]算就成了。2.怎麼辦?[公式]不取0的目的是換到另一個極點,或者說一個[公式]不為0,另一個[公式]就要為0,回顧[公式],寫成如下形式[公式]。注意[公式]對應為0的那個[公式]可以是任意一個,即可以使[公式]為0,也可以使[公式]或其他為0。所以,[公式]的最大取值即為[公式]。但是:我們應該取最小的才行,因為要滿足所有[公式],如果[公式]取值過大,可能[公式]為0了,但是[公式]卻變為負數了。即取[公式]。
收斂定理:單純形表。上面說了單純形法的理論,但是單純形最偉大的地方不在於理論上,而是實踐上,單純形表可以使我們方便求解,也方便我們寫程序。單純表形如:來一個例子。
例:用單純形方法解下列問題[公式],[公式]。引入鬆弛變數[公式],把上述問題化為標准形式[公式]。①化為標准形式,我們可以得到第一張表:基變數為[公式],對應[公式]。根據公式補全[公式],[公式],最大,所以選[公式]入基,接下來算[公式],得到完整的單純形表如下,選最小的[公式]對應的基變數做出基變數。[公式]對應的[公式]最小,故[公式]出基。②[公式]入基,[公式]出基,得到第二張表。[公式],[公式],[公式],[公式]。補全[公式]。③得到第三張表:[公式]均為負,得到最優值,利用[公式]計算最優值,此時[公式],[公式]。
③ 什麼是最優化
最優化是應用數學的一個分支,主要指在一定條件限制下,選取某種研究方案使目標達到最優的一種方法。最優化問題在當今的軍事、工程、管理等領域有著極其廣泛的應用。
梯度下降法是最早最簡單,也是最為常用的最優化方法。
梯度下降法實現簡單,當目標函數是凸函數時,梯度下降法的解是全局解。一般情況下,其解不保證是全局最優解,梯度下降法的速度也未必是最快的。
梯度下降法的優化思想是用當前位置負梯度方向作為搜索方向,因為該方向為當前位置的最快下降方向,所以也被稱為是」最速下降法「。最速下降法越接近目標值,步長越小,前進越慢。
牛頓法是一種在實數域和復數域上近似求解方程的方法。方法使用函數f(x)的泰勒級數的前面幾項來尋找方程f(x) = 0的根。牛頓法最大的特點就在於它的收斂速度很快。
擬牛頓法是求解非線性優化問題最有效的方法之一,其本質思想是改善牛頓法每次需要求解復雜的Hessian矩陣的逆矩陣的缺陷,它使用正定矩陣來近似Hessian矩陣的逆,從而簡化了運算的復雜度。擬牛頓法和最速下降法一樣只要求每一步迭代時知道目標函數的梯度。
通過測量梯度的變化,構造一個目標函數的模型使之足以產生超線性收斂性。這類方法大大優於最速下降法,尤其對於困難的問題。另外,因為擬牛頓法不需要二階導數的信息,所以有時比牛頓法更為有效。如今,優化軟體中包含了大量的擬牛頓演算法用來解決無約束,約束,和大規模的優化問題。
共軛梯度法是介於最速下降法與牛頓法之間的一個方法,它僅需利用一階導數信息,但克服了最速下降法收斂慢的缺點,又避免了牛頓法需要存儲和計算Hesse矩陣並求逆的缺點,共軛梯度法不僅是解決大型線性方程組最有用的方法之一,也是解大型非線性最優化最有效的演算法之一。
在各種優化演算法中,共軛梯度法是非常重要的一種。其優點是所需存儲量小,具有步收斂性,穩定性高,而且不需要任何外來參數。
啟發式方法指人在解決問題時所採取的一種根據經驗規則進行發現的方法。其特點是在解決問題時,利用過去的經驗,選擇已經行之有效的方法,而不是系統地、以確定的步驟去尋求答案。
啟發式優化方法種類繁多,包括經典的模擬退火方法、遺傳演算法、蟻群演算法以及粒子群演算法等等。
作為一種優化演算法,拉格朗日乘子法主要用於解決約束優化問題,它的基本思想就是通過引入拉格朗日乘子來將含有n個變數和k個約束條件的約束優化問題轉化為含有(n+k)個變數的無約束優化問題。拉格朗日乘子背後的數學意義是其為約束方程梯度線性組合中每個向量的系數。
將一個含有n個變數和k個約束條件的約束優化問題轉化為含有(n+k)個變數的無約束優化問題,拉格朗日乘數法從數學意義入手,通過引入拉格朗日乘子建立極值條件,對n個變數分別求偏導對應了n個方程,然後加上k個約束條件(對應k個拉格朗日乘子)一起構成包含了(n+k)變數的(n+k)個方程的方程組問題,這樣就能根據求方程組的方法對其進行求解。