簡易解說拉格朗日對偶(Lagrange duality)
引言:嘗試用最簡單易懂的描述解釋清楚機器學習中會用到的拉格朗日對偶性知識,非科班出身,如有數學專業博友,望多提意見!
1.原始問題
假設是定義在上的連續可微函式(為什麼要求連續可微呢,後面再說,這裡不用多想),考慮約束最優化問題:
稱為約束最優化問題的原始問題。
現在如果不考慮約束條件,原始問題就是:
因為假設其連續可微,利用高中的知識,對求導數,然後令導數為0,就可解出最優解,很easy. 那麼,問題來了(呵呵。。。),偏偏有約束條件,好煩啊,要是能想辦法把約束條件去掉就好了,bingo! 拉格朗日函式就是幹這個的。
引進廣義拉格朗日函式(generalized Lagrange function):
不要怕這個式子,也不要被拉格朗日這個高大上的名字給唬住了,讓我們慢慢剖析!這裡,是拉格朗日乘子(名字高大上,其實就是上面函式中的引數而已),特別要求.
現在,如果把看作是關於的函式,要求其最大值,即
再次注意是一個關於的函式,經過我們優化(不要管什麼方法),就是確定的值使得取得最大值(此過程中把看做常量),確定了的值,就可以得到的最大值,因為已經確定,顯然最大值就是隻和有關的函式,定義這個函式為:
其中
下面通過是否滿足約束條件兩方面來分析這個函式:
- 考慮某個違反了原始的約束,即或者,那麼:
注意中間的最大化式子就是確定的之後的結果,若,則令,如果,很容易取值使得
- 考慮滿足原始的約束,則:,注意中間的最大化是確定的過程,就是個常量,常量的最大值顯然是本身.
通過上面兩條分析可以得出:
那麼在滿足約束條件下:
即與原始優化問題等價,所以常用代表原始問題,下標 P 表示原始問題,定義原始問題的最優值:
原始問題討論就到這裡,做一個總結:通過拉格朗日這位大神的辦法重新定義一個無約束問題(大家都喜歡無拘無束),這個無約束問題等價於原來的約束優化問題,從而將約束問題無約束化!
2.對偶問題
定義關於的函式:
注意等式右邊是關於的函式的最小化,確定以後,最小值就只與有關,所以是一個關於的函式.
考慮極大化,即
這就是原始問題的對偶問題,再把原始問題寫出來:
形式上可以看出很對稱,只不過原始問題是先固定中的,優化出引數,再優化最優,而對偶問題是先固定,優化出最優,然後再確定引數.
定義對偶問題的最優值:
3. 原始問題與對偶問題的關係
定理:若原始問題與對偶問題都有最優值,則
證明:對任意的和,有
即
由於原始問題與對偶問題都有最優值,所以
即
也就是說原始問題的最優值不小於對偶問題的最優值,但是我們要通過對偶問題來求解原始問題,就必須使得原始問題的最優值與對偶問題的最優值相等,於是可以得出下面的推論:
推論:設分別是原始問題和對偶問題的可行解,如果,那麼分別是原始問題和對偶問題的最優解。
所以,當原始問題和對偶問題的最優值相等:時,可以用求解對偶問題來求解原始問題(當然是對偶問題求解比直接求解原始問題簡單的情況下),但是到底滿足什麼樣的條件才能使的呢,這就是下面要闡述的 KKT 條件
4. KKT 條件
定理:對於原始問題和對偶問題,假設函式和是凸函式,是仿射函式(即由一階多項式構成的函式,f(x)=Ax + b, A是矩陣,x,b是向量);並且假設不等式約束是嚴格可行的,即存在,對所有有,則存在,使得是原始問題的最優解,是對偶問題的最優解,並且
定理:對於原始問題和對偶問題,假設函式和是凸函式,是仿射函式(即由一階多項式構成的函式,f(x)=Ax + b, A是矩陣,x,b是向量);並且假設不等式約束是嚴格可行的,即存在,對所有有,則分別是原始問題和對偶問題的最優解的充分必要條件是滿足下面的Karush-Kuhn-Tucker(KKT)條件:
關於KKT 條件的理解:前面三個條件是由解析函式的知識,對於各個變數的偏導數為0(這就解釋了一開始為什麼假設三個函式連續可微,如果不連續可微的話,這裡的偏導數存不存在就不能保證),後面四個條件就是原始問題的約束條件以及拉格朗日乘子需要滿足的約束。
特別注意當時,由KKT對偶互補條件可知:,這個知識點會在 SVM 的推導中用到.
5. 總結
一句話,某些條件下,把原始的約束問題通過拉格朗日函式轉化為無約束問題,如果原始問題求解棘手,在滿足KKT的條件下用求解對偶問題來代替求解原始問題,使得問題求解更加容易。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26400547/viewspace-1589930/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 拉格朗日對偶性(Lagrange duality)
- 拉格朗日(Lagrange)中值定理
- 關於原始對偶演算法(拉格朗日對偶)演算法
- 線性規劃的對偶問題——由拉格朗日對偶問題匯出
- 一文理解拉格朗日對偶和KKT條件
- 拉格朗日插
- 拉格朗日插值
- 拉格朗日插值學習筆記筆記
- 學習筆記:FFT與拉格朗日插值筆記FFT
- 數值分析Python實現系列—— 一、拉格朗日插值法Python
- 一分鐘衝刺完拉格朗日差值
- Duality
- 分享一個簡易部落格
- Emacs簡易操作說明(轉)Mac
- Google日曆簡易版Go
- Google日曆簡易版 2.0Go
- 解析對偶理論與對偶單純性法
- 簡易版的Spring框架之AOP簡單實現(對我來說不簡單啊)Spring框架
- C++ 練習 簡易日曆C++
- 用Flask搭建一個簡易的部落格Flask
- 對偶理論和對偶單純形法——Python實現Python
- 機器學習,詳解SVM軟間隔與對偶問題機器學習
- 使用go搭建一個簡易的部落格系統Go
- UA SIE545 優化理論基礎4 對偶理論簡介4 求解對偶問題的割平面演算法優化演算法
- 線性規劃對偶原理
- oracle9i簡易客戶端製作說明Oracle客戶端
- 用一個簡易的 web chat 說說 Python、Golang、Nodejs 的非同步WebPythonGolangNodeJS非同步
- 用React實現一個簡易的markdown部落格應用React
- 基於React跑一個簡易版九宮格抽獎React
- WebView 詳解(簡易瀏覽器Demo)WebView瀏覽器
- 對亂糟糟的日誌說再見
- Wasserstein GAN and the Kantorovich-Rubinstein Duality
- GIT Bash 簡單講解-git如何推/拉程式碼Git
- 日誌收集工具簡單對比
- 面試官:說說你對ThreadLocal的瞭解面試thread
- 說說你對影子(Shadow)DOM的瞭解
- 簡易ApiAPI
- 簡易方程