拉格朗日乘子法和KKT條件


0 前言

上”最優化“課,老師講到了無約束優化的拉格朗日乘子法和KKT條件。

這個在SVM的推導中有用到,所以查資料加深一下理解。

 

1 無約束優化

對於無約束優化問題中,如果一個函數f是凸函數,那么可以直接通過f(x)的梯度等於0來求得全局極小值點。

為了避免陷入局部最優,人們盡可能使用凸函數作為優化問題的目標函數。

凸集定義:歐式空間中,對於集合中的任意兩點的連線,連線上任意一點都在集合中,我們就說這個集合是凸集。

凸函數定義:對於任意屬於[0,1]的a和任意屬於凸集的兩點x, y,有f( ax + (1-a)y ) <= a * f(x) + (1-a) * f(y),幾何上的直觀理解就是兩點連線上某點的函數值,大於等於兩點之間某點的函數值。凸函數的任一局部極小點也是全局極小點

半正定矩陣的定義:特征值大於等於0的實對稱矩陣。

半正定矩陣的充要條件:行列式(n階順序主子式)等於0,行列式的i階順序主子式>=0,i從1到n-1

凸函數的充要條件:如果f(x)在開凸集S上具有二階連續偏導數,且f(x)的海塞矩陣(二階偏導的矩陣)在S上處處半正定,則f(x)為S上的凸函數。

 

2 約束優化定義

考慮帶約束的優化問題,可以描述為如下形式

 

其中f(x)是目標函數,g(x)為不等式約束,h(x)為等式約束。

若f(x),h(x),g(x)三個函數都是線性函數,則該優化問題稱為線性規划。若任意一個是非線性函數,則稱為非線性規划。

若目標函數為二次函數,約束全為線性函數,稱為二次規划。

若f(x)為凸函數,g(x)為凸函數,h(x)為線性函數,則該問題稱為凸優化。注意這里不等式約束g(x)<=0則要求g(x)為凸函數,若g(x)>=0則要求g(x)為凹函數。

凸優化的任一局部極值點也是全局極值點,局部最優也是全局最優。

 

3 等式約束

考慮一個簡單的問題目標函數f(x) = x1 + x2,等式約束$ h(x) = x_1^2 + x_2^2 - 2 $,求解極小值點。

f(x)在二維平面上畫出等高線(contour)就是一條條斜率相同的直線,h(x)=0在二維平面上畫出等高線就是一個圓,如下圖所示。

可以明顯的看出,在圓圈h(x)的限制下,直線f(x)的最小值為-2,在左下角直線x1+x2=2和圓的交點上。

 

不考慮圓h(x)的限制時,f(x)要得到極小值,需要往f(x)的負梯度(下降最快的方向)方向走,如下左圖藍色箭頭。

如果考慮圓h(x)的限制,要得到極小值,需要沿着圓的切線方向走,如下右圖紅色粗箭頭。注意這里的方向不是h(x)的梯度,而是正交於h(x)的梯度,h(x)梯度如下右圖的紅色細箭頭。

在極小值點,f(x)和h(x)的等高線是相切的。

 

 

容易發現,在關鍵的極小值點處,f(x)的負梯度和h(x)的梯度在同一直線上,如下圖左下方critical point的藍色和紅色箭頭所示。

注意圖中所示是同向的,但是這里並不一定是同向,有可能反向(因為等式約束h(x)=0,把h(x)變成-h(x)求解是一樣的,這個時候h(x)的梯度就相反了)

 

由此可知,在極小值點,h(x)和f(x)的梯度在同一線上,有

所以,對於f(x)和h(x)而言,只要滿足上面這個式子,同時使得h(x) = 0,解得的x就是我們要求的極小值點(或極大值點,為了簡單起見我們只討論極小值點)

要做到這一點,可以構造一個拉格朗日函數,對函數令偏導等於0求解,恰好等價於“滿足上面這個式子,同時使得h(x) = 0",原問題轉化為對拉格朗日函數求極值問題,這就是拉格朗日乘子法,如下圖所示(注意一下這個μ的正負變化)。

 

 

特別注意:優化問題是凸優化的話,通過上圖兩個條件求得的解就是極小值(而且是全局極小)。

