通俗易懂 | 拉格朗日乘子法
阿新 • • 發佈:2020-07-25
在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