拉格朗日對偶問題的理解
拉格朗日乘數法
拉格朗日乘數法本身就是幫助我們求函數的最值。在數學最優問題中,拉格朗日乘數法(以數學家約瑟夫·路易斯·拉格朗日命名)是一種尋找變量受一個或多個條件所限制的多元函數的極值的方法。
對於一個函數,我們要求其最值,只要對該函數求導得到所有極值點,然后根據要求的是最大值或最小值,從所有極值點中選擇最大或最小即可。
但是如果是有約束條件的函數,極值點可能不在約束的條件范圍內,也就是說,在約束范圍內,函數沒有導數為\(0\)的點。因此,拉個朗日乘數法就是解決該問題的。它告訴我們只需要對原來函數和約束條件變形,寫到一個式子中,后只要對該式子進行求極值,求最值就可以得到最終要的結果了。
\[\begin{align} min\;&f_0(\boldsymbol{x}),\boldsymbol{x}\in R^n\\ s.t.\; &f_i(\boldsymbol{x})\le0,\text{其中}i=1,2,3,\dots, m \end{align} \]
拉個朗日乘數法也就是可以將上述問題轉換為一下問題求解:
\[\begin{align} L(\boldsymbol{x},\boldsymbol{\lambda})=f_0(\boldsymbol{x})+\sum\lambda_if_i(\boldsymbol{x}) \end{align} \]
其中,\(f_0(\boldsymbol{x})\)叫做目標函數,\(s.t. f_i(\boldsymbol{x})\le0\),叫做約束條件。\(\boldsymbol{x}\)的取值范圍叫做可行域。\(L(\boldsymbol{x},\boldsymbol{\lambda})\)叫做拉格朗日函數。
拉格朗日乘數法的直觀理解
對於目標函數\(f(\boldsymbol{x},\boldsymbol{y})\),求其在約束條件\(\boldsymbol{y}=g(\boldsymbol{x})\)下的最小值。根據拉格朗日乘數法可以得到:
\[\begin{align} L(\boldsymbol{x},\boldsymbol{y},\lambda )=f(\boldsymbol{x},\boldsymbol{y})+\lambda(\boldsymbol{y}-g(\boldsymbol{x})) \end{align} \]
求\(\nabla L(\boldsymbol{x},\boldsymbol{y},\lambda)=0\)得:
\[\begin{align}\left\{\begin{matrix} \frac{\partial f(\boldsymbol{x},\boldsymbol{y})}{\partial \boldsymbol{x}} +\lambda \frac{\partial(\boldsymbol{y}-g(\boldsymbol{x}))}{\partial \boldsymbol{x}}=0\\ \frac{\partial f(\boldsymbol{x},\boldsymbol{y})}{\partial \boldsymbol{y}} +\lambda \frac{\partial(\boldsymbol{y}-g(\boldsymbol{x}))}{\partial \boldsymbol{y}}=0\\ \end{matrix}\right. \end{align} \]
我們結合圖像來直觀理解,假設目標函數\(f(\boldsymbol{x},\boldsymbol{y})\)的梯度的等高線是下圖中的藍線,約束條件\(\boldsymbol{y}=g(\boldsymbol{x})\)的梯度圖像為下圖中的橙線。從圖像上看,要\(\nabla L(\boldsymbol{x},\boldsymbol{y})=0\),就需要兩條線相切,此時可以通過調整\(\lambda\)參數來使得兩者相加的梯度等於\(0\)。
再結合式(5),先將某一點的梯度方向分解為\(x\)軸方向和\(y\)軸方向,\(\frac{\partial f(\boldsymbol{x},\boldsymbol{y})}{\partial \boldsymbol{x}} +\lambda \frac{\partial(\boldsymbol{y}-g(\boldsymbol{x}))}{\partial \boldsymbol{x}}=0\),相當於將\(x\)軸方向的梯度調整到\(0\)。\(\frac{\partial f(\boldsymbol{x},\boldsymbol{y})}{\partial \boldsymbol{y}} +\lambda \frac{\partial(\boldsymbol{y}-g(\boldsymbol{x}))}{\partial \boldsymbol{y}}=0\)相當於將\(y\)軸方向的梯度調整到\(0\),因為兩個方向的公用一個參數\(\lambda\),無法改變約束條件梯度的方向,只能改變其大小。所以只有當目標函數梯度方向和約束條件的梯度方向在相同或相反方向時,才能使得兩者梯度和為\(0\)。
上述只有一個約束條件,當有多個約束條件時:
\[\begin{align} min\; &f(\boldsymbol{x}), \boldsymbol{x}\in R^n\\ s.t.\; &g_i(\boldsymbol{x})=\boldsymbol{a_i}^T\cdot \boldsymbol{x}+b_i \le0 \text{其中}i=1,2,3,\dots,m,\; \boldsymbol{a_i}\in R^n, b_i \in R \end{align} \]
由拉格朗日乘數法得:
\[\begin{align} &L(\boldsymbol{x},\boldsymbol{\lambda})=f(\boldsymbol{x})+\sum_{i=1}^m\lambda_i g_i(\boldsymbol{x})\\ \end{align} \]
求\(\nabla L(\boldsymbol{x},\boldsymbol{\lambda})=0\)得:
\[\begin{align} \frac{\partial f(\boldsymbol{x})}{\partial x} +\sum_{i=1}^m \lambda_i \boldsymbol{a_i^T} =0\\ \frac{\partial f(\boldsymbol{x})}{\partial x}=-\sum_{i=1}^m \lambda_i \boldsymbol{a_i^T} \end{align} \]
假設\(n=2, m=5\),可得到其對應大概圖像為:
其中陰影部分為約束條件所圍成的部分。可以看到,最值在\(x^*\)的位置,而約束條件中有作用的只有兩個,即\(g_\alpha(\boldsymbol{x})\)和\(g_\beta(\boldsymbol{x})\)。其他三個約束條件都沒有起作用。也就是說:
\[\begin{align} g_\alpha(\boldsymbol{x*})=g_\beta(\boldsymbol{x*})=0&& \text{其他}g_i(\boldsymbol{x*})<0\\ \lambda_\alpha \nabla g_\alpha(\boldsymbol{x*})+\lambda_\beta \nabla g_\beta(\boldsymbol{x*})=-\nabla f(\boldsymbol{x}) \Rightarrow \lambda_\alpha,\lambda_\beta\ne 0&& \lambda_i\cdot \nabla g_i(x)=0 \Rightarrow \lambda_i=0(i\ne \alpha, \beta) \end{align} \]
從圖像上看,就是除了\(g_\alpha(\boldsymbol x)\)和\(g_\beta(x)\)的梯度合成方向可以與\(f(\boldsymbol x^*)\)的梯度方向相反,其他約束條件的梯度所合成的方向,都無法做到。因此就需要使得其\(\lambda_i=0\)。這里有一個前提條件,即\(\forall \lambda_i\ge 0\)。且
\[\begin{align} \left\{ \begin{matrix} \lambda_i =0 &\text{那么對應的約束條件}g_i(x)\text{是松弛的}\\ \lambda_i >0 &\text{那么對應的約束條件}g_i(x)\text{是緊致的} \end{matrix} \right. \end{align} \]
當最值在所有約束條件所圈定的可行域范圍內時,所有的約束條件都是松弛的。
拉格朗日乘數法的存在的問題
拉格朗日乘數法找出來的可能是極值點和鞍點,即當約束條件和目標函數有多個切點時,就會有多個解。
因此對於凸優化問題,其極值就等於最值,這時就可以直接使用拉格朗日乘數法來求解。
凸集與非凸集
若集合\(C\)滿足:
\[\begin{align} \forall \boldsymbol{x_1, x_2} \in C, 0\le \theta\le 1\Rightarrow \theta\cdot \boldsymbol{x_1} + (1-\theta) \cdot x_2 \in C \end{align} \]
則集合\(C\)是凸集。從圖像上看如下(左邊為非凸集,右邊為凸集):
仿射集一定是凸集,仿射集定義為\(C=\{x|W^T\cdot \boldsymbol x + b=0\}\)。其中\(\boldsymbol{x} \in R^n, W\in R^n, b\in R\)。且仿射集的交也是凸集。
半空間也是凸集,半空見的定義為\(C=\{x|W^T\cdot \boldsymbol x + b\le0\}\)。其中\(\boldsymbol{x} \in R^n, W\in R^n, b\in R\)。且半空間的交也是凸集。
凸函數和凹函數
若函數\(f(x)\)滿足:\(f(\frac{x_1+x_2}{2})\le \frac{f(x_1)+f(x_2)}{2}\),則稱該函數為凸函數。同理若函數\(f(x)\)滿足:\(f(\frac{x_1+x_2}{2})\ge \frac{f(x_1)+f(x_2)}{2}\),則稱該函數為凹函數。(左圖為凸函數,右圖為凹函數)
凸優化問題
對於一個函數\(f(x)\),若該函數是一個凸函數,且可行域是一個凸集,那么該問題就是一個凸優化問題。
拉格朗日對偶問題
對於非凸優化問題,我們可以用拉格朗日對偶問題來求解。
\[\begin{align} \text{原問題:}min\; &f_0(\boldsymbol{x}),\boldsymbol{x}\in R^n\\ s.t.\;&f_i(\boldsymbol{x})\le 0, \text{其中}i=1,2,3,\dots,m\\ &h_i(\boldsymbol{x})=0,\text{其中}i=1,2,3,\dots,q \end{align} \]
由拉格朗日乘數法得:
\[\begin{align} L(\boldsymbol{x,\lambda, \nu})=f_0(\boldsymbol x)+\sum \lambda_i f_i(\boldsymbol x) + \sum \nu_i h_i(\boldsymbol{x}) \end{align} \]
其又可轉化為以下形式:
\[\begin{align} \text{原問題:}&min_{\boldsymbol{x}}max_{\boldsymbol{\lambda, \nu}} L(\boldsymbol{x, \lambda, \nu})\\ s.t.\; &\boldsymbol{\lambda}\ge \boldsymbol{0} \end{align} \]
即先將\(\boldsymbol{x}\)當作常數,把\(\boldsymbol{\lambda, \nu}\)當作變量,去求拉格朗日函數的最大值。然后在把\(\boldsymbol{x}\)當作變量從中找最小值。
證明:
從式(14),(15),(16)轉換為式(18)后,\(\boldsymbol{x}\)的可行域變為了任意值。再對\(\boldsymbol{x}\)分情況討論:
當\(\boldsymbol{x}\)不在式(14),(15),(16)的可行域內時:
\[\begin{align} max_{\boldsymbol{\lambda,\nu}}L(\boldsymbol{x,\lambda, \nu}) =f_0(\boldsymbol x)+\color{blue}{\sum \lambda_i f_i(\boldsymbol x)} + \color{red}{\sum \nu_i h_i(\boldsymbol{x})} \color{black}{=f_0(\boldsymbol x)}+\color{blue}{\infin}+\color{red}{\infin}\color{black}{=\infin} \end{align} \]
其中藍色項中,由於\(\boldsymbol x\)不在式(14)的可行域內,即\(\lambda\ge 0,f_i(\boldsymbol x)>0\)。同理對於紅色項\(h_i(\boldsymbol x)\ne 0\)。因此兩項的最大值都是無窮大。
當\(\boldsymbol{x}\)在式(14),(15),(16)的可行域內時:
\[\begin{align} max_{\boldsymbol{\lambda,\nu}}L(\boldsymbol{x,\lambda, \nu}) =f_0(\boldsymbol x)+\color{blue}{\sum \lambda_i f_i(\boldsymbol x)} + \color{red}{\sum \nu_i h_i(\boldsymbol{x})} \color{black}{=f_0(\boldsymbol x)}+\color{blue}{0}+\color{red}{0}\color{black}{=f_0(\boldsymbol x)} \end{align} \]
其中藍色項中,由於\(\boldsymbol x\)在式(14)的可行域內,即\(\lambda\ge 0,f_i(\boldsymbol x)\le 0\)。同理對於紅色項\(h_i(\boldsymbol x)= 0\)。因此兩項的最大值都是0。
而\(min_{\boldsymbol{x}}max_{\boldsymbol{\lambda, \nu}} L(\boldsymbol{x, \lambda, \nu})=min_x(\infin, f_0(\boldsymbol x))=min_x f_0(\boldsymbol x)\)。即\(\boldsymbol x\)在可行域內時\(f_0(\boldsymbol x)\)的最小值。
對偶問題
式(18)又可表示為:
\[\begin{align} \text{對偶問題:}&max_{\boldsymbol{\lambda, \nu}} min_{\boldsymbol{x}}L(\boldsymbol{x,\lambda, \nu})\\ s.t.\; &\boldsymbol{\lambda \ge 0} \end{align} \]
即先將\(\boldsymbol{\lambda, \nu}\)當作常數,把\(\boldsymbol{x}\)當作變量去求拉格朗日函數的最小值,再把\(\boldsymbol{\lambda, \nu}\)當作變量,去求最大值。
對偶問題的一個特性就是,無論原問題是什么,只要換成對偶問題,它都是一個凸優化問題。
證明
假設我們找到當\(\boldsymbol{x=x^*}\)時,此時\(min_{\boldsymbol{x}}L(\boldsymbol{x,\lambda, \nu})=L(\boldsymbol{x^*, \lambda, \nu})\)。所以:
\[\begin{align} max_{\boldsymbol{\lambda, \nu}} min_{\boldsymbol{x}}L(\boldsymbol{x,\lambda, \nu}) =max_{\boldsymbol{\lambda, \nu}}\color{gray}{f_0(x^*)}\color{black}{+\sum \lambda_i} \color{gray}{f_i(x^*)}\color{black} {+\sum \nu_i}\color{gray}{h_i(x^*)} \end{align} \]
其中灰色部分都是常數,因此整個\(\color{gray}{f_0(x^*)}\color{black}{+\sum \lambda_i} \color{gray}{f_i(x^*)}\color{black} {+\sum \nu_i}\color{gray}{h_i(x^*)}\)為關於參數\(\boldsymbol{\lambda, \nu}\)的一條直線。也就是說它即是凸函數,又是凹函數。在約束條件中,要求\(\boldsymbol{\lambda}\ge 0\),即可行域是一個半空間,前面說過半空間一定是凸集。因此對偶問題一定是凸優化問題。
原問題的解與對偶問題的解的關系
對於以下原問題和對偶問題:
\[\begin{align} \text{原問題:}&min_{\boldsymbol{x}}max_{\boldsymbol{\lambda, \nu}} L(\boldsymbol{x, \lambda, \nu})\\ s.t.\; &\boldsymbol{\lambda}\ge \boldsymbol{0} \end{align} \]
\[\begin{align} \text{對偶問題:}&max_{\boldsymbol{\lambda, \nu}} min_{\boldsymbol{x}}L(\boldsymbol{x,\lambda, \nu})\\ s.t.\; &\boldsymbol{\lambda \ge 0} \end{align} \]
可以容易得到:
\[\begin{align} max_{\boldsymbol{\lambda, \nu}}L(\boldsymbol{x, \lambda, \nu})\ge L(\boldsymbol{x, \lambda, \nu})\ge min_xL(\boldsymbol{x, \lambda, \nu}) \end{align} \]
也就是說無論\(\boldsymbol{x,\lambda, \nu}\)取何值,以下不等式恆成立:
\[\begin{align} A(\boldsymbol{x})=max_{\boldsymbol{\lambda, \nu}}L(\boldsymbol{x, \lambda, \nu})\ge min_xL(\boldsymbol{x, \lambda, \nu})=I(\boldsymbol{\lambda, \nu}) \end{align} \]
因此:
\[\begin{align} min_{\boldsymbol{x}}\; A(\boldsymbol{x}) \ge max_{\boldsymbol{\lambda, \nu}}\; I(\boldsymbol{\lambda, \nu}) \end{align} \]
即原問題的解大於等於對偶問題的解。
解的關系的直觀理解
對於以下原問題和對偶問題:
\[\begin{align} \text{原問題:}min\; &f_0(\boldsymbol{x}),\boldsymbol{x}\in R^n\\ s.t.\;&f_i(\boldsymbol{x})\le 0, \text{其中}i=1,2,3,\dots,m\\ &h_i(\boldsymbol{x})=0,\text{其中}i=1,2,3,\dots,q \end{align} \]
\[\begin{align} \text{對偶問題:}&max_{\boldsymbol{\lambda, \nu}} min_{\boldsymbol{x}}L(\boldsymbol{x,\lambda, \nu})\\ s.t.\; &\boldsymbol{\lambda \ge 0} \end{align} \]
其中:
\[\begin{align} L(\boldsymbol{x,\lambda, \nu})=f_0(\boldsymbol x)+\sum \lambda_i f_i(\boldsymbol x) + \color{gray}{\sum \nu_i h_i(\boldsymbol{x})} \end{align} \]
其中因為\(h_i(\boldsymbol{x})=0\),所以灰色部分等於\(0\),可以不考慮。將上式簡化為矩陣表示:
\[\begin{align} L(\boldsymbol{x, \lambda, \nu})=t+\boldsymbol{\lambda^T\cdot u} \end{align} \]
式(39)在原問題中的可行域為:
\[\begin{align} G_1=\{(t, \boldsymbol{u})|t=f_0(\boldsymbol{x}), u_i=f_i(\boldsymbol{x}), \color{red}{\boldsymbol{x} \in D}\color{black}{\}}\\ D=\left\{x\left| \begin{matrix} f_i(\boldsymbol{x})\le0, \text{其中}i=1,2,3,\dots,m\\ h_i(\boldsymbol{x})=0,\text{其中}i=1,2,3,\dots,q \end{matrix} \right.\right\} \end{align} \]
因此原問題又可描述為:
\[\begin{align} min_{\boldsymbol{x}} \{t|(t,\boldsymbol{u})\in G_1, \color{gray}{\boldsymbol{u\le 0}}\color{black}{\}} \end{align} \]
式(39)在對偶問題中的可行域為:
\[\begin{align} G_2=\{(t, \boldsymbol{u})|t=f_0(\boldsymbol{x}), u_i=f_i(\boldsymbol{x}), \color{red}{\boldsymbol{x} \in R^n}\color{black}{\}}\\ \end{align} \]
因此對偶問題又可描述為:
\[\begin{align} max_{\boldsymbol{\lambda}}min_{\boldsymbol{x}}\{t+\boldsymbol{\lambda^T}\cdot \boldsymbol{u}| (t,\boldsymbol{u}\in G_2, \color{red}{ \lambda\ge 0 }\color{black}{\}} \end{align} \]
用圖像來表示上述兩個問題:
對於上圖,\(G_2\)為整個實線所圍成的整個區域,而\(G_1\)僅為\(t\)軸的左半邊部分。因此\(P^*\)在\(t\)軸上的位置,表示為原問題的解的大小。
對於對偶問題,第一步先將\(\lambda\)看作常數,即直線的斜率不變,然后上下平移選擇一條直線,該直線的截距最小,且與\(G_2\)相交(也就是上圖綠色的線)。
由於:
\[\begin{align} ax+by=c\\ \frac{a}{b}x+y=\frac{c}{a} \end{align} \]
\(\frac{c}{a}=y+\frac{a}{b}x\)就是直線的截距,因此\(t+\boldsymbol{\lambda^T\cdot u}\)就是函數的截距。
第二步在保證相切的情況下,改變斜率的大小,使得截距最大。因此對偶問題的最優解為\(D^*\),如上圖所示。
可以看出,原問題的解是大於等於對偶問題的解的。此時我們把原問題和對偶問題叫做弱對偶。只有當\(P^*\)和\(D^*\)相等的時候,才稱原問題和對偶問題為強對偶,此時可行域的范圍是一個凸集。
Slater條件
一個問題是凸優化問題,它不一定是強對偶關系,只有這個凸優化問題滿足Slater條件時,該問題才是強對偶的。
對於一個凸優化問題:
\[\begin{align} \text{原問題:}min\; &f_0(\boldsymbol{x}),\boldsymbol{x}\in R^n\\ s.t.\;&f_i(\boldsymbol{x})\le 0, \text{其中}i=1,2,3,\dots,m\\ &h_i(\boldsymbol{x})=0,\text{其中}i=1,2,3,\dots,q \end{align} \]
當其滿足以下條件(Slater條件):
\[\begin{align} &\text{存在一個點} x\in relint\; D\\ &\text{使得}f_i(x)<0,\text{其中}i=1,2,3...m,A\boldsymbol{x}=b\\ &(relint\;D\text{表示可行域}D\text{的相對內部,也就是不能在邊界上}) \end{align} \]
則該凸優化問題時強對偶的。
注:強對偶的不一定滿足Slater條件
KKT條件
只有某個問題是強對偶的,那么它一定滿足KKT條件。同樣反過來就不一定。
對於一個凸優化問題:
\[\begin{align} \text{原問題:}min\; &f_0(\boldsymbol{x}),\boldsymbol{x}\in R^n\\ s.t.\;&f_i(\boldsymbol{x})\le 0, \text{其中}i=1,2,3,\dots,m\\ &h_i(\boldsymbol{x})=0,\text{其中}i=1,2,3,\dots,q\\ \end{align} \]
由拉格朗日乘數法得:
\[\begin{align} L(\boldsymbol{x,\lambda, \nu})=f_0(\boldsymbol x)+\sum \lambda_i f_i(\boldsymbol x) + \sum \nu_i h_i(\boldsymbol{x}) \end{align} \]
當其是強對偶問題時,它一定滿足以下條件(KKT條件):
\[\begin{align} \left.\begin{matrix} f_i(x)\le0\\ h_i(x)=0\\ \end{matrix}\right\} \text{ 原問題可行條件}\\\\ \left.\begin{matrix} \nabla_xL(\boldsymbol{x,\lambda,\nu})=0\\ \lambda\ge0\\ \end{matrix}\right\} \text{ 對偶問題可行條件}\\\\ \left.\begin{matrix} \lambda_if_i(\boldsymbol{x})=0 \end{matrix}\right\} \text{ 互補松弛條件}\\ \end{align} \]
前兩種條件,分別是原問題和對偶問題成立的可行條件,最后一個互補松弛條件是為了同時滿足小節拉格朗日乘數法的直觀理解中式\(13\),以此同時表示緊致情況和松弛情況。
推薦詳細講解視頻:https://www.bilibili.com/video/BV1HP4y1Y79e