不是凸優化的話,這兩個條件只是極小值點的必要條件,還需要附加多一個正定的條件才能變成充要條件,如下圖所示。

 

 

4 不等式約束

對於不等式約束g(x)<=0,和等式約束h(x)=0不一樣,h(x)=0可以在平面上畫出一條等高線,而g(x)<=0是一個區域,很多個等高線堆疊而成的一塊區域,我們把這塊區域稱為可行域。

不等式約束分兩種情況來討論,第一種是(不考慮可行域限制時的)極小值點落在可行域內(不包含邊界),第二種是(不考慮可行域限制時的)極小值點落在可行域外(包含邊界)。

下面舉兩個例子來解釋這兩種情況,然后總結兩種情況給出轉換求解。

 

4.1 極小值點落在可行域內(不包含邊界)

考慮目標函數$ f(x) = x_1^2 + x_2^2 $,不等值約束$g(x) = x_1^2 + x_2^2 - 1$,顯然f(x)的極小值為原點(0,0),落在可行域內。可行域以原點為圓心,半徑為1。

這種情況約束不起作用,考慮極小值點x*,這個時候,g(x*) < 0,f(x*)的梯度等於0。

 

4.2 極小值點落在可行域外(包含邊界)

考慮目標函數$ f(x) = (x_1 - 1.1)^2 + (x_2 + 1.1)^2 $ ,不等值約束$ g(x) = x_1^2 + x_2^2 - 1 $,顯然f(x)的極小值為原點(1.1, -1.1),落在可行域外。可行域以原點為圓心,半徑為1。

這種情況約束起作用,要考慮求解f(x)在可行域內的極小值點。

對於f(x)而言要沿着f(x)的負梯度方向走,才能走到極小值點,如下圖的藍色箭頭。

這個時候g(x)的梯度往區域外發散,如下圖紅色箭頭。

顯然,走到極小值點的時候,g(x)的梯度和f(x)的負梯度同向。因為極小值點在邊界上,這個時候g(x)等於0。

 

 

 

4.3 總結

極小值點落在可行域內(不包含邊界):這個時候可行域的限制不起作用,相當於沒有約束,直接f(x)的梯度等於0求解,這個時候g(x極小值點)<0(因為落在可行域內)。

極小值點落在可行域外(包含邊界):可行域的限制起作用,極小值點應該落在可行域邊界上即g(x)=0,類似於等值約束,此時有g(x)的梯度和f(x)的負梯度同向。

 

總結以上兩種情況,可以構造拉格朗日函數來轉換求解問題。

對於不等式約束的優化,需要滿足三個條件,滿足這三個條件的解x*就是極小值點。

這三個條件就是著名的KKT條件,它整合了上面兩種情況的條件。

特別注意:優化問題是凸優化的話,KKT條件就是極小值點(而且是全局極小)存在的充要條件。

不是凸優化的話,KKT條件只是極小值點的必要條件,不是充分條件,KKT點是駐點,是可能的極值點。也就是說,就算求得的滿足KKT條件的點,也不一定是極小值點,只是說極小值點一定滿足KKT條件。

 

 

不是凸優化的話,還需要附加多一個正定的條件才能變成充要條件,如下圖所示。

 

5 約束優化總結

拓展一下,對於同時有多個等式約束和多個不等式約束,構造的拉格朗日函數就是在目標函數后面把這些約束相應的加起來,KKT條件也是如此,如下圖所示。

 

6 優化問題的總結

簡單總結一下,考慮凸優化問題。

對於無約束的優化問題,直接令梯度等於0求解。

對於含有等式約束的優化問題,拉格朗日乘子法,構造拉格朗日函數,令偏導為0求解。

對於含有不等式約束的優化問題,同樣構造拉格朗日函數,利用KKT條件求解。

對於含有約束的優化問題,還可以轉化為對偶問題來求解,下篇講述一下拉格朗日對偶性的問題http://www.cnblogs.com/liaohuiqiang/p/7805954.html

 

7 參考資料

瑞典皇家理工學院(KTH)“統計學習基礎”課程的KKT課件:http://www.csc.kth.se/utbildning/kth/kurser/DD3364/Lectures/KKT.pdf

這門“統計學習基礎”的schedule上有一些其它課件:http://www.csc.kth.se/utbildning/kth/kurser/DD3364/Schedule.php


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM