【學界】非凸轉成凸、約束轉無約-運籌學和支持向量機中的拉格朗日鬆弛法

前言:本人本科是自動化專業,然後直接攻博讀的是系統工程專業。目前在東北大學系統工程專業讀博士,在流程工業綜合自動化國家重點實驗室做流程工業裡邊調度問題和運行優化問題。博士剛開始主要接觸了很多Numerical optimization, convex optimization,Nonlinear programming的知識,用來解決實際工業過程中的優化問題。隨著近幾年來,人工智慧機器學習火了起來,逐漸研究的重心也從數學優化轉到機器學習相關領域了,但是我一直還是認為優化是自己的老本行,也一直從優化的角度去看待機器學習的問題去嘗試做一些新的思考。這裡要提一下這個專欄[運籌帷幄]大數據和人工智慧時代下的運籌學是非常好的,裡邊的文章多數都是從運籌優化的角度去看待人工智慧裡邊的問題,這個角度和本人的想法是完全一致的。

這個是本人第一篇文章,我搜了一下目前網路上很少有關於拉格朗日鬆弛方法(LR)的系統性的介紹,同時拉格朗日鬆弛方法非常的有意思在於它是運籌優化領域解決混合整數的一種主要方法,同時也是機器學習裡邊SVM(支持向量機)的理論基礎。我發現很多同學無法完全領會支持向量機的精髓,恰恰是因為對拉格朗日鬆弛不了解。廢話到此,那麼直接上乾的。

1拉格朗日鬆弛方法(LR)的簡介

在運籌,數學優化領域,LR常用來求解混合整數規劃問題,是數學方法裡邊求解混合整數規劃問題比較有效的方法。一般同學對混合整數規劃問題接觸最多的是進化計算方法(例如:GA, PSO等),還有啟發式方法,割平面法。關於本文要用到的一些名詞可以參考 離散/整數/組合/非凸優化概述及其在AI的應用。

我們先拋開這些背景。考慮如下標準形式的優化問題(如果有等式約束的話可以轉化成兩個不等式的約束):

[begin{array}{l} mathop {min }limits_x {f_0}left( x right) s.t.;;{f_i}left( x right) le 0,;;;i = 1,...,m end{array}] (A1)

LR的基本思想很簡單,就是將約束放到目標函數上去考慮。如果把所有的約束都放到目標函數上去話,約束優化問題就轉化成無約束優化問題了,這樣的話問題就簡單多了。那麼LR是怎麼轉化的呢,如下所示:

[Lleft( {x,lambda } right) = {f_0}left( x right) + sumlimits_{i = 1}^m {{lambda _i}{f_i}left( x right)} ]

我們把 [Lleft( {x,lambda } right)] 稱為拉格朗日函數,即在原來的目標函數上增加了約束的加權求和,得到一個增廣的目標函數。通過這樣一個轉化將約束放到了目標函數上,求解A1這個優化問題就轉化成了求解如下優化問題

[gleft( lambda right) = mathop {min }limits_x Lleft( {x,lambda } right)] (A2)

[gleft( lambda right)] 是一個函數,我們稱為對偶函數,每取一個 [lambda ] 都有一個 [gleft( lambda right)] 與之對應。由此我們可知對偶函數 [gleft( lambda right)] 是原優化問題A1最優值 [{p^*}] 的下界,即對任意 [lambda ge 0] 有如下式成立

[gleft( lambda right) le {p^*}]

很容易證明這一點,設 [mathord{buildrel{lower3pthbox{$scriptscriptstylefrown$}} over x} ] 為原優化問題A1任意的一個可行解,那麼有

[gleft( lambda right) = Lleft( {mathord{buildrel{lower3pthbox{$scriptscriptstylefrown$}} over x} ,lambda } right) = {f_0}left( {mathord{buildrel{lower3pthbox{$scriptscriptstylefrown$}} over x} } right) + sumlimits_{i = 1}^m {{lambda _i}{f_i}left( {mathord{buildrel{lower3pthbox{$scriptscriptstylefrown$}} over x} } right)} le {f_0}left( {mathord{buildrel{lower3pthbox{$scriptscriptstylefrown$}} over x} } right)]

因為 [lambda ge 0] ,且 [mathord{buildrel{lower3pthbox{$scriptscriptstylefrown$}} over x} ] 還是可行解,所以 [Lleft( {mathord{buildrel{lower3pthbox{$scriptscriptstylefrown$}} over x} ,lambda } right)] 的第二項總是小於等於0的,因此可以證明上面的結論。

同時 [gleft( lambda right)] 是一個凸函數,這一點在這裡就不給出說明了,因為要用到一些關於下確界的性質。

