轉自http://www.cnblogs.com/huashiyiqike/p/3568922.html在學習算法的過程中,常常需要用到向量的求導。下邊是向量的求導法則。
拉格朗日乘子法:應用在求有約束條件的函數的極值問題上。
通常我們需要求解的最優化問題有如下幾類:
(i) 無約束優化問題,可以寫為:
min f(x);
(ii) 有等式約束的優化問題,可以寫為:
min f(x),
s.t. h_i(x) = 0; i =1, ..., n
(iii) 有不等式約束的優化問題,可以寫為:
min f(x),
s.t. g_i(x) <= 0; i =1, ..., n
h_j(x) = 0; j =1, ..., m
對於第(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的很多重要性質的來源,如支持向量的概念。