【深度學習】原始問題和對偶問題(六)

今天要掃盲的知識點是原始問題和對偶問題,這個知識點主要牽涉拉格朗日乘數法。整理這個知識點,主要是爲理解下一個知識點(支持向量機)做準備的!

引言

原問題,又稱原線性規劃問題,是指每一個線性規劃的原始問題,每個原問題均可以轉化爲與其對稱的對偶問題。原問題與對偶問題是相對的,二者爲同類型的規劃,構成對偶規劃的一般規則如下:

  • 若原問題是極大化問題,那麼對偶問題就是極小化問題;若原問題是極小化問題,那麼對偶問題就是極大化問題。
  • 在原問題與對偶問題中,約束右端向量與目標函數中係數恰好對換。
  • 對於極小化問題的“≥ ”型約束(極大化問題的“≤ ”型約束),相應的對偶變量有非負限制;對於極小化問的“≤ ”型約束(極大化問題的“≥
    ”型約束),相應的對偶變量有非正限制;對於原問題的“=”型約束,相應的對偶變量無正負限制。
  • 對於極小化問題的具有非負限制的變量(極大化問題的具有非正限制的變量),在其對偶中相應的約束爲“≤ ”型不等式;對於極小化問題的具有非正限制的變量(極大化問題的具有非負限制的變量),在其對偶問題中相應的約束爲“≥ ”型不等式;
  • 對於原問題中無正負限制的變量,在其對偶問題中相應的約束爲等式。

原始問題

