拉格朗日乘數法
等式約束
-
作為一種優化算法,拉格朗日乘子法主要用於解決約束優化問題,它的基本思想就是通過引入拉格朗日乘子來將含有n個變量和k個約束條件的約束優化問題轉化為含有(n+k)個變量的無約束優化問題。拉格朗日乘子背后的數學意義是其為約束方程梯度線性組合中每個向量的系數
-
以上是從別人的博客中摘過來的, 通俗地理解就是拉格朗日乘數法將目標優化函數與約束條件合並成了一個函數,這個函數沒有約束,下面舉一個例子講解,喚醒高數學過的拉格朗日
- 這里例子也是從別人博客摘過來的
- 目標優化函數: \(f(x, y, z)=8xyz\)
- 約束條件: \(s.t.{{x^2}\over{a^2}}+{{y^2}\over{b^2}}+{{z^2}\over{c^2}}=1\)
- 使用拉格朗日乘數法的思想, 將多個式子轉變成為一個沒有約束的式子
- \(F(x, y, z, \lambda)=f(x, y, z)+\lambda[{{x^2}\over{a^2}}+{{y^2}\over{b^2}}+{{z^2}\over{c^2}}-1]\)
- 讓\(F\)分別對\(x\), \(y\), \(z\), \(\lambda\)求偏導, 令他們的偏導為0
- \({{{\partial}F}\over{\partial}x}=8yz+{{2\lambda{x}}\over{a^2}}=0\) (1)
- \({{{\partial}F}\over{\partial}y}=8xz+{{2\lambda{y}}\over{b^2}}=0\) (2)
- \({{{\partial}F}\over{\partial}z}=8yz+{{2\lambda{z}}\over{c^2}}=0\) (3)
- \({{{\partial}F}\over{\partial}{\lambda}}={{x^2}\over{a^2}}+{{y^2}\over{b^2}}+{{z^2}\over{c^2}}-1=0\) (4)
- 聯立方程求出最有的\(x\), \(y\), \(z\)
不等式約束與拉格朗日對偶式
-
拉格朗日乘數法的核心思想是不變的, 不管是等式約束還是不等式約束, 但是在不等式約束使用拉格朗日乘數法的前提是不等式約束符合KKT條件, 這個不等式約束在高等數學中沒有講過
-
例子
-
目標優化函數: \(minf(x)\)
-
約束條件(不是這種形式的要轉換成這種形式)
- \(g(x)<=0\)
- \(h(x)=0\)
-
構造拉格朗日\(L(x, a, b)=f(x)+ag(x)+bh(x)\), 其中\(a>=0\), \(g(x)<=0\), \(h(x)=0\)
-
我們要求的是\(minf(x)\), 現在就是見證奇跡的時刻了
- 因為\(h(x)=0\), 所以\(L(x, a, b)=f(x)+ag(x)\)
- 因為\(a>=0\), \(g(x)<=0\), 所以\(ag(x)<=0\), 所以\(maxL(x, a, b)=f(x)\), 因為\(ag(x)<=0\), 所以要想\(L(x, a, b)\)最大, 則需要讓\(ag(x)=0\), 這個時候右側就只剩下了\(f(x)\), 所以\(max_aL(x, a, b)=f(x)\), 那么優化目標\(minf(x)\)就成了\(min_xmax_aL(x, a, b)\), 注意\(max_a\)是對a這個拉格朗日因子變量求\(L(x, a, b)\)求最大值
-
除此之外, 因為不等式約束滿足了KKT(要求h(x)=0, a(g(x))=0), 所有有這個結論, \(min_xmax_aL(x, a, b)=max_amin_xL(x, a, b)=minf(x)\), 現在來推一遍
- \(max_amin_xL(x, a, b)=max_amin_x(f(x))+max_amin_x(ag(x))\)
- 因為\(a\)是在拉格朗日中加入的變量, \(f(x)\)與a沒有任何關系, 所有\(max_amin_x(f(x))=min_x(f(x))\)
- 所有\(max_amin_xL(x, a, b)=min_x(f(x))+max_amin_x(ag(x))\)
- 進一步的, \(max_amin_xL(x, a, b)=min_x(f(x))+max_amin_x(ag(x))=min_x(f(x))+max_a(0)\)
- 我們知道
\[ag(x)=\begin{cases} 0 & if & a=0 & or & g(x)=0 \\ -\infty & otherwises \end{cases} \]
- 如果\(minag(x)\)取到\(\infty\)則\(maxmin(ag(x))\)為負數, 但是如果\(minag(x)取0\), 則\(maxmin(ag(x))\)為0, 這個才是最大值
- 我們知道
- 所以在進一步的, \(max_amin_xL(x, a, b)=min_x(f(x))+max_amin_x(ag(x))=min_x(f(x))+max_a(0)=min_x(f(x))\)得到KKT結論
- 以上就是對偶式推導(SVM需要對偶式, 如果不適用求解困難)
作用
+ 將原始的問題轉換成可以使用SMO算法的形式, 使用SMO算法求解方程 -
