https://blog.csdn.net/pipisorry/article/details/52135854
https://blog.csdn.net/yujianmin1990/article/details/48494607
解決約束優化問題——拉格朗日乘數法
拉格朗日乘數法(Lagrange Multiplier Method)應用廣泛,可以學習麻省理工學院的在線數學課程。
拉格朗日乘數法的基本思想
作為一種優化算法,拉格朗日乘子法主要用於解決約束優化問題,它的基本思想就是通過引入拉格朗日乘子來將含有n個變量和k個約束條件的約束優化問題轉化為含有(n+k)個變量的無約束優化問題。拉格朗日乘子背后的數學意義是其為約束方程梯度線性組合中每個向量的系數。
如何將一個含有n個變量和k個約束條件的約束優化問題轉化為含有(n+k)個變量的無約束優化問題?拉格朗日乘數法從數學意義入手,通過引入拉格朗日乘子建立極值條件,對n個變量分別求偏導對應了n個方程,然后加上k個約束條件(對應k個拉格朗日乘子)一起構成包含了(n+k)變量的(n+k)個方程的方程組問題,這樣就能根據求方程組的方法對其進行求解。
解決的問題模型為約束優化問題:
min/max a function f(x,y,z), where x,y,z are not independent and g(x,y,z)=0.
即:min/max f(x,y,z)
s.t. g(x,y,z)=0
數學實例
首先,我們先以麻省理工學院數學課程的一個實例來作為介紹拉格朗日乘數法的引子。
【麻省理工學院數學課程實例】求雙曲線xy=3上離遠點最近的點。
解:
首先,我們根據問題的描述來提煉出問題對應的數學模型,即:
min f(x,y)=x2+y2(兩點之間的歐氏距離應該還要進行開方,但是這並不影響最終的結果,所以進行了簡化,去掉了平方)
s.t. xy=3.
根據上式我們可以知道這是一個典型的約束優化問題,其實我們在解這個問題時最簡單的解法就是通過約束條件將其中的一個變量用另外一個變量進行替換,然后代入優化的函數就可以求出極值。我們在這里為了引出拉格朗日乘數法,所以我們采用拉格朗日乘數法的思想進行求解。
我們將x2+y2=c的曲線族畫出來,如下圖所示,當曲線族中的圓與xy=3曲線進行相切時,切點到原點的距離最短。也就是說,當f(x,y)=c的等高線和雙曲線g(x,y)相切時,我們可以得到上述優化問題的一個極值(注意:如果不進一步計算,在這里我們並不知道是極大值還是極小值)。
現在原問題可以轉化為求當f(x,y)和g(x,y)相切時,x,y的值是多少?
如果兩個曲線相切,那么它們的切線相同,即法向量是相互平行的,▽f//▽g.
由▽f//▽g可以得到,▽f=λ*▽g。
這時,我們將原有的約束優化問題轉化為了一種對偶的無約束的優化問題,如下所示:
原問題:min f(x,y)=x2+y2 對偶問題:由▽f=λ*▽g得,
s.t. xy=3 fx=λ*gx,
fy=λ*gy,
xy=3.
約束優化問題 無約束方程組問題
通過求解右邊的方程組我們可以獲取原問題的解,即
2x=λ*y
2y=λ*x
xy=3
通過求解上式可得,λ=2或者是-2;當λ=2時,(x,y)=(sqrt(3), sqrt(3))或者(-sqrt(3), -sqrt(3)),而當λ=-2時,無解。所以原問題的解為(x,y)=(sqrt(3), sqrt(3))或者(-sqrt(3), -sqrt(3))。
通過舉上述這個簡單的例子就是為了體會拉格朗日乘數法的思想,即通過引入拉格朗日乘子(λ)將原來的約束優化問題轉化為無約束的方程組問題。
拉格朗日乘數法的基本形態
求函數在滿足
下的條件極值,可以轉化為函數
的無條件極值問題。
我們可以畫圖來輔助思考。
綠線標出的是約束g(x,y)=c的點的軌跡。藍線是f(x,y)的等高線。箭頭表示斜率,和等高線的法線平行。
從圖上可以直觀地看到在最優解處,f和g的斜率平行。
▽[f(x,y)+λ(g(x,y)−1)]=0, λ≠0
一旦求出λ的值,將其套入下式,易求在無約束極值和極值所對應的點。
F(x,y)=f(x,y)+λ(g(x,y)−c)
新方程F(x,y)在達到極值時與f(x,y)相等,因為F(x,y)達到極值時g(x,y)−c總等於零。
上述式子取得極小值時其導數為0,即▽f(x)+▽∑λigi(x)=0,也就是說f(x)和g(x)的梯度共線。
題目1:
給定橢球
求這個橢球的內接長方體的最大體積。這個問題實際上就是條件極值問題,即在條件
下,求的最大值。
當然這個問題實際可以先根據條件消去,然后帶入轉化為無條件極值問題來處理。但是有時候這樣做很困難,甚至是做不到的,這時候就需要用拉格朗日乘數法了。通過拉格朗日乘數法將問題轉化為
對求偏導得到
聯立前面三個方程得到和
,帶入第四個方程解之
帶入解得最大體積為
拉格朗日乘數法對一般多元函數在多個附加條件下的條件極值問題也適用。
題目2:
題目:求離散分布的最大熵。
分析:因為離散分布的熵表示如下
而約束條件為
要求函數的最大值,根據拉格朗日乘數法,設
對所有的求偏導數,得到
計算出這個等式的微分,得到
這說明所有的都相等,最終解得
因此,使用均勻分布可得到最大熵的值。
拉格朗日乘數法與KKT條件
拉格朗日乘數法
對於第二種形式,帶約束條件的問題,我們更傾向於將其轉化為無約束問題。在數學最優化問題中,拉格朗日乘數法是一種尋找變量受一個或多個條件所限制的多元函數的極值的方法。這種方法將一個有n 個變量與k 個約束條件的最優化問題轉換為一個有n + k個變量的方程組的極值問題,其變量不受任何約束。這種方法引入了一種新的標量未知數,即拉格朗日乘數(:約束方程的梯度(gradient)的線性組合里每個向量的系數,搞不懂這句話在說神馬)。
上面這段話讀起來挺繞的,還是舉個例子吧。
目標是求f(x,y)=x2∗yf(x,y)=x2∗y的最大值
同時滿足x2+y2=1x2+y2=1
怎么將這兩個式子湊到一起呢?引入個系數變量λλ
構造新目標函數F(x,y,λ)=x2∗y+λ∗(x2+y2−1)F(x,y,λ)=x2∗y+λ∗(x2+y2−1)
我們看看新目標函數的特點:
對λλ求導,則得:(1)∂f(x,y,λ)∂λ=x2+y2−1∂f(x,y,λ)∂λ=x2+y2−1
對xx求導,則得:(2)∂f(x,y,λ)∂x=2xy+2λx∂f(x,y,λ)∂x=2xy+2λx
對yy求導,則得:(3)∂f(x,y,λ)∂y=x2+2λy∂f(x,y,λ)∂y=x2+2λy
若是按照一個函數的最值存在於其極值的思想來解答,則令這三個式子為0,可以看到,原來的約束也包括進了新目標函數中,不過是引入了個新變量λλ。
並且在F(x,y,λ)F(x,y,λ)取得極值時,與f(x,y)f(x,y)相等,因為FF取得極值時,∂f(x,y,λ)∂λ=x2+y2−1=0∂f(x,y,λ)∂λ=x2+y2−1=0,F(x,y,λ)F(x,y,λ)變為f(x,y)f(x,y)。故,F(x,y,λ)F(x,y,λ)的極值必然是f(x, y)的極值。這段話很重要~
但是這里對原參數的偏導數里多出來的λλ項怎么解釋呢?
λλ的物理意義:表示原目標函數在約束下,所能達到的最大增長率(梯度)。其解釋如下:
F(w,λ)=f(w)+λ∗g(w)F(w,λ)=f(w)+λ∗g(w);
∂F∂w=∂f∂w+λ∂g∂w∂F∂w=∂f∂w+λ∂g∂w;
∂F∂λ=g(w)∂F∂λ=g(w)
令∂F∂w=0∂F∂w=0,則得λ=−f′wg′wλ=−fw′gw′,可以看出來原目標函數f(w)f(w)的的梯度(最大增長率)受到了g(w)g(w)的梯度約束。
若是將∂F∂λ=g(w)=0∂F∂λ=g(w)=0帶入上述λλ式子中,可以得到在確定約束條件下的原目標函數的梯度。(這個說法有問題沒有?上面λλ式子已經是在極值下求解得到的,不過沒有考慮約束g(x)=0g(x)=0,所以這個說法是沒問題的)
(因此,上面的求解最優值,就變成了在約束條件下,原目標函數在約束函數下的梯度求解問題。怎么感覺怪怪的,沒想到就變成了這樣的問題。錯誤原因:有地方理解的有問題,對新目標求極值,中間找到了參數間的關系,然后把一個變量表示了出來,只能說明新目標函數在極值時的某個參數的樣子)
畫個圖或許更直觀一些。
在約束條件下某目標函數的最值,只可能出現在約束函數的等高線和目標函數在參數面投影的相切的地方。

