1. 程式人生 > >機器學習數學原理(5)——廣泛拉格朗日乘子法

機器學習數學原理(5)——廣泛拉格朗日乘子法

機器學習數學原理(5)——廣泛拉格朗日乘子法

這一篇部落格針對的是有約束的凸優化問題,主要是為後面的最優間隔分類器以及其演化的SVM(支援向量機,Support Vector Machine)演算法作鋪墊。Andrew Ng在講解最優間隔分類器時運用了廣泛拉格朗日乘子法但並沒有講的十分的明細,而是直接使用了結論,故筆者專門複習了拉格朗日乘子法並且學習了其在不等式約束情況下的優化(即廣泛拉格朗日乘子法)。

這裡要感謝博主Poll的博文:http://www.cnblogs.com/maybe2030/p/4946256.html。筆者寫的是以博主Poll的博文為骨架,同時加上了自己對其的補充,並且解釋了原文中很容易引起誤解的或者難理解的公式。當然這裡也要感謝MIT的線上數學課程

,博主Poll的博文正是課程上該內容的筆記。

另外老規矩,由於筆者水平有限,若出現不妥或者錯誤的地方,歡迎批評指出。

1 拉格朗日乘子法的基本思想

1.1 思想概括

首先我們先要明確這個演算法的目的優化,對於一個連續的函式來說其實就是求全域性極值

現在我們來考慮一下沒有約束條件的凸優化問題。對高等數學略有了解的人應該都知道對於一個連續的函式求極值點,其實就應該將函式求導,然後取導數向量為零向量即可。

例如一個n元函式f(x1,x2,…,xn),記作f(X),當我們需要求其極值時,便分別求f(X)對於xi的偏導(i=1~n),然後令這n個偏導為零,便將求極值點的問題轉化為n個n元方程構成的方程組求解。

然而往往事情並沒有這麼簡單,上述問題的前提往往在規劃問題中過於純粹。在實際問題中這n個自變數往往不是獨立的,即滿足一些約束條件。這樣一來上述求導的方法便不再使用,因為其求導計算出的極值點X往往並不能滿足約束條件。

現在我們細細分析一下導致這種差別的原因。不難發現,出現這個問題的本質便是自變數的相互獨立性被約束條件破壞掉,導致我們並不能任意使用求導後的結果。若想解決這個問題,接下來就需要我們的拉格朗日乘子法。

在上述分析中我們已經知道,如果我們能夠還原變數的獨立性,換句話說,如果我們能夠將約束優化問題轉化為非約束問題,那麼我們便可以繼續使用求偏導這樣簡潔明瞭的方法來處理問題了。拉格朗日乘子法的思想便基於此。

作為一種優化演算法,拉格朗日乘子法的基本思想就是通過引入拉格朗日乘子來將含有n個變數和k個約束條件的約束優化問題轉化為含有(n+k)個變數的無約束優化問題,或者我們可以這麼看,拉格朗日乘子法通過將k個約束條件轉化進偏導方程組中的k個等式從而使得原問題不再出現約束。拉格朗日乘子背後的數學意義是其為約束方程梯度線性組合中每個向量的係數。

解決的問題模型為約束優化問題:

基本形式

1.2 體現思想的數學例項

首先,我們先以麻省理工學院數學課程的一個例項來作為介紹拉格朗日乘數法的引子。

【麻省理工學院數學課程例項】求雙曲線xy=3上離遠點最近的點。

解:

首先,我們根據問題的描述來提煉出問題對應的數學模型,即:

曲線組

(兩點之間的歐氏距離應該還要進行開方,但是這並不影響最終的結果,所以進行了簡化,去掉了平方)

根據上式我們可以知道這是一個典型的約束優化問題,其實我們在解這個問題時最簡單的解法就是通過約束條件將其中的一個變數用另外一個變數進行替換,然後代入優化的函式就可以求出極值。我們在這裡為了引出拉格朗日乘數法,所以我們採用拉格朗日乘數法的思想進行求解。

我們將曲線族x²+y²=c畫出來,如下圖所示,

圖片

當曲線族中的圓與xy=3曲線進行相切時,切點到原點的距離最短。也就是說,當f(x,y)=c的等高線和雙曲線g(x,y)相切時,我們可以得到上述優化問題的一個極值(注意:如果不進一步計算,在這裡我們並不知道是極大值還是極小值)。