我們知道 [gleft( lambda right) le {p^*}] 是對任意的 [lambda ge 0] 都滿足的,那我們想用 [gleft( lambda right)] 來近似原優化問題的話,我們自然希望 [gleft( lambda right)] 和原優化問題最優解是越接近越好了,那我們需要找一個最好的下界,可以將問題表述為如下優化問題

[begin{array}{l} mathop {max }limits_lambda gleft( lambda right) s.t.;;;lambda ge 0 end{array}] (B1)

這個優化問題被稱為對偶問題,前面已經說了 [gleft( lambda right)] 是凸函數,那麼該對偶問題是一個凸優化問題,而且不論原問題凸不凸,其對偶問題肯定是凸的。對偶問題的出發點就是在下界裡邊找到一個最好的最解決原問題最優解的 [{lambda ^*}][gleft( {{lambda ^*}} right)] 依然小於 [{p^*}] ,只不過相對於其它任選的 [gleft( lambda right)] ,它更接近 [{p^*}]

可以看到LR方法是在用凸優化來逼近原優化問題A1(一般的優化問題),因為凸優化很好求到全局最優,同時我們一般也比較容易能找到一個可行解做為 [{p^*}] 的上界,這樣從上下兩個方向上夾逼最優解就達到了我們的目的。

2拉格朗日鬆弛方法的進一步理解----與懲罰函數法有什麼不同

我們可以將原優化問題A1重新等價的表示為如下無約束優化問題 [mathop {min }limits_x {f_0}left( x right) + sumlimits_{i = 1}^m {{I_ - }left( {{f_i}left( x right)} right)} ] (A3)

其中

