如何用计算机解kkt条件,【直观详解】拉格朗日乘法和KKT条件
【閱讀時間】8min - 10mun
【內容簡介】直觀的解讀了什么是拉格朗日乘子法,以及如何求解拉格朗日方程,并且給出幾個直觀的例子,針對不等式約束解讀了KKT條件的必要條件和充分條件
What & Why
拉格朗日乘法(Lagrange multiplier)是一種在最優化的問題中尋找多元函數在其變量受到一個或多個條件的相等約束時的求局部極值的方法。這種方法可以將一個有 n 個變量和 k 個約束條件的最優化問題轉換為一個解有 n+k 個變量的方程組的解的問題
考慮一個最優化問題
$$
\operatorname*{max}_{x,y} f(x,y) \qquad s.t.\;\; g(x,y)=c
$$
為了求 $x$ 和 $y$ ,引入一個新的變量 $\lambda$ 稱為拉格朗日乘數,再引入朗格朗日函數的極值
$$
\mathcal{L}(x,y,\lambda)=f(x,y)-\lambda \cdot \bigl( g(x,y) - c\bigl) \tag 1
$$
紅線表示 $g(x,y) = c$ ,藍線是 $f(x,y)$ 的等高線,所有箭頭表示梯度下降最快的方向。圖中紅線與等高線相切的位置就是待求的極大值
How
那么如何求這個極值點呢?
單約束
對(1)式直接求微分,并令其為零,計算出鞍點
$$
\nabla_{x,y,\lambda} \mathcal{L}(x,y,\lambda) = 0
$$
有三個未知數,所以需要3個方程。求 $\lambda$ 的偏微分有 $\nabla_{\lambda} \mathcal{L}(x,y,\lambda) = 0 \implies g(x,y)=0$,則總結得
$$
\nabla_{x,y,\lambda} \mathcal{L}(x,y,\lambda) = 0 \iff
\begin{cases}
\nabla_{x,y} f(x,y) = \lambda \nabla_{x,y} g(x,y) \\
g(x,y)=0
\end{cases}
$$
例子1
設一個具體的例子,我們需要求下列問題
$$
\operatorname*{max}_{x,y} f(x,y) = x^2y \qquad s.t.\;\; g(x,y): x^2+y^2-3=0
$$
只有一個約束,使用一個乘子,設為 $\lambda$,列出拉格朗日函數
$$
\mathcal{L}(x,y,\lambda)=f(x,y)-\lambda \cdot \bigl( g(x,y) - c\bigl) = x^2y + \lambda(x^2+y^2-3)
$$
接下來求解上式,分別對三個待求量偏微分
$$
\begin{align}
\nabla_{x,y,\lambda} \mathcal{L}(x,y,\lambda) & = \left( \frac{\partial \mathcal{L}}{\partial x},\frac{\partial \mathcal{L}}{\partial y},\frac{\partial \mathcal{L}}{\partial \lambda}\right)\\
& = (2xy + 2\lambda x, x^2 + 2\lambda y, x^2 + y^2 - 3)
\end{align}
$$
令偏微分分別等于0,得到
$$
\nabla_{x,y,\lambda} \mathcal{L}(x,y,\lambda) = 0 \iff
\begin{cases}
2xy+2\lambda x = 0 \\
x^2 + 2\lambda y = 0 \\
x^2 + y^2 - 3 = 0
\end{cases}
\iff
\begin{cases}
x(y + \lambda) = 0 & (i)\\
x^2 = -2\lambda y & (ii)\\
x^2 +y^2 = 3 & (iii)
\end{cases}
$$
根據上式,我們可以解得 $\mathcal{L}$:
$$
(\pm \sqrt{2},1,-1 ); (\pm \sqrt{2},-1,1 );(0,\pm \sqrt{3},0)
$$
根據幾個不同的解帶入 $f(x,y)$ 得到,2,-2,0,也就是我們需要的最大值,最小值,對應的直觀圖像解釋如下圖所示(非常直觀的展現約束和等高線的含義)
例子2
關于拉格朗日乘子法的應用,有一個十分著名的:求離散概率分布 $p_1,p_2,\cdots,p_n$ 的最大信息熵
$$
f(p1,p2,\cdots,p_n) = - \sum_{j=1}^n p_j log_2{p_j} \\
s.t. \quad g(p1,p2,\cdots,p_n) = \sum_{k=1}^n p_k = 1 \text{(概率和為1)}
$$
單約束問題,引入一個乘子 $\lambda$ ,對于 $k \in [1,n]$ ,要求
$$
\frac{\partial}{\partial p_k} (f + \lambda(g - 1)) = 0
$$
將 $f$ 和 $g$ 帶入有
$$
\frac{\partial}{\partial p_k} \left( -\sum_{k=1}^np_klog_2{p_k} + \lambda (\sum_{k=1}^n p_k - 1)\right) = 0
$$
計算這 n 個等式的偏微分,我們可以得到:
$$
-\left( \frac{1}{\ln(2)} + log_2p_k \right) + \lambda = 0
$$
這說明所有的 $p_i$ 都相等,所以得到 $p_k = \frac{1}{n}$
我們可以得到一個結論是:均勻分布的信息熵是最大的
多約束
既然可以解決單約束,繼續思考一下多約束情況的直觀表現,假設我們的約束是兩條線,如下圖所示
和單約束的解決方法類似,我們畫出等高線圖,目的就是在約束線上找到一個點可以和等高線相切,所得的值實在約束范圍內的最大值或者最小值,直觀表示如下圖
解算方法是講單約束的擴展到多約束的情況,較為類似,可舉一反三
KKT條件
已經解決的在等式約束條件下的求函數極值的問題,那不等式約束條件下,應該如何解決呢?
這就需要引出KKT條件(Karush-Kuhn-Tucker Conditions),它是在滿足一些有規則的條件下,一個非線性規劃問題能有最優化解法的一個必要和充分條件
考慮以下非線性最優化問題,含有 $m$ 個不等式約束,$l$ 個等式約束
$$
\operatorname*{min}_{x}f(x) \qquad s.t. \; g_i(x) \leqslant 0,\; h_j(x) =0
$$
必要條件
假設 $f,g_i,h_j$ 三個函數為實數集映射,再者,他們都在 $x^$ 這點連續可微,如果 $x^$ 是一個局部極值,那么將會存在一組稱為乘子的常數 $\lambda \geqslant 0,\mu_i \geqslant0, \nu_j$ 令
$$
\lambda + \sum_{i=1}^m \mu_i + \sum_{j=1}^l |\nu_i| \gt 0, \\
\lambda \nabla f(x^*) + \sum_{i=1}^m \mu_i \nabla g_i(x^*) + \sum_{j=1}^l \nu_i \nabla h_j(x^*) = 0, \\
\mu_i g_i(x^*) =0 \; \text{for all} \; i=1,\ldots,m
$$
這里有一些正則性條件或約束規范能保證解法不是退化的(比如$\lambda$為0),詳見
充分條件
假設 $f,g_i$ 為凸函數,$h_j$ 函數是仿射函數(平移變換),假設有一個可行點 $x^*$,如果有常數 $\mu_i \geqslant 0$ 及 $\nu_j$ 滿足
$$
\nabla f(x^*) + \sum_{i=1}^m \mu_i \nabla g_i(x^*) + \sum_{j=1}^l \nu_i \nabla h_j(x^*) = 0 \\
\mu_i g_i(x^*) =0 \; \text{for all} \; i=1,\ldots,m
$$
那么 $x^*$ 就是全局極小值
總結
總的來說,拉格朗日乘子法是一個工具(手段或方法),來解決在有約束情況的求函數極值的問題
總結
以上是生活随笔為你收集整理的如何用计算机解kkt条件,【直观详解】拉格朗日乘法和KKT条件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言编程队名,比赛团队队名及口号
- 下一篇: word选中段尾不选回车符