文章來自:一個寶藏公眾號【機器學習煉丹術】
在SVM中,將約束問題轉化成非約束問題采用到了拉格朗日乘子法。這個文章就講一下拉格朗日乘子法與KKT約束是怎么回事。本人不是數學科班出身,但是也只能硬着頭皮講一講了。
從零理解
現在我們要解決這樣一個問題:
\(x^2y=3\)
這個函數距離原點最近的距離是多少。
先畫出函數圖像:
然后想求出最短距離:
這里的思路就是,做一個以原點為中心的圓形:
不斷擴大圓形的半徑,直到圓與藍色的曲線相切:
現在。第一次與\(x^2y=3\)相交的點就是距離原點最近的那個點:
這個,圓形與曲線相切,且切線既是圓形的切線,也是曲線的相切。
這時候,這個切線的垂線其實也就是我們所說的梯度,也叫做等高線的法線,看下面兩個圖可能會好理解一些:
那么這個梯度怎么計算呢?先看圓形\(f(x,y)=x^2+y^2\)的梯度:
再看曲線的梯度計算\(g(x,y)=x^2y\)的梯度:
在相切的時候,兩者的梯度方向都在同一條直線上,可以稱之為,成比例,這里用比例系數\(\lambda\)來表示:
所以我們匯總一下所有的已知信息,得到下面的方程組:
可以求解得到:
這個就是拉格朗日乘子法的直觀理解。
抽象成數學的形式
我們要解決的問題:
\(\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\)一個是正數一個是負數:
當然,對於\(x^2y-3=0\)這個條件,我們也可以寫成\(\frac{\partial F(x,y,\lambda)}{\partial \lambda}\),所以,可以得到這樣的一個方程組:
KKT條件
- KKT的英文全稱:Karush-Kuhn-Tucker
之前的拉格朗日的約束條件是等值的,現在可以通過KKT條件推廣到不等式。因為限制條件往往是不大於,小於這樣的不等式,所以KKT才是拉格朗日化約束問題為非約束問題的關鍵。
對於不等式問題,就是有兩種情況:
- 可行解在g(x)<0;
- 可行解在g(x)=0。
可行解在g(x)<0,就表示這個約束條件並沒有起到約束效果,有根沒有事一個效果(下圖中的左圖);可行解g(x)=0,就表示這個約束條件起到作用了,這就表示g(x)與f(x)相切,也就是下圖中右邊的圖。
【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條件。