对拉格朗日乘子法与KKT的理解
在求解最優(yōu)化問題中,拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush Kuhn Tucker)條件是兩種最常用的方法。在有等式約束時使用拉格朗日乘子法,在有不等約束時使用KKT條件。
我們這里提到的最優(yōu)化問題通常是指對于給定的某一函數(shù),求其在指定作用域上的全局最小值(因為最小值與最大值可以很容易轉(zhuǎn)化,即最大值問題可以轉(zhuǎn)化成最小值問題)。提到KKT條件一般會附帶的提一下拉格朗日乘子。對學(xué)過高等數(shù)學(xué)的人來說比較拉格朗日乘子應(yīng)該會有些印象。二者均是求解最優(yōu)化問題的方法,不同之處在于應(yīng)用的情形不同。
? ? ? 一般情況下,最優(yōu)化問題會碰到一下三種情況:
(1)無約束條件
這是最簡單的情況,解決方法通常是函數(shù)對變量求導(dǎo),令求導(dǎo)函數(shù)等于0的點可能是極值點。將結(jié)果帶回原函數(shù)進行驗證即可。
(2)等式約束條件
? ? ? 設(shè)目標(biāo)函數(shù)為f(x),約束條件為h_k(x),形如:
? ? ? s.t. 表示subject to ,“受限于”的意思,l表示有l(wèi)個約束條件。
則解決方法是消元法或者拉格朗日法。消元法比較簡單不在贅述,這里主要講拉格朗日法,因為后面提到的KKT條件是對拉格朗日乘子法的一種泛化。
例如給定橢球:
?????
? 求這個橢球的內(nèi)接長方體的最大體積。這個問題實際上就是條件極值問題,即在條件? ????下,求的最大值。
?當(dāng)然這個問題實際可以先根據(jù)條件消去 z?(消元法),然后帶入轉(zhuǎn)化為無條件極值問題來處理。但是有時候這樣做很困難,甚至是做不到的,這時候就需要用拉格朗日乘數(shù)法了。??
?首先定義拉格朗日函數(shù)F(x):
? (?其中λk是各個約束條件的待定系數(shù)。) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? 然后解變量的偏導(dǎo)方程:
? ? ?? ......,
如果有l(wèi)個約束條件,就應(yīng)該有l(wèi)+1個方程。求出的方程組的解就可能是最優(yōu)化值(高等數(shù)學(xué)中提到的極值),將結(jié)果帶回原方程驗證就可得到解。
回到上面的題目,通過拉格朗日乘數(shù)法將問題轉(zhuǎn)化為
?????
對求偏導(dǎo)得到
? ? ? ?
聯(lián)立前面三個方程得到和,帶入第四個方程解之
? ? ??
帶入解得最大體積為:
??????
?
(3)不等式約束條件
? ? ? ?設(shè)目標(biāo)函數(shù)f(x),不等式約束為g(x),有的教程還會添加上等式約束條件h(x)。此時的約束優(yōu)化問題描述如下:
? ? ? ? 則我們定義不等式約束下的拉格朗日函數(shù)L,則L表達式為:
? ? ? 其中f(x)是原目標(biāo)函數(shù),hj(x)是第j個等式約束條件,λj是對應(yīng)的約束系數(shù),gk是不等式約束,uk是對應(yīng)的約束系數(shù)。
常用的方法是KKT條件,同樣地,把所有的不等式約束、等式約束和目標(biāo)函數(shù)全部寫為一個式子L(a, b, x)= f(x) + a*g(x)+b*h(x),
KKT條件是說最優(yōu)值必須滿足以下條件:
1)L(a, b, x)對x求導(dǎo)為零;
2)h(x) =0;
3)a*g(x) = 0;
?
求取這些等式之后就能得到候選最優(yōu)值。其中第三個式子非常有趣,因為g(x)<=0,如果要滿足這個等式,必須a=0或者g(x)=0. 這是SVM的很多重要性質(zhì)的來源,如支持向量的概念。
總結(jié)
以上是生活随笔為你收集整理的对拉格朗日乘子法与KKT的理解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何将浮点型准确地转换成字符串
- 下一篇: 凸优化的理解