0 前言php
上」最優化「課,老師講到了無約束優化的拉格朗日乘子法和KKT條件。html
這個在SVM的推導中有用到,因此查資料加深一下理解。函數
1 無約束優化學習
對於無約束優化問題中,若是一個函數f是凸函數,那麼能夠直接經過f(x)的梯度等於0來求得全局極小值點。優化
爲了不陷入局部最優,人們儘量使用凸函數做爲優化問題的目標函數。ui
凸集定義:歐式空間中,對於集合中的任意兩點的連線,連線上任意一點都在集合中,咱們就說這個集合是凸集。spa
凸函數定義:對於任意屬於[0,1]的a和任意屬於凸集的兩點x, y,有f( ax + (1-a)y ) <= a * f(x) + (1-a) * f(y),幾何上的直觀理解就是兩點連線上某點的函數值,大於等於兩點之間某點的函數值。凸函數的任一局部極小點也是全局極小點3d
半正定矩陣的定義:特徵值大於等於0的實對稱矩陣。htm
半正定矩陣的充要條件:行列式(n階順序主子式)等於0,行列式的i階順序主子式>=0,i從1到n-1blog
凸函數的充要條件:若是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