數值最佳化

KKT 條件(KKT conditions)

/ K-K-T, spelled out; Karush-Kuhn-Tucker /

拉格朗日乘子處理必須恰好成立的約束(等式,「留在圍籬上」)。但許多真實約束是單邊的:不可「超出」的預算、不可過高的應力、不能為負的機率。KKT 條件把乘子思想擴展到這些不等式約束——它們是一般受約束最佳化問題的解所必須滿足的核心一階檢驗。

對於在等式 h_j(x) = 0 與不等式 g_i(x) <= 0 下最小化 f(x),KKT 條件在最佳點 x* 打包了四項要求。(1)駐點性:拉格朗日函數的梯度為零,grad f + sum lambda_j grad h_j + sum mu_i grad g_i = 0——一種力的平衡。(2)原始可行性:x* 確實滿足所有約束。(3)對偶可行性:不等式乘子非負,mu_i >= 0(一個約束只能把解往一邊推)。(4)互補鬆弛(complementary slackness):對每個不等式,mu_i * g_i(x*) = 0——意即約束要嘛是作用中(緊的,g_i = 0,圍籬被觸碰、其乘子可為正),要嘛是不作用(鬆的,g_i < 0,圍籬無關緊要、其乘子為零)。最後這個條件是問題的核心:它自動判定最佳點上「哪些」約束在起作用。

KKT 條件是幾乎所有受約束最佳化的理論基礎——內點法、作用集法、SVM 訓練與經濟均衡,骨子裡都是求解 KKT 系統的方法。對於滿足約束品性條件的凸問題,KKT 條件既必要又充分:任何 KKT 點都是全域最佳。誠實的提醒:對非凸問題它們只是必要(KKT 點未必是極小),而且需要一個約束品性條件(例如作用約束梯度線性獨立)才能保證在最佳點成立——病態的約束幾何可能讓它們失效。把正負號約定與不等式方向弄對,是出了名的臭蟲來源。

在 x >= 1(即 g(x) = 1 - x <= 0)下最小化 f(x) = x^2。最佳點是 x = 1,約束作用中(g = 0),其乘子 mu = 2 > 0 滿足互補鬆弛 mu * g = 0。若約束改為 x >= -1,無約束極小 x = 0 可行,約束不作用,故 mu = 0——圍籬從未起過作用。

互補鬆弛:約束要嘛緊(mu>0)、要嘛無關(mu=0)。

KKT 點只有在問題為凸(且約束品性條件成立)時才是全域最佳;對非凸問題 KKT 僅屬必要,所以 KKT 點可能是鞍點甚至極大。正負號約定很重要:不等式乘子必須非負,而把 g_i <= 0 與 >= 0 搞反是經典的錯誤。

又称
Karush-Kuhn-Tucker conditionsfirst-order conditions for constrained optimization卡羅需-庫恩-塔克條件受約束最佳性條件