[{I_ - }left( u right) = left{ begin{array}{l} 0,;;u le 0 infty ,;;u > 0 end{array} right.]

約束的意思就是絕對不能違反,通過 [{I_ - }left( u right)] 函數可以反映這樣的一個意思,即違反約束的話就施加無窮大的懲罰,讓優化問題A3絕對不可能違反約束。而對比優化問題A2,相當於用線性函數去替代 [{I_ - }left( u right)] 函數。我們用一個軟的約束去替代了一個硬約束,可以看做用線性函數做 [{I_ - }left( u right)] 的一個下估計([lambda u le {I_ - }left( u right)] )。也就是說此時優化問題A2有可能會接受 [{f_i}left( x right) > 0] 的點,那麼相對優化問題A3來說無形中擴大了可行域,一個更大的可行域上的最小值肯定是比在一個小的可行域上的最小值要小。這也解釋了為什麼優化問題A2是原問題A1的一個下界了。

到這裡如果是以前多少接觸過優化的同學都會想到一個概念就是懲罰函數法。懲罰函數的基本思想也是約束比較複雜難以處理,那麼我就把約束乘以一個懲罰因子放到目標函數上去,若採用L2懲罰函數的話,優化問題A1可以轉化為如下形式

[mathop {min }limits_x {f_0}left( x right) + mu sumlimits_{i = 1}^m {{{left( {max left[ {0,{f_i}left( x right)} right]} right)}^2}} ] (A4)

其中 [mu > 0] ,簡單來說就是違反約束的話施加一個懲罰到目標函數上去,沒有違反的話就不加懲罰,這麼一個非常簡單的思想。同理可以證明該優化A4也是優化問題A1的最優解的一個下界,和之前證明A2的情況完全是一個道理。當然懲罰函數的形式不一定非要取成L2範數的形式也就是平方的形式。我們可以把拉格朗日鬆弛看做是一種特殊的罰函數也不是不可以。那麼懲罰函數法和LR方法有什麼不同呢,主要是LR中我們是通過求解一個對偶問題 [begin{array}{l} mathop {max }limits_lambda gleft( lambda right) end{array}] 來找到一個最優的 [{lambda ^*}] ,而懲罰函數法則沒有這一個過程,一般都是人為的設定一個係數 mu ,這是兩者思想差別最大的地方。懲罰函數法細分的話有精確罰函數,非精確罰函數等等這裡也就不在這裡一一討論了,有興趣的文後會列出參考文獻方便查閱。

3拉格朗日鬆弛的理論分析----如何保證其最優性(強對偶性與弱對偶性)

通過上面的分析我們得到了一個重要的結論就是優化問題B1的最優解是優化問題A1的下界,即 [gleft( {{lambda ^*}} right) le {p^*}] ,那我們自然會問既然是小於等於,那等號什麼時候成立呢。如果等號成立的話那這個世界真的就是非常和諧了,因為對於這樣的優化問題,藉助LR方法我們可以轉化成凸優化,而凸優化可以求到全局最優解,一切的一切就非常完美了。我們一般把等號成立的情況稱為強對偶性,如果等號不成立稱為弱對偶性。 有很多的研究都給出了強對偶性成立的條件,首先要求原優化問題A1是一個凸優化問題,同時要滿足一個Slater條件(一個讓人很費解的條件,所以這裡也不給出了,有興趣可以參考參考文獻[1]中第5章關於強弱對偶性的論述)。總體來說強對偶性要成立,最起碼原問題得是一個凸優化問題才行。

看到這個結論可能會讓你失望了,LR無法保證對非凸優化問題滿足強對偶性(哈哈,如果滿足了非凸優化也變得很簡單了),也就是說LR只能說能盡量去逼近原問題最優解,確沒法證明一定能達到。

[gleft( {{lambda ^*}} right) le {p^*} le fleft( {mathord{buildrel{lower3pthbox{$scriptscriptstylefrown$}} over x} } right)]

4拉格朗日鬆弛演算法的具體求解過程(次梯度法)

我們把前面講的內容整理一下發現LR方法的可以表述為如下形式

[mathop {max }limits_lambda mathop {min }limits_x Lleft( {x,lambda } right)]

先對x求極小,然後x就沒有了也就是變成了僅僅關於 [lambda ] 的函數 [gleft( lambda right)] ,然後再對 [gleft( lambda right)] 求極大值。也就是我們在一些書上可能會看到了極小極大化問題,根本的來源是LR方法。

那麼如何求解這個問題呢,我們這裡簡要介紹一下LR的求解框架,

1 一般先隨機給一個初始的 [{{lambda ^{left( k right)}}}]

2 把 [{{lambda ^{left( k right)}}}] 代入到 [Lleft( {x,lambda } right)] 中,然後求解鬆弛問題也就是 [mathop {min }limits_x Lleft( {x,{lambda ^{left( k right)}}} right)] ,解完得到一個當前步的最優的 [{x^{left( k right)}}]

3 然後將這個 [{x^{left( k right)}}] 代入到 [Lleft( {x,lambda } right)] ,然後求解對偶問題 [mathop {max }limits_lambda Lleft( {{x^{left( k right)}},lambda } right)] ,得到 [{lambda ^{left( k+1 right)}}]

4令 [{lambda _k} = {lambda _{k + 1}}] ,判斷是否停止,若沒停止跳到第2步繼續執行。

由於要先極大再極小,我們只能先固定住一個變數,在求解另一個變數,然後反覆的迭代。整個演算法流程就是先固定 lambda ,對 x 求極小,然後固定住 x ,對 lambda 求極大,然後反覆進行。LR相關的論文可以證明該演算法的收斂性。

至於鬆弛問題和對偶問題如何求解這裡只是簡單提一句,鬆弛問題的形式一般來講是不確定的,但是若要讓LR方法效果比較好鬆弛問題不宜過於複雜,因為在實際問題的求解中一般我們不會把所有的約束都放到目標函數上去,我們只是把複雜的難以處理的約束放到目標函數上去,選擇那些約束放到目標函數上去這個要結合具體問題,甚至要結合具體的應用場景去設計。如果鬆弛之後得到的鬆弛問題是線性規劃(LP),二次規劃(QP)那就是最好不過的了。對偶問題的求解相對固定一些,因為前面說了無論原問題怎麼樣,對偶問題是一個凸優化,嚴格來講是一個不可微的凸優化問題,針對不可微的凸優化問題一般採用次梯度方法來求解,可以理解為是把梯度的概念進行了推廣,次梯度往往不唯一,這一點和梯度不同。研究如何選取次梯度也是LR中一個重要的方面,相關研究也有很多論文。

4SVM中的拉格朗日鬆弛方法

前面基本上把LR的基本過程介紹了一遍,雖然跳過了幾個重要點,但是大致交待清楚了整個原理。然後我們進入SVM的介紹。

我們先以經典的線性可分的二分類問題為例子,從這個非常直觀的例子切入SVM的核心思想,對比SVM和神經網路的不同。

我要找一條線把兩類點分開,如上圖所示。對於上圖的情況,可以找到無數條線能把這兩類完全分開的(處於兩條虛線之間的線都是可行解)。如果用傳統的神經網路來做這個分類問題的話,最終得到的是這無數條線當中的一條而已,而且如果是採用BP的話由於每次初始點選擇不一樣的話每次得到的結果不一定會一樣。如果用SVM同樣來做這個分類問題的話,那麼得到的就是最中間那條線。SVM這樣一個機制實際上是要求不僅僅把兩類分開,而且要儘可能的離兩邊都遠一些。如果把僅僅分開這兩類的解稱為可行解,那麼SVM就是在可行解裡邊找一個最好的,採用優化的思想來這樣理解SVM顯得更加有趣一些。也就是神經網路僅僅是找了一個可行解,SVM不滿足現狀從這些可行解裡邊找了一個最優解。既然是最優解那麼如何用數學表達出來呢? 很多的SVM書都有如下的一個優化問題形式: [begin{array}{l} mathop {min }limits_{w,b} frac{1}{2}{left| w right|^2} s.t.;;;{y^{left( i right)}}left( {{w^T}{x^{left( i right)}} + b} right) ge 1,;;;i = 1, cdots ,m end{array}] (S1)

其中 [left( {w,b} right)] 就是我們要找的直線的斜率和截距, [left( {{x^{left( i right)}},{y^{left( i right)}}} right)] 是圖中第i個點的坐標值(是已知的),一共有m個點。

至於這個優化問題的形式是怎麼來的這裡不進行展開了,具體可以參考SVM相關書籍。我們可以看到這是一個QP問題,約束線性,目標函數二次,自然也是一個凸優化問題了。到這裡我們實際上可以直接求解這個QP問題也是可以的。而採用LR轉化成對偶問題之後,我們就可以得到後邊,關於支持向量還有kernal這些概念了,同時和直接求解QP比較來看,轉出對偶問題的求解更加效率一些。那麼我們就套用LR方法把約束放上去,得到如下形式:

[Lleft( {w,b,lambda } right) = frac{1}{2}{left| w right|^2} - sumlimits_{i = 1}^m {{lambda _i}left[ {{y^{left( i right)}}left( {{w^T}{x^{left( i right)}} + b} right) - 1} right]} ] (S2)

由於之前說了,如果S1是凸優化問題,且滿足Slater條件的話,那麼就滿足強對偶性,也就是求解對偶問題和求解原問題是等價的。在這裡我們知道S1是凸優化問題,Slater條件也容易驗證滿足。這就是SVM的一個數學基礎,沒有這個強對偶性SVM就沒有那麼漂亮。

得到 [Lleft( {w,b,lambda } right)] ,實際上我們藉助KKT條件就能導出一個關於SVM的類似解析解的形式,這樣一個形式比直接求解原問題S1要快的多。具體過程可以參考 零基礎學Support Vector Machine(SVM),這裡就不贅述了。

6總結

題目是運籌學中的拉格朗日鬆弛方法與支持向量機中的拉格朗日鬆弛方法,其實這兩種LR方法本質上沒有區別。我們可以看到LR方法集中要處理的是約束,化繁為簡,以凸逼近非凸的思想。在運籌,數學優化領域,LR常用來求解混合整數規劃問題,是數學方法裡邊求解混合整數規劃問題比較有效的方法。一般同學對混合整數規劃問題接觸最多的是進化計算方法(例如 GA, PSO),還有分支定界,割平面法,對LR理解的比較少,可能因為其數學味道比較濃。SVM本質是一個優化問題,這個優化問題從建模到求解經歷了多次的優化問題等價轉化的過程,本文無法一一詮釋,只是摘出採用LR轉化為對偶問題這一個關鍵步驟來說明。

可見優化問題的建模和轉化無論在運籌學領域還是機器學習領域都有這十分重要的地位,數學優化的核心思想並非一個簡單梯度下降,一個BP演算法那麼簡單。

(先寫這麼多,參考文獻和文字錯誤後面再補充)

參考文獻

[1]Boyd S, Vandenberghe L. Convex optimization[M]. Cambridge university press, 2004

[2]Bertsekas D P. Nonlinear programming[M]. Belmont: Athena scientific, 1999.

[3]台大 林軒田 機器學習技法

歡迎大家更多的關注運籌優化和人工智慧這兩個領域之間的聯繫,也歡迎大家多讀該專欄的文章[運籌帷幄]大數據和人工智慧時代下的運籌學

敬請關注和擴散本專欄及同名公眾號,會邀請全球知名學者陸續發布運籌學、人工智慧中優化理論等相關乾貨、知乎Live及行業動態:

『運籌OR帷幄』大數據人工智慧時代的運籌學--知乎專欄

專欄文章匯總和有獎投稿須知:

『運籌OR帷幄』專欄文章分類匯總+面向學術界/工業界徵稿(含招聘廣告)+專欄編輯/審稿招募

推薦閱讀:

【Matlab】安裝libsvm的問題與解決辦法
淺談最優化問題的KKT條件
SVM(支持向量機)屬於神經網路範疇嗎?
第七周筆記:支持向量機SVM
為什麼svm不會過擬合?

TAG:运筹学 | SVM | 拉格朗日JLLagrange |