上圖中,f(x,y)f(x,y)為目標函數,g(x,y)=cg(x,y)=c為約束條件,我們將兩者投影到xyxy平面上得到兩者的等高線分布,體現在空間中就是g(x,y)=0g(x,y)=0向上做垂直切面,切割了f(x,y)f(x,y),得到了個曲線,這個曲線投影到xyxy面上剛好與g(x,y)=0g(x,y)=0重合,可以看到隨着f(x,y)f(x,y)的xyxy范圍縮小(對應其值逐漸增大),會有個與g(x,y)=0g(x,y)=0的切點B,對應於f(x,y)f(x,y)上的A點。A點則是滿足約束的,剛好又是最值的地方。
對邏輯回歸里懲罰的解釋
現在回過頭來看,線性回歸目標函數里面的懲罰,是怎么個情況,明白了沒?結果發現還是沒能夠解釋為什么要加懲罰12wTw12wTw。哎~!~好囧~!~
經過跟馬博和賈老師的討論,終於把這個問題整出了一個較為合理的解釋。
首先高次多項式回歸的評估函數是誤差函數:
cost(x,w)=12∑Mi=1[f(x,w)−y]2cost(x,w)=12∑i=1M[f(x,w)−y]2;前面的1/2是為了后期求導的時候方便。
現在對參數ww進行約束,因為高次對應的參數會很大程度上影響擬合度,並且會有甩尾現象,想把其影響降到較小程度,並且盡可能保留主要部分(w0w0對應的信息)使得泛化能力強,我們想怎么去約束ww呢?
如果wT∗w⩽w20wT∗w⩽w02(二階范數約束,肯定還有其他約束的情況),那豈不是實現了我們的約束目的,一方面對高次對應的參數進行了約束,一方面他們對整體的影響還不會對整體超過w0w0的影響。
這樣,還不能夠用拉格朗日乘子法,因為該方法是解決等式約束的最值問題。怎么辦呢?好好看看誤差函數,這是一個凸函數,我們對ww的約束是在某個范圍內,那么根據上面手繪圖來看,最值的解只可能出現在,誤差函數的等高線與約束最外邊緣的切點上。啊哈,這個地方給了我們很大啟示,可以直接在約束邊緣上找到誤差函數的最小值即可。
看下面這個圖,就很直觀地說明了這個問題。左側為二階范數約束,右側為一階范數約束。
於是對誤差函數的在不等式wTw⩽w20wTw⩽w02的最值問題的解,就是誤差函數在等式wTw=w20wTw=w02的最值的解。
哈哈,終於可以正大光明的應用拉格朗日乘子法了,於是就有了我們加入懲罰之后的新的代價函數:
Cost(x,w)=∑Mi=1[f(x,w)−y]2+λ[wT∗w−w20]Cost(x,w)=∑i=1M[f(x,w)−y]2+λ[wT∗w−w02]
這地方離着我們在書本上看到的代價函數還有點區別,就是λλ向量統一變成了1212,目測估計是為了方便求解。
可以有其他的約束,比如∑Mj=0|wj|q⩽η∑j=0M|wj|q⩽η
KKT條件下最優求解
對於第三種情況,又有等式約束,又有不等式約束的,怎么搞呢?上面我們是用拉格朗日乘數法搞定的等式約束的問題,那么對於包括有不等式約束的,可不可以把拉格朗日乘數法擴展一下,充分利用它,解決現在的問題呢?答案是可以,就是滿足KKT條件時的最值求解。
KKT條件:在滿足一些有規則的條件下,一個非線性規划(Nonlinear Programming)問題能有最優化解的一個必要和充分條件。這是一個廣義化拉格朗日乘數的成果,KKT是三個作者的首字母,Karush & Kuhn &Tucker。
求解的問題是:
s.t.gi(w)=0,i=1,2,...,n;s.t.gi(w)=0,i=1,2,...,n;
hj(w)⩽0,j=1,2,...,m;hj(w)⩽0,j=1,2,...,m;
什么條件下,上述問題有最值解呢?
KKT出場了~
先說充分條件:
如果有常數μi⩾0μi⩾0及vjvj滿足下述條件:
▽f(w)+∑ni=1μi▽gi(w)+∑mj=1vj▽hj(w)=0▽f(w)+∑i=1nμi▽gi(w)+∑j=1mvj▽hj(w)=0
且μigi(w)=0μigi(w)=0 forfor allall i=1,2,...,ni=1,2,...,n
當然有個重要的前提假設,就是目標函數ff和約束函數gg都是凸函數。
再說必要條件:
如果目標函數和約束函數在某點ww連續可微,點ww為一局部極小值,那么則存在一組所稱乘子的常數λ⩾0,λ⩾0, μi⩾0(i=1,2,3,...,n)μi⩾0(i=1,2,3,...,n)及vj(j=1,2,...,m)vj(j=1,2,...,m)滿足如下條件:
λ+∑ni=1μi+∑mj=1|vj|>0λ+∑i=1nμi+∑j=1m|vj|>0
λ▽f(w)+∑ni=1μi▽gi(w)+∑mj=1vj▽hj(w)=0λ▽f(w)+∑i=1nμi▽gi(w)+∑j=1mvj▽hj(w)=0
μigi(w)=0μigi(w)=0 forfor i=1,2,...,ni=1,2,...,n
那么這個點ww是全局最小值。(▽▽都是對參數ww求導)
小結
約束下的函數最值問題求解,即將約束問題轉化為無約束問題,然后再去解決。
中間會有一些小技巧,自己需要在實際應用中靈活應變。