深入理解拉格朗日乘子法和KKT條件

2021-01-14 算法與數學之美

來源 51CTO博客     原文地址:http://apinetree.blog.51cto.com/714152/1657418

在求取有約束條件的優化問題時,拉格朗日乘子法(Lagrange Multiplier) 和KKT條件是非常重要的兩個求取方法,對於等式約束的優化問題,可以應用拉格朗日乘子法去求取最優值;如果含有不等式約束,可以應用KKT條件去求取。當然,這兩個方法求得的結果只是必要條件,只有當是凸函數的情況下,才能保證是充分必要條件。KKT條件是拉格朗日乘子法的泛化。之前學習的時候,只知道直接應用兩個方法,但是卻不知道為什麼拉格朗日乘子法(Lagrange Multiplier) 和KKT條件能夠起作用,為什麼要這樣去求取最優值呢?

本文將首先把什麼是拉格朗日乘子法(Lagrange Multiplier) 和KKT條件敘述一下;然後開始分別談談為什麼要這樣求最優值。

一. 拉格朗日乘子法(Lagrange Multiplier) 和KKT條件

通常我們需要求解的最優化問題有如下幾類:

(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的很多重要性質的來源,如支持向量的概念。

二. 為什麼拉格朗日乘子法(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條件視為是拉格朗日乘子法的泛化。


熱經典文章推薦:

矩陣的秩與行列式的幾何意義

微信紅包實現原理猜想


回復以下關鍵字獲取相關文章:


數據挖掘 | 機器學習 | 數學之美 | 遊戲算法 | 生活數學 | 排名算法|大型網站技術演進 | 數學名人 | 學科概述 | 計算機科學 | 搜尋引擎



據說好多人都不知道長按圖片也能關注,你知道嗎?



相關焦點

  • 支持向量機(三):圖解KKT條件和拉格朗日乘子法
    前言支持向量機求解最優化參數的過程中需要用到拉格朗日乘子法和KKT條件,本文用清晰易懂的圖解法說明拉格朗日乘子法和
  • 如何搞定機器學習中的拉格朗日?看看這個乘子法與KKT條件大招
    一 前置知識本文引用地址:http://www.eepw.com.cn/article/201709/363864.htm  拉格朗日乘子法是一種尋找多元函數在一組約束下的極值方法,通過引入拉格朗日乘子,可將有m個變量和n個約束條件的最優化問題轉化為具有
  • 拉格朗日乘子法與KTT條件
    帶約束的優化過程應用非常普遍,拉格朗日乘子法以及其推廣KTT條件是凸函數求解極值時中常用的方法。
  • 拉格朗日乘子法
    這一篇先來介紹拉格朗日乘子法。 問題由來 在對函數優化時,如果沒有限制條件,一般直接對其求導,然後令導數為0,即可求解出極值點。但在更多的情況下,是有一些約束條件的。通常情況下,約束問題可以表示為: 也就是說,約束問題主要有2類。一類為不等式約束,另一類為等式約束。
  • 通俗易懂 | SVM之拉格朗日乘子法
    在SVM中,將約束問題轉化成非約束問題採用到了拉格朗日乘子法。這個文章就講一下拉格朗日乘子法與KKT約束是怎麼回事。本人不是數學科班出身,但是也只能硬著頭皮講一講了。所以我們匯總一下所有的已知信息,得到下面的方程組:可以求解得到:這個就是拉格朗日乘子法的直觀理解
  • 【直觀詳解】拉格朗日乘法和KKT條件
    【閱讀時間】8min - 10mun【內容簡介】直觀的解讀了什麼是拉格朗日乘子法,以及如何求解拉格朗日方程,並且給出幾個直觀的例子,針對不等式約束解讀了KKT條件的必要條件和充分條件拉格朗日乘法(Lagrange multiplier)是一種在最優化的問題中尋找多元函數在其變量受到一個或多個條件的相等約束時的求局部極值的方法。
  • 直觀理解KKT條件
    本文不對數學公式進行詳細推導,而是從直觀上對KKT條件進行理解。當然KKT條件與拉格朗日乘子是相關聯的,看完本文後,可以參閱相關資料。無約束優化問題的極值(函數的最大值/最小值)通常發生在斜率為零的點上。
  • 拉格朗日乘數法介紹
    拉格朗日乘數法的基本思想  作為一種優化算法,拉格朗日乘子法主要用於解決約束優化問題,它的基本思想就是通過引入拉格朗日乘子來將含有n個變量和k個約束條件的約束優化問題轉化為含有(n+k)個變量的無約束優化問題。拉格朗日乘子背後的數學意義是其為約束方程梯度線性組合中每個向量的係數。
  • 拉格朗日點和拉格朗日乘子法
    拉格朗日點指受兩大物體引力作用下,能使小物體穩定的點。一個小物體在兩個大物體的引力作用下在空間中的一點,在該點處,小物體相對於兩大物體基本保持靜止。在每個由兩大天體構成的系統中,按推論有5個拉格朗日點,但只有兩個是穩定的,即小物體在該點處即使受外界引力的攝擾,仍然有保持在原來位置處的傾向,每個穩定點同兩大物體所在的點構成一個等邊三角。
  • 求最優化方法:拉格朗日乘數法 圖解高等數學-下 15
    11.8 Lagrange 乘子如果是求定義域內約束在某個區域內函數的極值, 可以用本次講述的 Lagrange乘子法.約束最大值和最小值觀察下面函數 f(x,y)=49-x^2y^2 受約束 g(x,y)=x+3y-10=0 的圖形.
  • 不等式專題之二元條件最值中的拉格朗日乘數法
    在大學中函數的維度不再局限為一元,大學課程中有關於二元函數最值求解內容,也有二元條件最值的求解內容,今天給出大學中利用拉格朗日乘數法求解二元條件最值的方法,該方法很容易掌握,避免了技巧性過高的拼湊,但是在計算複雜度上可能有所提高,內容僅供參考。
  • 拉格朗日乘數法
    拉格朗日乘數法 在數學最優問題中,拉格朗日乘數法(以數學家約瑟夫·路易斯·拉格朗日命名)是一種尋找變量受一個或多個條件所限制的多元函數的極值的方法。這種方法將一個有n 個變量與k 個約束條件的最優化問題轉換為一個有n + k個變量的方程組的極值問題,其變量不受任何約束。
  • 一挑三 FJ vs KKT
    但是由於參與了美國的曼哈頓計劃(Manhattan Project),使得Karush本人對名利追求並不熱衷,而追求和平,他對Karush和Tucker的定理的命名權並不放在心上。 以至於KT條件在10年後才重命名為KKT條件。
  • 科普欄目|將加子轉換為乘子--直觀理解e^πi+1=0
    x^n+…在對待e^πi這個數時,我們也可以不通過定義的無限項加和式來理解它,而是將其當作加子轉換為乘子的過程。其實在二維的複數平面上加子乘子動作的變換也是可以應用的。每個複數都是複平面上的一個點。對於加子,我們可以滑動平面,讓0點平移到此複數對應的點。而對於乘子,我們仍可以保持0點不動,將1變換到複數對應的點。
  • 如何理解拉格朗日方程
    拉格朗日方程是理論力學中非常重要的一個方程,它和牛頓力學一樣,都是一種對力學系統的描述。
  • [數值算法與編程]高斯消去法
    通常情況下,得到的該方程組中的K不是滿秩矩陣,其矩陣行列式為0,因此此時U的解不唯一,在採用拉格朗日乘子法或者罰函數法等方式引入了邊界條件進行修正後,K為滿秩矩陣,從而U的解唯一。  之後的任務就是求解這個方程組。求解該方程組的方式通常有兩種:直接法和迭代法。
  • 拉格朗日插值定理的理論基礎
    而插值裡面比較常用的方法之一就是拉格朗日插值法,這篇文章就跟大家講講拉格朗日插值的理論基礎。為什麼需要進行插值我們進行數據處理的理想,當然是希望數據非常的完備,啥玩意兒都有。但現實往往不盡如人意,數據經常會缺東少西的,那怎麼辦呢?我們需要對一些不存在的數據進行一些插補。