機器學習中的數學(5)——拉格朗日乘子法和KKT條件
引言
本篇文章將詳解帶有約束條件的最優化問題,約束條件分為等式約束與不等式約束,對於等式約束的優化問題,可以直接應用拉格朗日乘子法去求取最優值;對於含有不等式約束的優化問題,可以轉化為在滿足 KKT 約束條件下應用拉格朗日乘子法求解。拉格朗日求得的並不一定是最優解,只有在凸優化的情況下,才能保證得到的是最優解,所以本文稱拉格朗日乘子法得到的為可行解,其實就是區域性極小值,接下來從無約束優化開始一一講解。
本篇文章將詳解帶有約束條件的最優化問題,約束條件分為等式約束與不等式約束,對於等式約束的優化問題,可以直接應用拉格朗日乘子法去求取最優值;對於含有不等式約束的優化問題,可以轉化為在滿足 KKT 約束條件下應用拉格朗日乘子法求解。拉格朗日求得的並不一定是最優解,只有在凸優化的情況下,才能保證得到的是最優解,所以本文稱拉格朗日乘子法得到的為可行解,其實就是區域性極小值,接下來從無約束優化開始一一講解。
無約束優化
首先考慮一個不帶任何約束的優化問題,對於變數x∈RN 的函式f(x) ,無約束優化問題如下:
minxf(x)
該問題很好解,根據 Fermat 定理,直接找到使目標函式得0的點即可。即∇xf(x)=0 如果沒有解析解的話,可以使用梯度下降或牛頓方法等迭代的手段來使x 沿負梯度方向逐步逼近極小值點。
首先考慮一個不帶任何約束的優化問題,對於變數
等式約束優化
當目標函式加上約束條件之後,問題就變成如下形式:
minxf(x)s.t.hi(x)=0,i=1,2,...,m
當目標函式加上約束條件之後,問題就變成如下形式:
約束條件會將解的範圍限定在一個可行域,此時不一定能找到使得∇xf(x) 為0 的點,只需找到在可行域內使得 f(x) 取最小的值即可,常用的方法即為拉格朗日乘子法,該方法首先引入Lagrange
Multiplier α∈Rm ,構建
Lagrangian 如下:
L(x,α)=f(x)+∑i=1nαihi(x)
求解方法如下:首先對 Lagrangian 關於α 與x 求:
{∇xL(x,α)∇αL(x,α)=0=0
令導數為0 ,求得x 、α 的值後,將x 帶入f(x) 即為在約束條件hi(x) 下的可行解。這樣做的意義是什麼呢?
接下來看一個直觀的示例,對於二維情況下的目標函式是f(x,y) ,在平面中畫出f(x,y) 的等高線,如下圖的虛線所示,
並只給出一個約束等式h(x,y)=0 ,如下圖的綠線所示,目標函式f(x,y) 與約束h(x,y)只有三種情況,相交、相切或者沒有交集,沒交集肯定不是解,只有相交或者相切可能是解,但相交得到的一定不是最優值,因為相交意味著肯定還存在其它的等高線在該條等高線的內部或者外部,使得新的等高線與目標函式的交點的值更大或者更小,這就意味著只有等高線與目標函式的曲線相切的時候,才可能得到可行解.
因此給出結論:拉格朗日乘子法取得極值的必要條件是目標函式與約束函式相切,這時兩者的法向量是平行的,即
∇xf(x)−αxh(x)=0
所以只要滿足上述等式,且滿足之前的約束hi(x)=0,i=1,2,...,m ,即可得到解,聯立起來,正好得到就是拉格朗日乘子法。這裡只是直觀展示了一下拉格朗日乘子法的幾何推導
,並沒有給出詳細的證明。
不等式約束優化
當約束加上不等式之後,情況變得更加複雜,首先來看一個簡單的情況,給定如下不等式約束問題:
minxf(x)s.t.g(x)≤0
當約束加上不等式之後,情況變得更加複雜,首先來看一個簡單的情況,給定如下不等式約束問題:
對應的 Lagrangian 與圖形分別如下所示:
L(x,λ)=f(x)+λg(x)
這時的可行解必須落在約束區域g(x) 之內,下圖給出了目標函式的等高線與約束:
deng.png 由圖可見可行解x 只能在g(x)<0 或者g(x)=0 的區域裡取得:
-
當可行解
x 落在g(x)<0 的區域內,此時直接極小化f(x) 即可; -
當可行解
x 落在g(x)=0 即邊界上,此時等價於等式約束優化問題.
當約束區域包含目標函式原有的的可行解時,此時加上約束可行解扔落在約束區域內部,對應 的情況,這時約束條件不起作用;當約束區域不包含目標函式原有的可行解時,此時加上約束後可行經過之前的分析,便得知加上不等式約束後可行解 需要滿足的就是以下的 KKT 條件:解落在邊界 上。下圖分別描述了兩種情況,右圖表示加上約束可行解會落在約束區域的邊界上。
以上兩種情況就是說,要麼可行解落在約束邊界上即得g(x)=0 ,要麼可行解落在約束區域內部,此時約束不起作用,另λ=0 消去約束即可,所以無論哪種情況都會得到:
λg(x)=0
還有一個問題是λ 的取值,在等式約束優化中,約束函式與目標函式的梯度只要滿足平行即可,而在不等式約束中則不然,若λ≠0 ,這便說明可行解 x 是落在約束區域的邊界上的,這時可行解應儘量靠近無約束時的解,所以在約束邊界上,目標函式的負梯度方向應該遠離約束區域朝向無約束時的解,此時正好可得約束函式的梯度方向與目標函式的負梯度方向應相同:
−∇xf(x)=λ∇xg(x)
上式需要滿足的要求是拉格朗日乘子λ>0 ,這個問題可以舉一個形象的例子,假設你去爬山,目標是山頂,但有一個障礙擋住了通向山頂的路,所以只能沿著障礙爬到儘可能靠近山頂的位置,然後望著山頂嘆嘆氣,這裡山頂便是目標函式的可行解,障礙便是約束函式的邊界,此時的梯度方向一定是指向山頂的,與障礙的梯度同向,下圖描述了這種情況
:
可見對於不等式約束,只要滿足一定的條件,依然可以使用拉格朗日乘子法解決,這裡的條件便是 KKT 條件。接下來給出形式化的 KKT 條件 首先給出形式化的不等式約束優化問題:
minf(x)s.t.hi(x)=0,i=1,2,...,mgj(x)=0,i=1,2,...,n
列出 Lagrangian 得到無約束優化問題:
L(x,α,β)=f(x)+∑i=1mαihi(x)+∑j=1nβigi(x)
經過之前的分析,便得知加上不等式約束後可行解 x 需要滿足的就是以下的
KKT 條件: latex中方程組的編號應如何修改?
∇xL(x,α,β)=0(1)βjgj(x)=0,j=1,2,...,n(2)hi(x)=0,i=1,2,...,m(3)gj(x)≤0,j=1,2,...,n(4)βj≥0,j=1,2,...,n(5)
滿足 KKT 條件後極小化 Lagrangian 即可得到在不等式約束條件下的可行解。 KKT 條件看起來很多,其實很好理解:
(1) :拉格朗日取得可行解的必要條件;
(2) :這就是以上分析的一個比較有意思的約束,稱作鬆弛互補條件;
(3)~(4) :初始的約束條件;
(5) :不等式約束的 Lagrange Multiplier 需滿足的條件。
主要的KKT條件便是 (3) 和 (5) ,只要滿足這倆個條件便可直接用拉格朗日乘子法, SVM 中的支援向量便是來自於此。
主要的KKT條件便是 (3) 和 (5) ,只要滿足這倆個條件便可直接用拉格朗日乘子法, SVM 中的支援向量便是來自於此。
參考文獻
0.書:PRML | 《機器學習方法》-李航 |《機器學習》-周志華
1.http://blog.csdn.net/xianlingmao/article/details/7919597
2.http://blog.csdn.net/timingspace/article/details/50966105
3.http://blog.csdn.net/loadstar_kun/article/details/25369017
4.http://blog.csdn.net/johnnyconstantine/article/details/46335763
5.http://www.csc.kth.se/utbildning/kth/kurser/DD3364/Lectures/KKT.pdf
6.http://www.csc.kth.se/utbildning/kth/kurser/DD3364/Lectures/Duality.pdf
7.http://www.cnblogs.com/jerrylead/archive/2011/03/13/1982684.html
0.書:PRML | 《機器學習方法》-李航 |《機器學習》-周志華
1.http://blog.csdn.net/xianlingmao/article/details/7919597
2.http://blog.csdn.net/timingspace/article/details/50966105
3.http://blog.csdn.net/loadstar_kun/article/details/25369017
4.http://blog.csdn.net/johnnyconstantine/article/details/46335763
5.http://www.csc.kth.se/utbildning/kth/kurser/DD3364/Lectures/KKT.pdf
6.http://www.csc.kth.se/utbildning/kth/kurser/DD3364/Lectures/Duality.pdf
7.http://www.cnblogs.com/jerrylead/archive/2011/03/13/1982684.html
相關文章
- 解密SVM系列(一):關於拉格朗日乘子法和KKT條件解密
- 【機器學習之數學】03 有約束的非線性優化問題——拉格朗日乘子法、KKT條件、投影法機器學習優化
- 約束優化的拉格朗日乘子(KKT)優化
- 一文理解拉格朗日對偶和KKT條件
- C++中的條件變數C++變數
- MySQL 變數和條件MySql變數
- linux中條件變數和訊號量的區別!Linux變數
- C++11 中的執行緒、鎖和條件變數C++執行緒變數
- 互斥鎖和條件變數 (轉)變數
- SQL中on條件與where條件的區別[轉]SQL
- 機器學習學習中,數學最重要!機器學習
- 查詢條件和條數,先查詢兩條免費的,後面為vip
- SqlServer中迴圈和條件語句SQLServer
- 我們該如何學習機器學習中的數學機器學習
- 條件和排序排序
- Vue模板語法、屬性繫結、條件渲染的學習Vue
- muduo網路庫學習筆記(4):互斥量和條件變數筆記變數
- 秒懂 Golang 中的 條件變數(sync.Cond)Golang變數
- JUnit5學習之四:按條件執行
- 「譯」編寫更好的 JavaScript 條件式和匹配條件的技巧JavaScript
- shell指令碼中的運算子和條件判斷指令碼
- oracle中的條件語句Oracle
- 【SQL】SQL中if條件的使用SQL
- 機器學習中的數學(1):迴歸、梯度下降機器學習梯度
- Condition條件變數變數
- pthread 條件變數thread變數
- 關於條件變數變數
- 「譯」寫好JavaScript條件語句的5條守則JavaScript
- 機器學習中的數學(5):強大的矩陣奇異值分解(SVD)及其應用機器學習矩陣
- SQL Server解惑——查詢條件IN中能否使用變數SQLServer變數
- Junit5系列-Junit5中DisabledCondition條件測試執行
- CHECK約束中的NULL條件Null
- 機器學習中那些必要又困惑的數學知識機器學習
- 機器學習中的數學-07-偏度與峰度機器學習
- 讀《我和Labview》5條件結構和順序結構View
- 程式返回條件的0和1
- 使用channel代替條件變數變數
- Laravel 5 判斷條件是否存在Laravel