1. 程式人生 > >拉格朗日乘子法 學習筆記

拉格朗日乘子法 學習筆記

radi 問題 極值 引入 大小 gem 技術分享 strong end

本來是想寫支持向量機的學習筆記的然後覺得內容太多了越寫越不想寫於是咕掉了
把寫好的拉格朗日乘子法發上來吧QwQ

拉格朗日乘子法

wiki鏈接

拉格朗日乘子法用來求解帶多個等式約束的情況下的多元函數極值。

它將一個有n個變量與m個約束條件的最優化問題轉換為一個解有n + m個變量的方程組的解的問題。

單約束

考慮平面上的情況:
\[ \max f(x,y)\s.t.\ g(x,y)=0 \]

引入Lagrange multiplier \(\lambda\) ,構造Lagrange function:
\[ F(x,y,\lambda) = f(x,y) - \lambda \cdot g(x,y) \]


則f的極值點是F的駐點,F的駐點也不一定是f的極值點。

intuition:f的最大值,意味著f值不會沿著某個g=0的方向上升。在\(g\equiv 0\)的方向上,\(\lambda\)不再影響,f最大值就是F最大值。從下面的contour圖可以直觀看出。

技術分享圖片

所以,要找g=0與f的contour方向相同的點,這個時候可能是f的最大值。(切點或者重合的一段contour)

註意到gradient是垂直於contour的,所以此時f與g的梯度方向相同或相反,大小不定,即滿足:\(\nabla_{x,y} f = \lambda \nabla_{x,y} g\)

可以發現:
\[ \nabla _{x,y,\lambda} F(x,y,\lambda) = 0 \]


等價於
\[ \begin{equation} \left\{ \begin{array}{l} \nabla_{x,y} f(x,y) = \lambda \nabla_{x,y} g(x,y) \g(x,y) = 0 \end{array} \right. \end{equation} \]
所以f的最大值點就是F的駐點啦!

多約束

\(\mathbf{x}\)為n維向量,有m個約束

lagrange function:
\[ F(\mathbf{x},\mathbf{\lambda}) = f(\mathbf{x}) - \sum_{i=1}^m\lambda_ig_i(\mathbf{x}) \]


此時取最大值時\(f\)的梯度為\(g_1, g_2, ... , g_m\)的梯度的線性組合

每個限制是一個超平面,\(g_i=0\)的可行方向空間就是垂直於\(\nabla g_i\) 的向量空間。考慮所有的限制後, 可行方向空間\(A\)就是所有\(\nabla g_i\)生成的空間\(S\)的正交補。

\(\nabla f(x) \in A^{\bot} = S\),所以就是線性組合啦!

同樣的:
\[ \nabla F = 0 \]
等價於
\[ \begin{equation} \left\{ \begin{array}{l} \nabla_{\mathbf{x}} f(\mathbf{x}) = \sum_{i=1}^m \lambda_i \nabla_{} g_i(\mathbf{x}) \g_i(\mathbf{x}) = 0, \ \forall i=1..m \end{array} \right. \end{equation} \]
\(\nabla F = 0\)得到的就是一個n+m個方程的方程組。

拉格朗日乘子法 學習筆記