KKT(Karush-Kuhn-Tucker)條件有時也稱KT條件,最初發現此定理的是Kuhn,Tucker兩人,后來發現Karush在1939年的一篇文章中已經有過這個定理表述,所以常以取三人名字命名為KKT條件。不帶約束的非線性規划問題可以用梯度法、模式搜索法獲得最優解,帶約束的線性規划可以通過單純形法解決,KKT條件解決的是帶有約束、非線性規划最優解問題,根據約束形式可分為等式和不等式或兩種情況混合的情形,針對這三種情形,KKT條件給出了通用的公式化解決方案,滿足KKT條件的點稱為K-T點,K-T點同時也是非線性規划的最優解。KKT在非線性規划、神經網絡、對偶定理中都有重要的應用,KKT是機器學習中必須掌握的知識點。
一、約束條件為等式
約束條件是等式情形在介紹函數梯度與隱函數說明過,利用拉格朗日乘法可獲得此時的最值,具體推導過程可看本站歷史文章。簡單回顧一下,滿足多個等式的圖像是空間的一條'曲線',或者說滿足所有等式約束條件的可行區是空間的一條'曲線'。'曲線'上任意一點的切線正交於所有約束函數在該點的梯度,當目標函數在這條'曲線'有最優解時,目標函數的在最值點處的梯度,也正交於曲線在最值點的切線(可由最值點處目標函數偏導數都為0推導出),因此可以得到一個結論:約束函數和目標函數的梯度都正交於'曲線'最值點的切線,所以目標函數在最值點的梯度可用約束函數梯度線性表示。如下圖,目標函數f的梯度▽f與等式約束g1、g2的梯度▽g1、▽g2在一個平面上,這個平面的法平面是該點的切線。
約束為等式時,KKT條件表述如下:
這里需要注意兩點:
1、上面的表述中正交兩個字打了黑體加粗,正交與垂直兩者有區別,兩個向量垂直代表相互夾角是90度,而正交含義是內積為0,比如任何向量和零向量的內積都是0,這是正交的情形但並不垂直。
2、曲線兩個字都打了引號,代表這里的曲線是一個抽象的空間幾何概念,要與平常認知的曲線區別開。比如兩個平面h1(x,y)=x-y-2和h2(x,y)=-5x-y+1是三維空間平面,而當h1(x,y)=0和h2(x,y)=0時,x-y-2=0和-5x-y+1=0是二維空間兩條直線,如下圖:
這兩條直線在二維空間相交於點P,點P就是上面表述'曲線'的一種,點P的切線是一個零向量,h1(x,y)和h2(x,y)梯度▽h1、▽h2是二維空間兩個向量,而▽h1、▽h2與零向量內積必定為0,代表梯度正交於切線。
二、約束條件為不等式
2.1 幾何角度
帶有不等式的非線性規划問題可以用下面形式表達:
不等式方程組gi(x)>=0所圍成區域為目標函數的可行區,由於gi(x)有可能是非線性函數,此時可行區不能確保是凸集,即使是凸集,該凸集有可能有無數個極點,此時不能像單純形法那樣迭代每個極點獲得最值,可行區與目標函數的定義域位置關系可以分為兩種情形。
情形一:目標函數的全局最小點在可行區內,如下圖:
紅色圓點代表目標函數的等值線,點狀空間代表了不等式約束設定的可行區,這種情形直接用梯度法求解目標函數即可獲得最值,約束條件不起到任何作用,KKT條件不是專門針對這種情形。
情形二:目標函數的全局最值點在可行區外,此時只能求得目標函數在約束條件下的局部最值點,如下圖所示:
觀察圖像可以發現,目標函數等值線與約束邊界相切時得到最值點,邊界函數為gi(x)=0,與等式約束條件一樣,此處目標函數的梯度與邊界函數gi(x)梯度有如下關系:
f函數梯度指向函數增大方向,即指向可行區內;而在可行區內約束函數gi(x)<=0,gi(x)的梯度應指向可行區域外,所以f函數梯度與約束函數gi(x)梯度方向正好是相反的;如果不等式約束是x+y>=-2,則兩個梯度是同一個方向。這里演示的是等值線與眾多約束中一個條件邊界相切情形,有時目標函數與可行區相交於一點,該點是多個約束邊界的交點,如下圖所示:
上圖紅色點代表最值點,它是g1(x)≦0、g2(x)≦0兩個約束條件邊界的交點,由於最值必定出現在邊界上,所以不等式約束情形可以轉化為等式約束的情形,有拉格朗日乘數法表達式:
②
從之前約束條件為等式分析可以知道,上面公式代表了n個等式(x ∈ Rn),而我們目標是求出n+m個變量,即變量x1,x2,x3..xn;μ1,μ2,..μm,目前方程組的方程只有n個,這顯然是解不出來的。看一下最值點所在的位置,將紅色最值點標記為x*,我們把約束分為兩類,一類不等式約束其邊界不是最值點所在曲線,如上圖的邊界g3(x),將最值點x*帶入后恆有g3(x*)>0,最終的最值點相對於g3(x)>=0這個約束,可以自由移動一段距離都不會違反這個約束,換言之g3(x)>=0這個不等式相對於最值點沒有起到任何約束作用,這時g3(x*)對應的梯度系數μ3可設為0;另一類不等式邊界是最值點所在曲線,如上面的g1(x),g2(x),這類約束對應的梯度系數大於0,但本身是邊界函數,函數本身值為0。綜上所述,對於所有的不等式,無論最終是否起到約束作用,都有以下等式:
μigi(x)=0 ③
公式3也稱為互補松弛條件,得到這m個等式松弛條件后聯合公式(2)即可解出所有的變量,從而得到最值。不等式約束非線性規划問題中,具體到每一個不等式是否起到約束作用,是根據最值點位置來確定的,通過引入互補松弛條件本質是一種待定系數法。
2.2 代數角度
上面從幾何角度說明了約束為不等式的情形,幾何方法形象生動,帶來弊端是不嚴謹,接下來通過代數方法歸納KKT條件,首先引入Gordan定理:
Gordan定理:設A是m*n矩陣,則Ax<0有解的充要條件是ATy=0,y>=0無解。
Gordan定理的充分性和必要性都可以通過反證法證明,這里不詳細介紹證明過程,Gordan定理是充要性的描述,所以也可以反過來描述:
設A是m*n矩陣,則Ax<0無解的充要條件是ATy=0,y>=0有解。
針對開始非線性規划問題:
設有最值點x*,則點x*沿着方向d延伸一端距離后,如果要求仍然還在可行區內,對方向d是有要求的,從之前分析可知,最值點一定出現在邊界上,而邊界函數值等於0,利用微分知識可以寫出這個條件:,即必須確保最值點沿d方向是遞增的,這樣才能確保gi(x)>0從而滿足約束條件,為了和Gordan定理形式相同,把這個條件改寫為:
④
余下文章請轉至鏈接:KKT條件