1. 程式人生 > >通俗易懂 | 拉格朗日乘子法

通俗易懂 | 拉格朗日乘子法

在SVM中,將約束問題轉化成非約束問題採用到了拉格朗日乘子法。這個文章就講一下拉格朗日乘子法與KKT約束是怎麼回事。本人不是數學科班出身,但是也只能硬著頭皮講一講了。 # 從零理解 現在我們要解決這樣一個問題: $x^2y=3$ **這個函式距離原點最近的距離是多少。** 先畫出函式影象: ![](http://helloworld2020.net/wp-content/uploads/2020/07/wp_editor_md_61decd8bc847ae960c57c554417fca12.jpg) 然後想求出最短距離: ![](http://helloworld2020.net/wp-content/uploads/2020/07/20180801104757795.gif) 這裡的思路就是,做一個以原點為中心的圓形: ![](http://helloworld2020.net/wp-content/uploads/2020/07/20180801104757887.gif) 不斷擴大圓形的半徑,直到圓與藍色的曲線相切: ![](http://helloworld2020.net/wp-content/uploads/2020/07/20180801104757971.gif) 現在。第一次與$x^2y=3$相交的點就是距離原點最近的那個點: ![](http://helloworld2020.net/wp-content/uploads/2020/07/wp_editor_md_89449ed1114eb8065b98fae15a08229b.jpg) 這個,圓形與曲線相切,且切線既是圓形的切線,也是曲線的相切。 ![](http://helloworld2020.net/wp-content/uploads/2020/07/wp_editor_md_e4bad146a7b937e7ea2068618982f6dc.jpg) 這時候,這個切線的垂線其實也就是我們所說的**梯度**,也叫做**等高線的法線**,看下面兩個圖可能會好理解一些: ![](http://helloworld2020.net/wp-content/uploads/2020/07/wp_editor_md_c46aaf66f41e4fef138cb9006f20d493.jpg) ![](http://helloworld2020.net/wp-content/uploads/2020/07/wp_editor_md_426f3fb9f7c0bd283d01add99977b48e.jpg) 那麼這個**梯度**怎麼計算呢?先看圓形$f(x,y)=x^2+y^2$的梯度: ![](http://helloworld2020.net/wp-content/uploads/2020/07/wp_editor_md_7c6f24c2fffcdc129afe03de0a5b1ee5.jpg) 再看曲線的梯度計算$g(x,y)=x^2y$的梯度: ![](http://helloworld2020.net/wp-content/uploads/2020/07/wp_editor_md_30467397351171801a7821d0a298df46.jpg) 在相切的時候,兩者的梯度方向都在同一條直線上,可以稱之為,**成比例**,這裡用比例係數$\lambda$來表示: ![](http://helloworld2020.net/wp-content/uploads/2020/07/wp_editor_md_dcad4360b54df3aaa62917e1dca7e94d.jpg) 所以我們彙總一下所有的已知資訊,得到下面的方程組: ![](http://helloworld2020.net/wp-content/uploads/2020/07/wp_editor_md_fa0bfa872daba7d7b78fd7ba7e34123e.jpg) 可以求解得到: ![](http://helloworld2020.net/wp-content/uploads/2020/07/wp_editor_md_ead0fac4ff11b404075c330bc41531e9.jpg) 這個就是拉格朗日乘子法的直觀理解。 # 抽象成數學的形式 我們要解決的問題: $\min {x^2+y^2}$ $s.t. x^2y=3$ 我們會將約束問題通過拉格朗日乘子法轉換成非約束問題: $\min F(x,y)={x^2+y^2+\lambda(x^2y-3)}$ **【為什麼可以這樣呢?】** 如果求極值,偏導數為0。先對上面的公式進行求偏導數: $\frac{\partial F(x,y)}{\partial x}=2x+\lambda 2xy=0$ $\frac{\partial F(x,y)}{\partial y}=2y+\lambda x^2=0$ 這兩個等式與這個等價,唯一的不同就是$\lambda$一個是正數一個是負數: ![](http://helloworld2020.net/wp-content/uploads/2020/07/wp_editor_md_cf6cb83c33ae9d35533ed9998afc808a.jpg) 當然,對於$x^2y-3=0$這個條件,我們也可以寫成$\frac{\partial F(x,y,\lambda)}{\partial \lambda}$,所以,可以得到這樣的一個方程組: ![](http://helloworld2020.net/wp-content/uploads/2020/07/wp_editor_md_8987c88772be08274b468cfe79012af4.jpg) # KKT條件 - KKT的英文全稱:Karush-Kuhn-Tucker 之前的拉格朗日的約束條件是等值的,**現在可以通過KKT條件推廣到不等式。因為限制條件往往是不大於,小於這樣的不等式,所以KKT才是拉格朗日化約束問題為非約束問題的關鍵。** 對於不等式問題,就是有兩種情況: - 可行解在g(x)<0; - 可行解在g(x)=0。 可行解在g(x)<0,就表示這個約束條件並沒有起到約束效果,有根沒有事一個效果(下圖中的左圖);可行解g(x)=0,就表示這個約束條件起到作用了,這就表示g(x)與f(x)相切,也就是下圖中右邊的圖。 ![](http://helloworld2020.net/wp-content/uploads/2020/07/wp_editor_md_89362dde7ad142d88a7566606386ab3b.jpg) **【g(x)<0的情況】** 這種情況下,就是沒有限制條件下的情況,其實就是沒有約束條件的限制,也就是$\lambda=0$的情況,所以我們的等式就是直接求解: $\Delta f(x)=0$ **【g(x)=0的情況】** 如果是g(x)=0的情況,那也就是約束條件起到作用了,也就意味著$\lambda>0$。在這種情況下,存在著: $\Delta f(x) = -\lambda \Delta g(x)$ 並且兩個函式的擴張的方向相反,所以表明兩個g(x)和f(x)的梯度一個是正數,一個是負數。所以這個表示$\lambda>0$。 所以綜上所述,在這種情況下,我們所有的條件綜合起來可以得到,其中$x^\*$就是最優解: - $\lambda >=0$ - $\lambda g(x^*)=0$ - $ g(x^*) <= 0$ 這三個就是KKT條件。 ![](https://imgconvert.csdnimg.cn/aHR0cDovL2hlbGxvd29ybGQyMDIwLm5ldC93cC1jb250ZW50L3VwbG9hZHMvMjAyMC8wNy8lRTklQkIlOTglRTglQUUlQTQlRTYlQTAlODclRTklQTIlOThfJUU1JThBJUE4JUU2JTgwJTgxJUU1JTg4JTg2JUU1JTg5JUIyJUU3JUJBJUJGXzIwMjAtMDctMjAtMC5naWY) ![](https://imgconvert.csdnimg.cn/aHR0cDovL2hlbGxvd29ybGQyMDIwLm5ldC93cC1jb250ZW50L3VwbG9hZHMvMjAyMC8wNy93cF9lZGl0b3JfbWRfMzEyZGQyZDliYmNmZmNiZDk0Y2YwODlkYTE4YzVjNGEuanBn?x-oss-process=image/format,png) ![](https://imgconvert.csdnimg.cn/aHR0cDovL2hlbGxvd29ybGQyMDIwLm5ldC93cC1jb250ZW50L3VwbG9hZHMvMjAyMC8wNy8lRTklQkIlOTglRTglQUUlQTQlRTYlOTYlODclRTQlQkIlQjYxNTk1MjUxNjIxMTEyLnBuZw?x-oss-process=image/form