現在原問題可以轉化為求當f(x,y)和g(x,y)相切時,x,y的值是多少?

如果兩個曲線相切,那麼它們的切線相同,即法向量是相互平行的,▽f//▽g.

由▽f//▽g可以得到,▽f=λ*▽g。

這時,我們將原有的約束優化問題轉化為了一種對偶的無約束的優化問題,如下所示:

原問題 轉化後問題
min f(x,y)=x²+y²(s.t. xy=3) ▽f=λ*▽g
min f(x,y)=x²+y²(s.t. xy=3) fx=λ*gx,fy=λ*gy,xy=3
約束優化問題 無約束方程組問題

通過求解右邊的方程組我們可以獲取原問題的解,

通過求解上式可得,λ=2或者是-2;當λ=2時,(x,y)=(sqrt(3), sqrt(3))或者(-sqrt(3), -sqrt(3)),而當λ=-2時,無解。所以原問題的解為(x,y)=(sqrt(3), sqrt(3))或者(-sqrt(3), -sqrt(3))。

通過舉上述這個簡單的例子就是為了體會拉格朗日乘數法的思想,即通過引入拉格朗日乘子(λ)將原來的約束優化問題轉化為無約束的方程組問題

2 等式約束下的優化問題

2.1 數學模型

首先明確一下數學問題,等式約束下的優化問題其實就是前面提到的模型:

基本形式

2.2 拉格朗日乘子法

現在有k個約束條件,現在定義:

對X與α求偏導後有:

共(n+k)個方程。

當L取滿足上述條件然後取得極值後,我們可以發現有

min(L) = min(f)

也就是說我們只要求出上述方程組,其解便是f的極值點。

則我們便將對於f的約束優化問題轉化成了對於L的非約束優化問題。

3 不等式約束下的優化問題

前面的是對等式約束下的優化問題進行的求解,由於是等式約束,其實可以看做是在一個超曲面約束的空間面上移動點,找到使得目標函式最小的點。

但是在規劃問題中,我們常常遇到的條件是不超過什麼什麼不低於什麼什麼,這樣一來,我們不得不面對不等式約束下的優化問題。如果說等式約束是在一個超曲面約束的空間面上移動點,那麼不等式約束的優化問題便是在幾個超曲面分割後的一個區域內移動點,故問題的複雜度大大增加。

3.1 數學模型

這裡我們直接來看數學模型吧!

由於後面等式約束問題我們可以直接轉化成無約束問題,所以不再設定等式約束項。

3.2 KKT條件

KKT條件是指在滿足一些有規則的條件下, 一個非線性規劃(Nonlinear Programming)問題能有最優化解法的一個必要和充分條件. 這是一個廣義化拉格朗日乘子法的成果. 一般地, 一個最優化數學模型的列標準形式參考開頭的式子, 所謂 Karush-Kuhn-Tucker 最優化條件,就是指上式的最優點X*必須滿足下面三個條件:

KKT條件第一項是說最優點X*必須滿足所有等式及不等式限制條件, 也就是說最優點必須是一個可行解, 這一點自然是毋庸置疑的。第二項表明在最優點X*, ∇f必須是∇gi和∇hj的線性組合, μi和αj都叫作拉格朗日乘子。 所不同的是不等式限制條件有方向性, 所以每一個μi都必須大於或等於零, 而等式限制條件沒有方向性,所以αj沒有符號的限制, 其符號要視等式限制條件的寫法而定。

我們來看一下KKT條件的由來:

令拉格朗日運算元為

其中ui>=0。

那麼有

這裡的“當”並不是一個假設,而是max達成需要滿足的條件。

由上述推導不難發現:

接下來我們來看一下其對偶問題(注意min與max運算子的順序!)

這裡我們知道當我們求了min過後,無論x取什麼值,後面的部分都是小於等於0的,所以max的時候一定是將後面一項變為0,所以有:

將上面結論整理一下我們便有了(下圖來源於Poll博文)

即通過f(x)偏導為0獲得了n個方程(n為x維數),然後又通過ug(x)=0獲得了q個方程,即通過增加q個ui來將不等式約束問題轉化為(n+q)個方程式。