定義:f(x),gi(x),hj(x)f(x), g_i(x), h_j(x)是定義在RnR^n上的連續可微函數,考慮約束最優化問題:
minw  f(x)s.t.  gi(x)0  (i=1,...,k)hj(x)=0  (j=1,...,n)\begin{array}{rcl}&&\min_w\;f(x)\\s.t.\;g_i(x)&\leq&0\;(i=1,...,k)\\h_j(x)&=&0\;(j=1,...,n)\\&& \end{array}
上述稱爲約束最優化問題的原始問題。[想了解具體的最優化問題見(五]
如果不考慮約束條件的情況下,要求解連續可微函數f(x)的最小值非常簡單,直接令其導數等於零,解出x的值即可得到最優解。但是問題總是沒有這麼簡單的!,約束最優化問題是有約束條件的,我們不能無視約束條件呀,那在約束條件下應該怎麼求解呢??此時,拉格朗日來了,他整了個 拉格朗日乘數法出來專門把這令人頭大的約束條件去掉,將約束最優化問題變成無約束最優化問題!

最優化問題

在介紹拉格朗日之前需要普及一下我們常見的最優化問題可分爲三種類型:

  1. 無約束條件:
    minxf(x)\min_x f(x)

  2. 有等式約束條件的:
    minxf(x)s.t.gi(x)=0;(i=1,...,n)\min_x f(x)\\ s.t.g_i(x)=0; (i=1,...,n)

  3. 在第2類基礎上再加入不等式約束條件的:
    minxf(x)s.t.gi(x)0;(i=1,...,n)hj(x)=0;(j=1,...,k)\min_x f(x)\\ s.t.g_i(x)\le0; (i=1,...,n)\\ h_j(x)=0;(j=1,...,k)
    顯然,上面描述的原始問題是屬於”等式約束+不等式約束“的第3類最優化問題了。(這也是最複雜的情況)

拉格朗日乘數法

插入拉格朗日乘數法的一點介紹,爲了更好地理解下面的內容。

Lagrange Multiplier Method:是一種尋找變量受一個或多個條件所限制的多元函數的極值的方法。這種方法將一個有n個變量k個約束條件最優化問題轉換爲一個有n + k個變量的方程組的極值問題,其變量不受任何約束。這種方法引入了一個拉格朗日乘子:約束方程的梯度(gradient)的線性組合裏每個向量的係數。

注意啦!!!拉格朗日乘數法主要是解決第2類優化問題,通過引入拉格朗日乘子將等式約束問題變成無約束問題。

  • 表達式:L=f(x,y,z)+λφ(x,y,z)=0L=f(x,y,z)+\lambda \varphi(x,y,z)=0

  • 適用領域範圍: 多元函數求極值

舉個栗子

給定二元函數z=f(x,y)z=f(x,y)附加條件g(x,y)=0g(x,y)=0 ,爲尋找z=f(x,y)z=f(x,y)在附加條件下的極值點,首先,做拉格朗日函數 (公式1):
F(x,y,λ)=f(x,y)+λg(x,y)F(x,y,\lambda)=f(x,y)+\lambda g(x,y)
其中λ\lambda爲參數。令F分別對x,y,λx,y,\lambda的一階偏導數等於0,得到下面 (式子2):
Fx=fx(x,y)+λgx(x,y)=0Fy=fy(x,y)+λgy(x,y)=0Fλ=g(x,y)=0\begin{array}{l}{F^\prime}_x=f^\prime_x(x,y)+\lambda g^\prime_x(x,y)=0\\{F^\prime}_y=f^\prime_y(x,y)+\lambda g^\prime_y(x,y)=0\\{F^\prime}_\lambda=g(x,y)=0\end{array}
由上述方程組解出x,y,λx,y,\lambda,即可得到z=f(x,y)在約束條件g(x,y)=0g(x,y)=0可能的極值點因爲導數爲0的只是有極值的必要條件,而不是充分條件,即有極值的地方,其切線的斜率一定爲0; 切線斜率爲0的地方,不一定是極值點。

等式約束

上圖所示,藍色線表示函數f(x,y)f(x,y)的等高線,梯度方向是往外朝,表示越往外擴越大,紅色線表示g(x,y)g(x,y)的等高線,梯度方向向左。我們的目標是要找到滿足等式約束條件g(x,y)=0g(x,y)=0f(x,y)f(x,y)的最小值,用圖說話是,即在g(x,y)=0這條紅線上,找到一個使得f(x,y)值儘可能最小的點,從圖上可以看到,當f(x,y)的梯度不斷縮小,那麼紅線與藍線就相離;而當f(x,y)的梯度不斷增大,那麼紅線與藍線就相交,因此總有一個點能使得兩者相交,而相切的地方就是最小值,因爲兩線相切,目標函數與條件函數在切點處的法線是反向共線的,並且切點處的也滿足約束條件,就有:
fx(x,y)=λgx(x,y)fx(x,y)+λgx(x,y)=0fx(x,y)=λgx(x,y)fy(x,y)+λgy(x,y)=0g(x,y)=0\begin{array}{l}f^\prime_x(x,y)=-\lambda g^\prime_x(x,y)\Leftrightarrow f^\prime_x(x,y)+\lambda g^\prime_x(x,y)=0\\ f^\prime_x(x,y)=-\lambda g^\prime_x(x,y)\Leftrightarrow f^\prime_y(x,y)+\lambda g^\prime_y(x,y)=0\\ g(x,y)=0\end{array}
即得到上面(公式2)的結果。這解釋了拉格朗日乘數法可用於求極值的原因。

拉格朗日求解原始問題

回到上一節的問題,採用拉格朗日乘數法來去掉原始問題中的約束條件。首先根據約束最優化問題(原始問題)的形式來定義拉格朗日公式(3):
L(x,α,β)=f(x)+ikαigi(x)+jnαjhj(x)\begin{array}{l}L(x,\alpha,\beta)=f(x)+\sum_i^k\alpha_ig_i(x)+\sum_j^n\alpha_jh_j(x)\end{array}
其中,α,β\alpha,\beta是拉格朗日乘子,其實就是兩個參數。特別要求的α0\alpha\le0

對於上式,此時的g(x)和h(x)已經不再是約束條件了,所以g(x)的值可能大於0,h(x)的值可能不等於0。如果直接根據公式(3)計算最小值的話,可能會出現以下錯誤情況:當g(x)0g(x)\le0時,可以直接通過將α\alpha調整爲足夠大的正值,就可以使得函數L能取到最小值(負無窮)。爲了避免這種情況的發生,我們重新定義上述函數得到(公式4):
θp(x)=maxα,β:α0L(x,α,β)\theta_p(x)=\max_{\alpha,\beta:\alpha \ge0}L(x,\alpha,\beta)
注意:上式(4)等式右邊是關於α,β\alpha,\beta函數的最大化,當α,β\alpha,\beta確定之後,式子就只與xx有關了,因此這個是一個關於x的函數。

爲什麼要對公式3做最大化呢? 這原因有很多文章都沒有講清楚的,原因是要排除我們上面提到的錯誤情況的發生,下面來一步一步分析最大化拉格朗日函數的可行性:

  • 假設g和h函數不滿足約束條件的情況下,即gi(x)>0,hj(x)0g_i(x)\gt0,h_j(x)\neq0,那麼要最大化L,我們總可以通過調整α,β\alpha,\beta來使得θp(x)\theta_p(x)函數有最大值(正無窮)
  • 假設g和h函數滿足約束條件的情況下,即gi(x)0,hj(x)=0g_i(x)\le0,h_j(x)=0時,θp(x)=maxα,βL(x,α,β)=f(x)\theta_p(x)=\max_{\alpha,\beta}L(x,\alpha,\beta)=f(x),這剛好是我們想要的原始問題的目標函數。

因此可得出(公式5):
θp(x)={f(x)x滿足原始問題的約束條件其他\theta_p(x)= \begin{cases} f(x)& \text{x滿足原始問題的約束條件}\\ -\infty& \text{其他} \end{cases}
然後,在滿足約束條件下,我們將θp(x)\theta_p(x)最小化,就可以得到與原始問題求最優化是等價的:(公式6)
minxθp(x)=maxα,β:α0L(x,α,β)=minxf(x)\min_x\theta_p(x)=\max_{\alpha,\beta:\alpha \ge0}L(x,\alpha,\beta)=\min_x f(x)
最後,我們重新定義原始問題的最優值爲(公式7):
p=minxθp(x)p^*=\min_x\theta_p(x)

上述,應用拉格朗日方法就爲原始問題重新定義了一個無約束問題。理解了上面的過程,下面的內容就相對容易了。

對偶問題

定義關於α,β\alpha,\beta的函數(公式8):
θD(α,β)=minxL(x,α,β)\theta_D(\alpha,\beta)=\min_xL(x,\alpha,\beta)

注意:上式(8)等式右邊是關於 xx 函數的最小化,當 xx 確定之後,式子就只與α,β\alpha,\beta有關係了,因此這個是一個關於α,β\alpha,\beta的函數。那麼我們將θD(x)\theta_D(x)最大化,得到(公式9):
maxα,β:α0θD(α,β)=maxα,β:α0minxL(x,α,β)\max_{\alpha,\beta:\alpha \ge0}\theta_D(\alpha,\beta)=\max_{\alpha,\beta:\alpha \ge0}\min_xL(x,\alpha,\beta)
(公式9)就爲對偶問題,再把原始問題(公式6)放過來:
minxθp(x)=maxα,β:α0L(x,α,β)\min_x\theta_p(x)=\max_{\alpha,\beta:\alpha \ge0}L(x,\alpha,\beta)
兩者是對稱的,但是區別在於:

  • 原始問題是先固定L(x,α,β)L(x,\alpha,\beta)中的x,優化參數α,β\alpha,\beta,再優化最優值x;
  • 對偶問題是先固定L(x,α,β)L(x,\alpha,\beta)中的α,β\alpha,\beta,優化出最優值x,再確定參數α,β\alpha,\beta

最後,我們重新定義對偶問題的最優值爲(公式10):
d=maxα,β:α0θp(α,β)d^*=\max_{\alpha,\beta:\alpha \ge0}\theta_p(\alpha,\beta)

兩者關係

定理: 若原始問題與對偶問題都有最優值,則有:d=maxα,β:α0θp(α,β)minxθp(x)=pd^*=\max_{\alpha,\beta:\alpha \ge0}\theta_p(\alpha,\beta)\le \min_x\theta_p(x)=p^*
該定理的證明就不在這裏貼出來了,想了解的朋友可以去這篇文章看看

推理: 設分別是x,α,βx^*,\alpha^*,\beta^*原始問題和對偶問題的可行解,如果d=pd^*=p^*,那麼x,α,βx^*,\alpha^*,\beta^*分別是原始問題和對偶問題的最優解。

那麼,當原始問題和對偶問題的最優值相等:d=pd^*=p^*時,可以用求解對偶問題來求解原始問題,但是到底滿足什麼樣的條件才能使得d=pd^*=p^*呢?
這裏需要引入Karush-Kuhn-Tucher,KKT來解釋。

Karush Kuhn-Tucher條件,KKT

在數學上,KKT條件是在滿足一些有規則的條件下,一個非線性規劃(Nonlinear Programming)問題能有最優化解法的一個必要和充分條件。這是一個廣義化拉格朗日乘數的成果。

KKT條件專門用於解決不等式約束條件的,在上面,我們提到了對於單個等式約束條件問題求解最優的方法,可直接將等式約束通過拉格朗日換成無約束,但是對於含有不等式約束條件和等式約束條件的問題,則需要引入KKT條件。
minwf(x)s.t.  gi(x)0  (i=1,...,k)  hj(x)=0  (j=1,...,n)\min_wf(x)\\ s.t.\;g_i(x)\le 0\;(i=1,...,k)\\ \;h_j(x)=0\;(j=1,...,n)
將約束問題轉爲無約束問題的做法分兩步:

  1. 先把不等式約束條件轉化爲等式約束條件\to 引入 鬆弛變量,即KKT乘子
  2. 再把等式約束轉化爲無約束優化問題\to 引入拉格朗日乘子

舉個栗子

給定二元函數z=f(x,y)z=f(x,y)和附加條件g(x,y)0g(x,y)\le0和,爲尋找z=f(x,y)z=f(x,y)在附加條件下的極值點,給出相應的等高線圖:

不等式約束
上圖有兩種情況:

  • 如果最優解恰好在邊界上,那麼這個就可以通過拉格朗日來求解。
  • 如果最優解在陰影區內部,最優解不在邊界上,那該解一定是單純只考慮 f(x, y) 的最優解,也就是直接求f(x,y)=0f^\prime(x,y)=0的解,即對x,y變量求導數,得到:f(x,y)+λg(x,y)=0f^\prime(x,y)+\lambda g^\prime(x,y)=0因爲要取得最小值,所以目標函數的梯度一定是和約束曲線的梯度反向,因此得到λ0\lambda\ge0

因此,將上述情況合併,我們寫出拉格朗日函數:
L(x,y,λ)=f(x,y)+i=1nλigi(x,y)L(x,y,\lambda)=f(x,y)+\sum_{i=1}^n\lambda_ig_i(x,y)
在最優解x,y,λx^*,y^*, \lambda^*,應滿足以下條件:

()Lx(x,y,λ)=0()Ly(x,y,λ)=0()Lλ(x,y,λ)=0(a)λigi(x)=0()gi(x)0()αi0(拉格朗日條件)L^\prime_x(x^\ast,y^\ast,\lambda^\ast)=0\\ (拉格朗日條件)L^\prime_y(x^\ast,y^\ast,\lambda^\ast)=0\\ (拉格朗日條件)L^\prime_\lambda(x^\ast,y^\ast,\lambda^\ast)=0\\ (a條件)\lambda_ig_i(x^\ast)=0\\ (原始問題約束條件)g_i(x)\leq0\\ (梯度反向)\alpha_i^\ast\geq0\\
上面的(a條件)的由來是:在第二種情況下,當最優解落在函數內部,此時的約束條件已經不起作用了,因此需要消除該約束條件,故得到(a條件)。最優解在約束曲線上時,其表達式爲0,若不在某條約束曲線上,爲了使最後的結果爲0,其係數必須爲0,從而使不產生作用的曲線在計算時不產生作用。該條件也稱爲KKT的對偶互補條件。

到此爲止我們推出了KKT的所有條件。

原始-對偶問題轉換求解

定理: 對於原始問題和對偶問題,假設目標函數f(x)和不等式約束函數g(x)是凸函數等式約束函數h(x)是仿射函數,並且假設不等式約束g(x)是嚴格凸函數,即存在x,對所有i有gi(x)<0g_i(x)\lt0(滿足上述條件屬於爲凸優化問題),則存在x,α,βx^*,\alpha^*,\beta^*分別是原始問題和對偶問題的最優解,其滿足d=p=L(x,α,β)d^*=p^*=L(x^*,\alpha^*,\beta^*)

使得上述定理成立的充要條件是滿足下面的KKT條件:
Lx(x,α,β)=0Lα(x,α,β)=0Lβ(x,α,β)=0αigi(x)=0gi(x)0αi0hj(x)=0L^\prime_x(x^\ast,\alpha^\ast,\beta^\ast)=0\\ L^\prime_\alpha(x^\ast,\alpha^\ast,\beta^\ast)=0\\ L^\prime_\beta(x^\ast,\alpha^\ast,\beta^\ast)=0\\ \alpha_ig_i(x^\ast)=0\\g_i(x)\leq0\\\alpha_i^\ast\geq0\\h_j(x^\ast)=0\\
其中,前四條是拉格朗日乘數法需要滿足的條件:分別對各個變量的偏導數等於0,以及附加條件g(x)g(x)h(x)h(x)等於0(其中,h(x)h(x)在原始問題中約束條件已經爲0),後面三條是原始問題的約束條件

總結

終於梳理完了,呼~真的好累…

參考文章:
https://blog.csdn.net/fkyyly/article/details/86488582

https://blog.csdn.net/weixin_30430169/article/details/99104890?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

https://blog.csdn.net/dpengwang/article/details/88355744?utm_source=app

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章