KKT条件初步理解
?
? ? ? ?最近學習的時候用到了最優化理論,但是我沒有多少這方面的理論基礎。于是翻了很多大神的博客把容易理解的內容記載到這篇博客中。因此這是篇匯總博客,不算是全部原創,但是基礎理論,應該也都差不多吧。因才疏學淺,有紕漏的地方懇請指出。
? ? ? KKT條件是解決最優化問題的時用到的一種方法。我們這里提到的最優化問題通常是指對于給定的某一函數,求其在指定作用域上的全局最小值。提到KKT條件一般會附帶的提一下拉格朗日乘子。對學過高等數學的人來說比較拉格朗日乘子應該會有些印象。二者均是求解最優化問題的方法,不同之處在于應用的情形不同。
? ? ? 一般情況下,最優化問題會碰到一下三種情況:
(1)無約束條件
? ? 這是最簡單的情況,解決方法通常是函數對變量求導,令求導函數等于0的點可能是極值點。將結果帶回原函數進行驗證即可。
(2)等式約束條件
? ? ?設目標函數為f(x),約束條件為hk(x),形如
? ? ?s.t. 表示subject to ,“受限于”的意思,l表示有l個約束條件。
? ? ?則解決方法是消元法或者拉格朗日法。消元法比較簡單不在贅述,拉格朗日法這里在提一下,因為后面提到的KKT條件是對拉格朗日乘子法的一種泛化。
? ? ?定義拉格朗日函數F(x),
? ? ?其中λk是各個約束條件的待定系數。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
?
? ? ?然后解變量的偏導方程:
? ? ??......,
? ? ?如果有l個約束條件,就應該有l+1個方程。求出的方程組的解就可能是最優化值(高等數學中提到的極值),將結果帶回原方程驗證就可得到解。
? ? ?至于為什么這么做可以求解最優化?維基百科上給出了一個比較好的直觀解釋。
? ? ?舉個二維最優化的例子:
? ? ?min f(x,y)?
? ? ?s.t. g(x,y) = c
? ? ?這里畫出z=f(x,y)的等高線(函數的等高線定義:二元函數z = f(x,y)在空間表示的是一張曲面,這個曲面與平面z = c的交線在xoy面上的投影曲線f(x,y)=c稱為函數z=f(x,y)的一條登高線。):
? ? ? ?綠線標出的是約束的點的軌跡。藍線是的等高線。箭頭表示斜率,和等高線的法線平行。從梯度的方向上來看,顯然有。綠色的線是約束,也就是說,只要正好落在這條綠線上的點才可能是滿足要求的點。如果沒有這條約束,的最小值應該會落在最小那圈等高線內部的某一點上。而現在加上了約束,最小值點應該在哪里呢?顯然應該是在的等高線正好和約束線相切的位置,因為如果只是相交意味著肯定還存在其它的等高線在該條等高線的內部或者外部,使得新的等高線與目標函數的交點的值更大或者更小,只有到等高線與目標函數的曲線相切的時候,可能取得最優值。
如果我們對約束也求梯度,則其梯度如圖中綠色箭頭所示。很容易看出來,要想讓目標函數的等高線和約束相切,則他們切點的梯度一定在一條直線上。
即:?f(x,y)=λ(?g(x,y)-C)?
其中λ可以是任何非0實數。
? ? ? ?一旦求出λ的值,將其套入下式,易求在無約束極值和極值所對應的點。
? ? ? ?這就是拉格朗日函數的由來。
?
(3)不等式約束條件
? ? ? ?設目標函數f(x),不等式約束為g(x),有的教程還會添加上等式約束條件h(x)。此時的約束優化問題描述如下:
? ? ? 則我們定義不等式約束下的拉格朗日函數L,則L表達式為:
? ? ? 其中f(x)是原目標函數,hj(x)是第j個等式約束條件,λj是對應的約束系數,gk是不等式約束,uk是對應的約束系數。0
? ? ? 此時若要求解上述優化問題,必須滿足下述條件(也是我們的求解條件):
? ? ? 這些求解條件就是KKT條件。(1)是對拉格朗日函數取極值時候帶來的一個必要條件,(2)是拉格朗日系數約束(同等式情況),(3)是不等式約束情況,(4)是互補松弛條件,(5)、(6)是原約束條件。
? ? ? 對于一般的任意問題而言,KKT條件是使一組解成為最優解的必要條件,當原問題是凸問題的時候,KKT條件也是充分條件。
? ? ? ?關于條件(3),后面一篇博客中給出的解釋是:我們構造L(x,λ,u)函數,是希望L(x,λ,u)<=f(x)的(min表示求最小值)。在L(x,λ,u)表達式中第二項為0,若使得第三項小于等于0就必須使得系數u>=0,這也就是條件(3)。
? ? ? ?關于條件(4),直觀的解釋可以這么看:要求得L(x,λ,u)的最小值一定是三個公式項中取得最小值,此時第三項最小就是等于0值的時候。稍微正式一點的解釋,是由松弛變量推導而來。
為方便表示,舉個簡單的例子:
現有如下不等式約束優化問題:
此時引入松弛變量可以將不等式約束變成等式約束。設a1和b1為兩個松弛變量,則上述的不等式約束可寫為:
則該問題的拉格朗日函數為:
根據拉格朗日乘子法,求解方程組:
則
同樣 u2b1=0,來分析g2(x)起作用和不起作用約束。
于是推出條件:
原文地址:https://blog.csdn.net/taotaofu/article/details/56843224?
總結
- 上一篇: 剑指offer(刷题61-65)--c+
- 下一篇: 单元测试中使用Mockito模拟对象