本文結構:
- 凸優化有什么用?
- 什么是凸優化?
凸優化有什么用?
鑒于本文中公式比較多,先把凸優化的意義寫出來吧,就會對它更有興趣。
我們知道在機器學習中,要做的核心工作之一就是根據實際問題定義一個目標函數,然后找到它的最優解。
不過求解這種優化的問題其實是很難的,但是有一類問題叫做凸優化問題,我們就可以比較有效的找到全局最優解。
例如,SVM 本身就是把一個分類問題抽象為凸優化問題,利用凸優化的各種工具(如Lagrange對偶)進行求解和解釋。深度學習中關鍵的算法反向傳播(Back Propagation),本質也是凸優化算法中的梯度下降算法。
凸優化的價值也在于思維轉變,當我們在現實生活中遇到計算量接近無窮大的問題時,我們要想辦法將模型轉換成“凸優化問題”,因為凸優化已經相對嚼得比較爛,所以只要問題轉化成凸優化,我們就可以分布迭代去運算。
當然現實中絕大部分優化問題并不是凸優化問題,但是凸優化非常重要, 因為:
- 還是有相當一部分問題是或等價于凸優化問題,例如下面會舉例說明 SVM,最小二乘等。
- 大部分凸優化問題解起來比較快。
- 很多非凸優化或NP-Hard的問題可以轉化(并非是等價的)為P的凸優化問題。并給出問題的界或近似。例如用對偶(Duality),松弛(Relaxation)等方法將一個優化問題轉化為凸優化。
什么是凸優化?
關于凸優化,有幾個基礎概念:凸集,凸函數,凸優化問題,局部最優和全局最優。以及一個很重要的性質,就是所有局部最優點都是全局最優的
1. 凸集
意思是對這個集合的任何兩個元素,我們如果畫一條線,那么這線上的所有元素仍然屬于這個集合:
下面這幾個例子都是凸集:
Rn,因為對任意 x, y ∈ Rn, θx + (1 ? θ)y ∈ Rn
Rn+ = {x : xi ≥ 0 ?i = 1,...,n},因為 (θx+(1?θ)y)i =θxi +(1?θ)yi ≥0 ?i。
范數球,∥ · ∥ 例如 {x: ∥x∥ ≤ 1}
映射子空間 Affine subspaces: {x ∈ Rn : Ax = b}
多面體 polyhedra: {x ∈ Rn : Ax ? b},即 Ax 的每個元素小于或等于 b 的對應元素
凸集的交集
半正定矩陣 Positive semidefinite matrices:A = AT 且 for all x ∈ Rn, xT Ax ≥ 0.
在文獻中有詳細的證明:
http://cs229.stanford.edu/section/cs229-cvxopt.pdf
只需要按照凸集的定義,任取這個集合的兩個元素,以及 0 ≤ θ ≤ 1,如果可以證明 θx+(1?θ)y 仍然屬于這個集合,那么它就是凸集
2. 凸函數:
它的含義就是在這個函數上任意取兩個點,在它們之間畫一條線,那么這兩點之間的函數上的值需要在這條線以下。:
如何驗證某個函數是否為凸函數呢?
最基本的,我們可以用凸度的一階二階條件:
一階條件的含義就是,如果我們在這個函數上的任意一點畫出它的切線,那么這條切線上的所有點都將在函數的下面。:
二階條件中如果是一維的話,就相當于函數的二階導數總是非負的。:
? 此處意思為半正定。
下面這幾個例子都是凸函數
可以根據二階條件,即證明它們的二階導數非負來判斷:
Exponential. Letf :R→R,f(x)=e^ax for any a ∈ R.
Negative logarithm. Let f : R → R, f(x) = ?logx {x : x > 0},
Affinefunctions. Letf:Rn →R,f(x)=bT x + c for some b ∈ Rn,c ∈ R
當然還有下面兩個可以直接通過凸函數的定義和不等式來證明:
Norms. Let f : Rn → R be some norm on Rn
Nonnegative weighted sums of convex functions
3. 凸優化問題:
就是我們想要找到凸集 C 中的某個 x 來使 f 達到極小:
minimize f (x)
subject to x ∈ C
其中 f 為凸函數,C 為凸集,
4. 局部最優和全局最優
局部最優的意思是如果 x 這個點是函數的局部極小值點,那么我們可以找到一個半徑 R,在以 x 為中心以 R 為半徑的球內的任何一個點,它的函數值都會大于這個極小值。
全局最優就是 x 這點的函數值就是在定義域中函數達到的最小值。
5. 性質
對于凸優化問題,有一個很重要的性質,就是所有局部最優點都是全局最優的。
為什么呢,證明如下:
設 x 為一個局部極小值點,那么我們可以找到另外的一個點 y,使得 f(x) > f(y)
這樣的話,我們找到一個 z 為:
那么 z 就在 x 的這個半徑 R 內:
但是由凸函數定義可得:
即我們在半徑 R 內,找到了一個 z ,它的函數值要比 x 的還要小,這與 x 是局部極小值矛盾,所以 x 不可能是局部極小值,只可以是全局的。
下面這幾個例子都是凸優化問題:
Linear Programming
Quadratic Programming
Quadratically Constrained Quadratic Programming
Semidefinite Programming
那么這些有什么用呢?
讓我們用常見的算法舉例,
1. SVM 的優化目標如下:
如果我們根據下面的形式,定義了 x,P,c,G,h,X,y,
那么 SVM 的優化目標就可以寫成 Quadratic Programming 的形式:
所以這是個凸優化問題,
當然了我們可以簡單地根據 SVM 具有二次的優化目標,以及線性的限制條件來判斷,而無需轉化成標準形式。
2. 最小二乘的優化目標:
如果我們做如下定義,可以看出它也是個 Quadratic Programming:
當我們拿到了一個凸的優化函數時,那么就有一大套公式定理可以幫我們解決問題了。
因為對凸優化的問題,在基礎數學上面已經有了很多解決方法,例如可以將凸優化問題Lagerange做對偶化,然后用Newton、梯度下降算法求解等等。
推薦凸優化入門資源:
- book Convex Optimization by Stephen Boyd and Lieven Vandenberghe (available for free online),
- EE364,a class taught here at Stanford by Stephen Boyd
參考:
http://cs229.stanford.edu/section/cs229-cvxopt.pdf
https://www.zhihu.com/question/24641575
推薦閱讀 歷史技術博文鏈接匯總
http://www.lxweimin.com/p/28f02bb59fe5
也許可以找到你想要的