直观理解KKT条件
直觀理解KKT條件
等高線
從等高線講起。如果我們要優化f(x,y)=x2yf(x,y)=x^2yf(x,y)=x2y這個函數,給定約束為,x2+y2=1x^2+y^2=1x2+y2=1,我們希望在滿足約束的情況下使得f最大。也就是說,我們希望找到一個最“上方”的平面z,并且該平面要在可行域范圍內。這個優化函數的可視化為:
為了更好的演示,我們一般使用等高線,等高線就是考慮俯視圖:
顯然,隨著z越來越大,他離我們的圓越來越遠,而如果我們縮小z,我們就能找到一個點,恰好與圓相切,這個值就是最優值:
梯度總是垂直于等高線
現在我們考慮目標函數f(x,y)=xyf(x,y)=xyf(x,y)=xy,其梯度為<?f/?x,?f/?y>=<y,x><\partial f/\partial x,\partial f/\partial y>=<y,x><?f/?x,?f/?y>=<y,x>。舉個例子,我們選擇一個點,比如x=2,y=1x=2,y=1x=2,y=1,此時梯度為<1,2><1,2><1,2>,將這個向量畫在圖上,就得到下圖白色的直線:
我們發現梯度總是垂直于等高線的,為什么?首先梯度的直觀理解應該是,在這個平面上增長最快的方向,那如果我們考慮兩個很相近的平面,z=2,z=2.1z=2,z=2.1z=2,z=2.1:
那么因為兩個平面相隔足夠小,所以它們的登高線應該幾乎是是平行的,于是,這個登高線增長最快的方向,顯然就是往與它垂直的方向走(從2走到2.1的方向)。
KKT條件
對于優化問題
maxxf(x)s.t.hj(x)=0,j=1,…,qgi(x)≤0,i=1,…,pmax_{x}f(x) \\s.t.h_j(x)=0,j=1,\dots,q \\g_i(x)\leq 0,i=1,\dots,p maxx?f(x)s.t.hj?(x)=0,j=1,…,qgi?(x)≤0,i=1,…,p
其KKT條件(必要條件)為,若x?x^*x?是最優解則一定滿足一下條件
?f(x?)=∑jλj?hj(x?)+∑iμi?gi(x?)μi≥0,ifgi(x?)<0thenμi=0\nabla f(x^*)=\sum_j\lambda_j\nabla h_j(x^*)+\sum_i\mu_i \nabla g_i(x^*) \\\mu_i\geq0,if~g_i(x^*)<0~then~\mu_i=0 ?f(x?)=j∑?λj??hj?(x?)+i∑?μi??gi?(x?)μi?≥0,if?gi?(x?)<0?then?μi?=0
這個條件,可以直接理解為拉格朗日法的推廣,就是轉換成無約束問題,然后那個無約束的目標函數的梯度等于0.
為了理解這個東西,我們來個簡單的例子,
maxf(x,y)=x2ys.t.x2+y2=1maxf(x,y)=x^2y \\s.t.x^2+y^2=1 maxf(x,y)=x2ys.t.x2+y2=1
其中h(x,y)=x2+y2?1=0h(x,y)=x^2+y^2-1=0h(x,y)=x2+y2?1=0。回想一下,我們之前提到,等高線與約束相切的時候是可以得到最優值的。那么這個相切怎么定義呢?實際上,利用梯度總是垂直于登高線的性質,兩條線相切,那么在相切點上,fff的梯度,以及約束hhh的梯度,應該是平行的!這意味著:
?f(x?)=λ?h(x?)\nabla f(x^*)=\lambda\nabla h(x^*) ?f(x?)=λ?h(x?)
這不就是KKT條件嘛!這個垂直的狀態就如下圖所示:
那個g的梯度其實就是那個約束的梯度,對于事實上,對于約束我們也可以畫出類似的等高線圖:
最后我們來算一下,這個平行的梯度在哪個位置:
f(x,y)=x2yh(x,y)=x2+y2?1x2+y2=1?f=<2xy,x2>?h=<2x,2y>\begin{array}{l} f( x,y) =x^{2} y\\ h( x,y) =x^{2} +y^{2} -1\\ x^{2} +y^{2} =1\\ \nabla f=< 2xy,x^{2} >\\ \nabla h=< 2x,2y > \end{array} f(x,y)=x2yh(x,y)=x2+y2?1x2+y2=1?f=<2xy,x2>?h=<2x,2y>?
我們希望找到成比例的梯度:
?f=λ?h?{2xy=2λxx2=2λy\begin{aligned} & \nabla f=\lambda \nabla h\\ \Longrightarrow & \begin{cases} 2xy=2\lambda x\\ x^{2} =2\lambda y \end{cases} \end{aligned} ???f=λ?h{2xy=2λxx2=2λy??
聯合等式:
2xy=2λxx2=2λyx2+y2=1\begin{array}{l} 2xy=2\lambda x\\ x^{2} =2\lambda y\\ x^{2} +y^{2} =1 \end{array} 2xy=2λxx2=2λyx2+y2=1?
我們可以求出y2=13,x2=23\displaystyle y^{2} =\frac{1}{3} ,x^{2} =\frac{2}{3}y2=31?,x2=32?,將這個值帶到目標函數里,x2y=2313=239\displaystyle x^{2} y=\frac{2}{3}\sqrt{\frac{1}{3}} =\frac{2\sqrt{3}}{9}x2y=32?31??=923??,這個就是目標函數的最優解啦!到這里我們只考慮了等式約束,也就是h=0h=0h=0的情況,沒有考慮gj(x)≤0g_j(x)\le0gj?(x)≤0 的情況,其實,到這里已經很好理解了,如果最優值的點是落在gj(x)<0g_j(x)<0gj?(x)<0處的話,那么我們是沒有必要讓這個gjg_jgj?的梯度也跟fff的梯度垂直,因為落在里面的時候在各個方向都可以任意的移動,并不會受到約束,所以我們如果gj(x)<0g_j(x)<0gj?(x)<0,那么我們令其對應的μj=0\mu_j=0μj?=0。
參考資料
Gradient and contour maps
Lagrange multipliers, using tangency to solve constrained optimization
總結
- 上一篇: Python提取图片二维码Python
- 下一篇: 数字孪生开发公司 数字孪生开发团队 智慧