拉格朗日乘子法和KKT約束

本篇文章將詳解帶有約束條件的最優化問題,約束條件分為等式約束與不等式約束,對于等式約束的優化問題,可以直接應用拉格朗日乘子法去求取最優值;對于含有不等式約束的優化問題,可以轉化為在滿足 KKT 約束條件下應用拉格朗日乘子法求解。拉格朗日求得的并不一定是最優解,只有在凸優化的情況下,才能保證得到的是最優解,所以本文稱拉格朗日乘子法得到的為可行解,其實就是局部極小值,接下來從無約束優化開始一一講解。

一、無約束優化

首先考慮一個不帶任何約束的優化問題,對于變量x屬于實數集的函數 f(x),無約束優化問題如下:

該問題很好解,根據 Fermat 定理,直接找到使目標函數得 0 的點即可 即 ∇xf(x)為 0,如果沒有解析解的話,可以使用梯度下降或牛頓方法等迭代的手段來使 x 沿負梯度方向逐步逼近極小值點。

這里簡單實現了下使用隨機梯度下降求解無約束優化問題:

def sgd(x):
    y=x**2+2*x+3
    print("初始化x的值是 %f ,y的值是:%f。" % (x,y))
    lr=0.01
    for i in range(200):
        x=x-lr*grad(x)
        y=f(x)
        print("當x的值是 %f 時,y的值是:%f。" % (x,y))
def grad(x):
    return 2*x+2
def f(x):
    return x**2+2*x+3
sgd(2)    

在迭代200次之后,最終結果:

實際上是在x=-1時取得最小值2。

二、等式約束優化

當目標函數加上約束條件之后,問題就變成如下形式:

約束條件會將解的范圍限定在一個可行域,此時不一定能找到使得 ∇xf(x)為 0 的點,只需找到在可行域內使得 f(x) 最小的值即可,常用的方法即為拉格朗日乘子法,該方法首先引入 agrange Multiplie,α屬于實數集,構建 Lagrangian 如下:

求解方法如下:首先對 Lagrangian  關于 α與 x求 :

令導數為 0 ,求得 x 、α  的值后,將 x 帶入 f(x) 即為在約束條件 hi(x) 下的可行解。這樣做的意義是什么呢? 接下來看一個直觀的示例,對于二維情況下的目標函數是 f(x,y),在平面中畫出 f(x,y) 的等高線,如下圖的虛線所示, 并只給出一個約束等式 h(x,y)=0 ,如下圖的綠線所示,目標函數 f(x,y) 與約束 g(x,y) 只有三種情況,相交、相切或者沒有交集,沒交集肯定不是解,只有相交或者相切可能是解,但相交得到的一定不是最優值,因為相交意味著肯定還存在其它的等高線在該條等高線的內部或者外部,使得新的等高線與目標函數的交點的值更大或者更小,這就意味著只有等高線與目標函數的曲線相切的時候,才可能得到可行解。

因此給出結論:拉格朗日乘子法取得極值的必要條件是目標函數與約束函數相切,這時兩者的法向量是平行的,即

所以只要滿足上述等式,且滿足之前的約束 hi(x)=0,i=1,2,…,m ,即可得到解,聯立起來,正好得到就是拉格朗日乘子法。這里只是直觀展示了一下拉格朗日乘子法的幾何推導 ,并沒有給出詳細的證明。

這里給出一個例子:

令:

求:

其圖像如下:

構造拉格朗日函數:

求得對x,y,α的倒數并讓其等于0:

聯立求解的:

三、不等式約束優化

當約束加上不等式之后,情況變得更加復雜,首先來看一個簡單的情況,給定如下不等式約束問題:

對應的 Lagrangian 與圖形分別如下所示:

這時的可行解必須落在約束區域 g(x) 之內,下圖給出了目標函數的等高線與約束: 

由圖可見可行解 x 只能在 g(x)<0 或者 g(x)=0 的區域里取得:

  • 當可行解 x 落在 g(x)<0 的區域內,此時直接極小化 f(x) 即可;
  • 當可行解 x 落在 g(x)=0 即邊界上,此時等價于等式約束優化問題.

當約束區域包含目標函數原有的的可行解時,此時加上約束可行解扔落在約束區域內部,對應 g(x)<0 的情況,這時約束條件不起作用;當約束區域不包含目標函數原有的可行解時,此時加上約束后可行解落在邊界 g(x)=0 上。下圖分別描述了兩種情況,右圖表示加上約束可行解會落在約束區域的邊界上。

以上兩種情況就是說,要么可行解落在約束邊界上即得 g(x)=0 ,要么可行解落在約束區域內部,此時約束不起作用,另 λ=0 消去約束即可,所以無論哪種情況都會得到:

還有一個問題是 λ 的取值,在等式約束優化中,約束函數與目標函數的梯度只要滿足平行即可,而在不等式約束中則不然,若 λ≠0,這便說明 可行解 x 是落在約束區域的邊界上的,這時可行解應盡量靠近無約束時的解,所以在約束邊界上,目標函數的負梯度方向應該遠離約束區域朝向無約束時的解,此時正好可得約束函數的梯度方向與目標函數的負梯度方向應相同:

上式需要滿足的要求是拉格朗日乘子 λ>0 ,這個問題可以舉一個形象的例子,假設你去爬山,目標是山頂,但有一個障礙擋住了通向山頂的路,所以只能沿著障礙爬到盡可能靠近山頂的位置,然后望著山頂嘆嘆氣,這里山頂便是目標函數的可行解,障礙便是約束函數的邊界,此時的梯度方向一定是指向山頂的,與障礙的梯度同向,下圖描述了這種情況 :

可見對于不等式約束,只要滿足一定的條件,依然可以使用拉格朗日乘子法解決,這里的條件便是 KKT 條件。接下來給出形式化的 KKT 條件 首先給出形式化的不等式約束優化問題:

列出 Lagrangian 得到無約束優化問題:

經過之前的分析,便得知加上不等式約束后可行解 x 需要滿足的就是以下的 KKT 條件: 

滿足 KKT 條件后極小化 Lagrangian 即可得到在不等式約束條件下的可行解。 KKT 條件看起來很多,其實很好理解:

(1) :拉格朗日取得可行解的必要條件;

(2) :這就是以上分析的一個比較有意思的約束,稱作松弛互補條件;

(3) ∼ (4) :初始的約束條件;

(5) :不等式約束的 Lagrange Multiplier 需滿足的條件。

主要的KKT條件便是 (3) 和 (5) ,只要滿足這倆個條件便可直接用拉格朗日乘子法, SVM 中的支持向量便是來自于此,需要注意的是 KKT 條件與對偶問題也有很大的聯系,下一篇文章就是拉格朗日對偶。

 

文中大部分內容來源于:http://www.005223.buzz/ooon/p/5721119.html

還參考了:

https://www.zhihu.com/question/38586401

https://blog.csdn.net/qq_34401994/article/details/103909343

posted @ 2020-05-03 15:27  西西嘛呦  閱讀(...)  評論(...編輯  收藏
美人江湖手游