在求取有約束條件的優化問題時,拉格朗日乘子法(Lagrange Multiplier) 和KKT條件是很是重要的兩個求取方法,對於等式約束的優化問題,能夠應用拉格朗日乘子法去求取最優值;若是含有不等式約束,能夠應用KKT條件去求取。固然,這兩個方法求得的結果只是必要條件,只有當是凸函數的狀況下,才能保證是充分必要條件。KKT條件是拉格朗日乘子法的泛化。以前學習的時候,只知道直接應用兩個方法,可是殊不知道爲何拉格朗日乘子法(Lagrange Multiplier) 和KKT條件可以起做用,爲何要這樣去求取最優值呢?數組
本文將首先把什麼是拉格朗日乘子法(Lagrange Multiplier) 和KKT條件敘述一下;而後開始分別談談爲何要這樣求最優值。函數
一. 拉格朗日乘子法(Lagrange Multiplier) 和KKT條件學習
一般咱們須要求解的最優化問題有以下幾類:優化
(i) 無約束優化問題,能夠寫爲:.net
\[min{\rm{ }}f\left( x \right);\]blog
(ii) 有等式約束的優化問題,能夠寫爲:ip
\[\begin{array}{l}
min{\rm{ }}f\left( x \right),\\
s.t.{\rm{ }}{h_{\rm{i}}}\left( x \right){\rm{ }} = {\rm{ }}0;{\rm{ }}i{\rm{ }} = 1,{\rm{ }}...,{\rm{ }}n
\end{array}\]數學
(iii) 有不等式約束的優化問題,能夠寫爲:變量
\[\begin{array}{l}
\min f\left( x \right),\\
s.t.{\rm{ }}{g_i}\left( x \right){\rm{ }} < = {\rm{ }}0;{\rm{ }}i{\rm{ }} = 1,{\rm{ }}...,{\rm{ }}n\\
{h_j}\left( x \right){\rm{ }} = {\rm{ }}0;{\rm{ }}j{\rm{ }} = 1,{\rm{ }}...,{\rm{ }}m
\end{array}\] 方法
對於第(i)類的優化問題,經常使用的方法就是Fermat定理,即便用求取f(x)的導數,而後令其爲零,能夠求得候選最優值,再在這些候選值中驗證;若是是凸函數,能夠保證是最優解。
對於第(ii)類的優化問題,經常使用的方法就是拉格朗日乘子法(Lagrange Multiplier) ,即把等式約束h_i(x)用一個係數與f(x)寫爲一個式子,稱爲拉格朗日函數,而係數稱爲拉格朗日乘子。經過拉格朗日函數對各個變量求導,令其爲零,能夠求得候選值集合,而後驗證求得最優值。
對於第(iii)類的優化問題,經常使用的方法就是KKT條件。一樣地,咱們把全部的等式、不等式約束與f(x)寫爲一個式子,也叫拉格朗日函數,係數也稱拉格朗日乘子,經過一些條件,能夠求出最優值的必要條件,這個條件稱爲KKT條件。
(a) 拉格朗日乘子法(Lagrange Multiplier)
對於等式約束,咱們能夠經過一個拉格朗日系數a 把等式約束和目標函數組合成爲一個式子L(a, x) = f(x) + a*h(x), 這裏把a和h(x)視爲向量形式,a是橫向量,h(x)爲列向量,之因此這麼寫,徹底是由於csdn很難寫數學公式,只能將就了.....。
而後求取最優值,能夠經過對L(a,x)對各個參數求導取零,聯立等式進行求取,這個在高等數學裏面有講,可是沒有講爲何這麼作就能夠,在後面,將簡要介紹其思想。
(b) KKT條件
對於含有不等式約束的優化問題,如何求取最優值呢?經常使用的方法是KKT條件,一樣地,把全部的不等式約束、等式約束和目標函數所有寫爲一個式子L(a, b, x)= f(x) + a*g(x)+b*h(x),KKT條件是說最優值必須知足如下條件:
1. L(a, b, x)對x求導爲零;
2. h(x) =0;
3. a*g(x) = 0;
求取這三個等式以後就能獲得候選最優值。其中第三個式子很是有趣,由於g(x)<=0,若是要知足這個等式,必須a=0或者g(x)=0. 這是SVM的不少重要性質的來源,如支持向量的概念。
二. 爲何拉格朗日乘子法(Lagrange Multiplier) 和KKT條件可以獲得最優值?
爲何要這麼求能獲得最優值?先說拉格朗日乘子法,設想咱們的目標函數z = f(x), x是向量, z取不一樣的值,至關於能夠投影在x構成的平面(曲面)上,即成爲等高線,以下圖,目標函數是f(x, y),這裏x是標量,虛線是等高線,如今假設咱們的約束g(x)=0,x是向量,在x構成的平面或者曲面上是一條曲線,假設g(x)與等高線相交,交點就是同時知足等式約束條件和目標函數的可行域的值,但確定不是最優值,由於相交意味着確定還存在其它的等高線在該條等高線的內部或者外部,使得新的等高線與目標函數的交點的值更大或者更小,只有到等高線與目標函數的曲線相切的時候,可能取得最優值,以下圖所示,即等高線和目標函數的曲線在該點的法向量必須有相同方向,因此最優值必須知足:f(x)的梯度 = a* g(x)的梯度,a是常數,表示左右兩邊同向。這個等式就是L(a,x)對參數求導的結果。(上述描述,我不知道描述清楚沒,若是與我物理位置很近的話,直接找我,我當面講好理解一些,注:下圖來自wiki)。
而KKT條件是知足強對偶條件的優化問題的必要條件,能夠這樣理解:咱們要求min f(x), L(a, b, x) = f(x) + a*g(x) + b*h(x),a>=0,咱們能夠把f(x)寫爲:max_{a,b} L(a,b,x),爲何呢?由於h(x)=0, g(x)<=0,如今是取L(a,b,x)的最大值,a*g(x)是<=0,因此L(a,b,x)只有在a*g(x) = 0的狀況下才能取得最大值,不然,就不知足約束條件,所以max_{a,b} L(a,b,x)在知足約束條件的狀況下就是f(x),所以咱們的目標函數能夠寫爲 min_x max_{a,b} L(a,b,x)。若是用對偶表達式: max_{a,b} min_x L(a,b,x),因爲咱們的優化是知足強對偶的(強對偶就是說對偶式子的最優值是等於原問題的最優值的),因此在取得最優值x0的條件下,它知足 f(x0) = max_{a,b} min_x L(a,b,x) = min_x max_{a,b} L(a,b,x) =f(x0),咱們來看看中間兩個式子發生了什麼事情:
f(x0) = max_{a,b} min_x L(a,b,x) = max_{a,b} min_x f(x) + a*g(x) + b*h(x) = max_{a,b} f(x0)+a*g(x0)+b*h(x0)= f(x0)
能夠看到上述加黑的地方本質上是說 min_x f(x) + a*g(x) + b*h(x) 在x0取得了最小值,用fermat定理,便是說對於函數 f(x) + a*g(x) + b*h(x),求取導數要等於零,即
f(x)的梯度+a*g(x)的梯度+ b*h(x)的梯度 = 0
這就是kkt條件中第一個條件:L(a, b, x)對x求導爲零。
而以前說明過,a*g(x) = 0,這時kkt條件的第3個條件,固然已知的條件h(x)=0必須被知足,全部上述說明,知足強對偶條件的優化問題的最優值都必須知足KKT條件,即上述說明的三個條件。能夠把KKT條件視爲是拉格朗日乘子法的泛化。
轉載:http://blog.csdn.net/xianlingmao/article/details/7919597