凸優化和非凸優化
2014-09-15 09:31 14094人閱讀 評論(2) 收藏 舉報
分類:數學中最優化問題的一般表述是求取
,使
,其中
是n維向量,
是
的可行域,
是
上的實值函數。凸優化問題是指
是閉合的凸集且
是
上的凸函數的最優化問題,這兩個條件任一不滿足則該問題即為非凸的最優化問題。其中,
是 凸集是指對集合中的任意兩點
,有
,即任意兩點的連線段都在集合內,直觀上就是集合不會像下圖那樣有“凹下去”的部分。至于閉合的凸集,則涉及到閉集的定義,而閉集的定義又基于開集,比較抽象,不贅述,這里可以簡單地認為閉合的凸集是指包含有所有邊界點的凸集。


注意:中國大陸數學界某些機構關于函數凹凸性定義和國外的定義是相反的。Convex Function在某些中國大陸的數學書中指凹函數。Concave Function指凸函數。但在中國大陸涉及經濟學的很多書中,凹凸性的提法和其他國家的提法是一致的,也就是和數學教材是反的。舉個例子,同濟大學高等數學教材對函數的凹凸性定義與本條目相反,本條目的凹凸性是指其上方圖是凹集或凸集,而同濟大學高等數學教材則是指其下方圖是凹集或凸集,兩者定義正好相反。為什么要求是凸函數呢?因為如果是下圖這樣的函數,則無法獲得全局最優解。
為什么要求是凸集呢?因為如果可行域不是凸集,也會導致局部最優
實際建模中判斷一個最優化問題是不是凸優化問題一般看以下幾點:目標函數
如果不是凸函數,則不是凸優化問題決策變量
中包含離散變量(0-1變量或整數變量),則不是凸優化問題約束條件寫成
時,
如果不是凸函數,則不是凸優化問題之所以要區分凸優化問題和非凸的問題原因在于凸優化問題中局部最優解同時也是全局最優解,這個特性使凸優化問題在一定意義上更易于解決,而一般的非凸最優化問題相比之下更難解決。非凸優化問題如何轉化為凸優化問題的方法:1)修改目標函數,使之轉化為凸函數2)拋棄一些約束條件,使新的可行域為凸集并且包含原可行域
----------------------------------------------------------------------------------------------------------------------------------------------------------
關于凸優化的一些簡單概念
2013-11-01 11:36 38642人閱讀 評論(2) 收藏 舉報
分類:http://www.cnblogs.com/tornadomeet/p/3300132.html
沒有系統學過數學優化,但是機器學習中又常用到這些工具和技巧,機器學習中最常見的優化當屬凸優化了,這些可以參考Ng的教學資料:http://cs229.stanford.edu/section/cs229-cvxopt.pdf,從中我們可以大致了解到一些凸優化的概念,比如凸集,凸函數,凸優化問題,線性規劃,二次規劃,二次約束二次規劃,半正定規劃等,從而對凸優化問題有個初步的認識。以下是幾個重要相關概念的筆記。
凸集的定義為:

其幾何意義表示為:如果集合C中任意2個元素連線上的點也在集合C中,則C為凸集。其示意圖如下所示:

常見的凸集有:
n維實數空間;一些范數約束形式的集合;仿射子空間;凸集的交集;n維半正定矩陣集;這些都可以通過凸集的定義去證明。
凸函數的定義為:

其幾何意義表示為函數任意兩點連線上的值大于對應自變量處的函數值,示意圖如下:

凸函數的一階充要條件為:

其中要求f一階可微。
二階充要條件為:

其中要求f二階可微,表示二階導數需大于0才是凸函數。
按照上面的兩個定義,如果f(x)=x^2肯定是凸函數,而g(x) = -x^2是非凸函數。也就是說開口向下的函數是非凸函數,但是對于這種情況可以通過添加負號變成凸函數,從而求解。
常見的凸函數有:指數函數族;非負對數函數;仿射函數;二次函數;常見的范數函數;凸函數非負加權的和等。這些可以采用上面2個充要條件或者定義去證明。
凸優化問題(OPT)的定義為:

即要求目標函數是凸函數,變量所屬集合是凸集合的優化問題。或者目標函數是凸函數,變量的約束函數是凸函數(不等式約束時),或者是仿射函數(等式約束時)。
對于凸優化問題來說,局部最優解就是全局最優解。
常見的凸優化問題包括:
線性規劃(LP):該問題是優化下面的式子:

其中那個不常見的奇怪符號表示按元素小于等于,后面出現類似符號可以類似理解。
二次規劃(QP):該問題是優化下面的式子:

二次約束的二次規劃(QCQP):該問題是優化下面的式子:

半正定規劃(SDP):該問題是優化下面的式子:

按照文章說SDP在機器學習領域應用很廣,最近很流行,不過我好像沒太接觸到過。
參考資料:
http://cs229.stanford.edu/section/cs229-cvxopt.pdf
==========================================================================================為什么凸優化這么重要?
看到好多人都在學習凸優化,但是有感覺有多少問題多符合凸優化條件的呢?為什么非得是凸優化這么重要?現有的優化方法不是都能解決嗎?那凸優化又有什么用呢?添加評論 分享按時間排序默認排序11 個回答
陶輕松 機器學習、AI骨灰級愛好者124 人贊同我就按著問題一個個的回答吧: 首先,在現實生活中,如果對實際問題進行建模,直接符合凸優化條件的問題很少很少,少的可憐,我們在機器學習中、深度學習中所謂的模型正好符合凸優化模型的情況是經過無數先輩幾十年的沉淀轉化而來的,現今的機器學習、深度學習,所謂的智能,其實也只是數據進行建模,kNN、貝葉斯、決策樹、SVM做超平面分隔、k聚簇等等只是在使用統計學的方法來做決策,其實只是概率(對已發生事件的頻率統計)選擇來進行決策而已,而解決這些問題的過程當中,存在著無數約束條件:等式+不等式。求解?(x),使得等式+不等式符合條件,經過先輩們的改善、切合,發現轉化為凸優化可以解決這類問題。但是還有著大量的問題沒法解決,例如NP問題,目前是無解的,因為它涉及的約束條件、可能性太多,計算過于復雜。我們沒法直接將它轉化為凸優化。 其次,凸優化的重要在于它是一個相對而言被嚼爛的數據模型,對凸優化的問題我們在基礎數學上面已經有了很多解決方法,例如可以將凸優化問題Lagerange做對偶化,然后用Newton、梯度下降算法求解等等。
再次,現有的優化方法不是都解決了的,還是有很多問題是沒有解決的,例如NP問題,如果轉化為可解問題,如何對這些問題做近似優化處理,這就需要遇到具體問題的時候具體去分析,而且建立一個近似可解的優化模型需要我們對優化本身理解透徹。一個對水墨、顏料都不懂的畫家如何能夠創造出新穎的畫風?
最后,回答末尾一個問題,凸優化的作用在于思維方式的轉變,跟計算機思維方式一樣,計算機從業人員在遇到問題的時候習慣了通過電腦去協助解決問題,而他們的價值不在于知道聽得懂別人告訴他如何解決問題,而是遇到現實問題的時候都會將問題拆分成機器可以實現的方式去解決:例如遇到購物,阿里巴巴建立了網站、app、c/s系統、b/s系統,用互聯網建立信息流,建立帝國。遇到查詢問題,百度建立了搜索引擎。這種思維方式才是最重要的。。同樣,凸優化的價值也在于思維轉變,遇到現實生活問題的時候,我們必然要對問題進行建模,然后抽象問題,利用機器去幫助我們解決問題,那么,當問題的計算量接近無窮大的時候我們如何去解決?這就需要我們抽離問題抽象結構,想辦法將轉換成“凸優化問題”,因為凸優化已經被嚼爛,所以只要問題轉化成凸優化,我們就可以分布迭代去運算,于是才有了機器學習、深度學習這一門門的交叉科學。凸優化是數學領域的重要分支,而計算機科學僅僅是數學這門基礎科學的延伸而已,基礎科學才是王道!!! C#、java固然是被封裝成了便于人類使用的高級語言,但是總有些功能是“已有實現”沒有封裝好的,這時就需要我們回歸更加原始語言C、匯編去編程。。深究底層、精通基礎科學才是從容面對所有問題的解決王道,學會別人解決過的問題只能讓你解決相同的問題,現實是無限可能的,總有未解決過的問題等著你,凸優化,你值得擁有
編輯于 2017-01-14 11 條評論 感謝 分享 收藏 ? 沒有幫助 ? 舉報 ? 作者保留權利
知乎用戶 君子豹變14 人贊同理論上,凸性既具有良好的幾何性質,比如分離平面和支撐平面,也具有良好的全局分析特性,比如subgradient。更重要的是,90年代以來,結構凸優化問題LP,SOCP特別是SDP,產生了高效的數值計算方法。在這之前,大家還以為SDP是不可計算的。SDP異常強大的建模和表達能力是凸優化火起來的重要原因。良好的理論分析特性,高效的實際可計算性和強大的建模能力是大家選擇凸建模的原因。注意,我這里說的是凸建模!科學研究的第一步是對實際問題抽象近似,建模成數學問題,這里有巨大的選擇自由度!雖然非凸建模具有最強的表達能力,也最省事,代價卻是理論上難以分析和實際中無法可靠計算!近十年來火的一塌糊涂的壓縮感知,稀疏表示和低秩恢復都是由凸建模帶動起來的!研究者們通過分析凸問題的性質來解釋和理解真實世界的機理!要注意,很多這樣的問題幾十年前就已經有非凸的表達形式了,只有用凸建模才煥然一新!更進一步,通過對凸建模的深入理解,大家對具體的非凸問題,注意不是所有,開始利用特殊的結構特點做分析,得出了一些很深刻的結果,比如神經網絡收斂到局部最優解,而不是平穩點,隨機算法有助于逃離鞍點。但是,非凸分析幾乎都是case by case,沒有統一有效的手段,這與凸分析差別甚大。從這個角度來說,凸建模和凸優化是研究實際問題的首選!凸優化都是可計算的嗎?這個問題要放到information based complexity的理論框架下來談。眾所周知,橢球法或者各種切平面法能夠在多項式迭代次數求得要求精度的解,這似乎意味著所有的凸優化都是多項式時間可計算的。這是一個錯覺!大多數的半無窮凸優化semi-infinite convex optimization是不可計算的,因為目標函數和約束條件是多項式時間不可計算的。以橢球法為例,雖然迭代次數是多項式的,然而每次迭代需要計算函數值和次梯度,而這部分計算不是多項式時間的!最典型的不可計算的凸優化例子是協正優化copositive optimization。給個不可計算的具體例子吧 [1],如下圖。
最后,只需要引入無窮多個變量,幾乎所有的數學規劃問題都可以表示成凸優化問題!思路也非常簡單直接,就是把約束域內的點換成對應的Borel概率密度函數,很自然的,目標函數和約束條件都可以寫成概率密度函數的線性積分,也就是凸的。這就把問題變換成了求最優的概率密度函數,無窮多個變量,而其對偶問題則有無窮多個約束!例子見下圖 [2]
再舉個具體例子,SDP就可以如下表示[3],其他非線性函數也可以類似表達。這絲毫不違背NP-hard理論,哈哈!這種dimension lifting的思路最為熟知的就是SDR!上面這個思路是現在做非凸多項式優化的凸近似研究的熱點,用不斷增大維度的有限維問題一步步逼近半無窮問題!已經有很多研究表明,有限維近似就可以準確求解原來的半無窮問題。

[1] Lectures on Modern Convex Optimization-Analysis Algorithms and Engineering applications[2] Introduction to Semidefinite, Conic and Polynomial Optimization[3] Semi-infinite linear PRogramming approaches to semidefinite programming problems編輯于 2017-01-15 添加評論 感謝 分享 收藏 ? 沒有幫助 ? 舉報 ? 禁止轉載
田star 計算數學并不愛pde2 人贊同有個cvx,可以碰碰手氣,看你的問題能不能剛好被解出來發布于 2016-07-29 添加評論 感謝 分享 收藏 ? 沒有幫助 ? 舉報 ? 作者保留權利
徐達 廢材的我1 人贊同非凸問題要用智能算法解決,其實傳統算法是很好的。速度也快。只能算法專為這些常規算法無法解決的設計。這些問題容易局部最優。就像控制流行什么神經網絡模糊控制,最經典最好用的還是PID編輯于 2016-06-02 添加評論 感謝 分享 收藏 ? 沒有幫助 ? 舉報 ? 作者保留權利
何舜成 凸優化學習者65 人贊同凸優化之所以重要,應當有下面幾個原因:1. 凸優化問題有很好的性質眾所周知,凸問題的局部最優解就是全局最優解(許多答主已經提到了)。不過,凸優化理論中最重要的工具是Lagrange對偶,這個為凸優化算法的最優性與有效性提供了保證。近些年來關于凸問題的研究非常透徹,以至于只要把某一問題抽象為凸問題,就可以近似認為這個問題已經解決了。2. 凸優化擴展性強前面提到,許多問題的關鍵是在于將問題抽象為凸問題。因此許多非凸問題通過一定的手段,要么等價地化歸為凸問題,要么用凸問題去近似、逼近。典型的如幾何規劃、整數規劃,它們本身是非凸的,但是可以借助凸優化手段去解,這就極大地擴張了凸優化的應用范圍。3. 凸優化的應用十分廣泛現實生活中確實有大量的非凸問題,但是并不妨礙凸優化在許多問題上都可以大展身手。往細了說,比如線性回歸、范數逼近、插值擬合、參數估計,以及許多的幾何問題;往大了說,在通信、機器學習、統計、金融等涉及優化、決策的研究領域,凸優化都是非常有效的手段。4. 針對其他非凸問題的研究還不充分凸優化之重要,從另一個角度說,就是我們沒有找到很好的非凸優化的算法,這一部分還有許多學者都在努力。以上是我在學習凸優化過程中的一點點感悟,藉當拋磚引玉了,歡迎討論。在我比較熟悉的機器學習領域,最近二三十年有兩個算法相繼成為機器學習應用的明星,一個是支持向量機(Support Vector Machine),一個是深度學習(Deep Learning)。SVM本身就是把一個分類問題抽象為凸優化問題,利用凸優化的各種工具(如Lagrange對偶)求解和解釋。深度學習則是神經網絡的又一次爆發,其中關鍵的算法是反向傳播(Back Propagation),本質就是凸優化算法中的梯度下降算法,即使問題極度非凸,梯度下降還是有很好的表現,當然深度學習的機制還有待研究。凸優化的重要性,在工程領域應該說是無可撼動的了。發布于 2016-02-23 5 條評論 感謝 分享 收藏 ? 沒有幫助 ? 舉報 ? 作者保留權利
知乎用戶 Ashes of time3 人贊同我們學校就不按照convex 和non convex 來授課,而是linear 和nonlinear。所有的針對nonlinear 的算法都能用在nonconvex上,只不過對某類問題某種算法效率較高。補充一點:樓上說用convex model 解一個初始點做nonconvex model ,只有我們非常渴求全局最優的情況下才會這么做。這么做叫convex relaxation。relaxation的技巧并不比直接解nonconvex 要容易。很多情況下只有非常structurally special的問題才有很好的convex relaxation。比如AC OPF用SDP relaxation解,當然也不是每次都能有zero duality gap的。編輯于 2016-02-12 7 條評論 感謝 分享 收藏 ? 沒有幫助 ? 舉報 ? 作者保留權利
zhong z PhD in Optimization63 人贊同首先,優化領域只有兩種問題可以認為是完全可以解決的,那就是最小二乘法和線性規劃優化問題。哪怕是凸優化問題,也并沒有定論一定能解決。所以“現有優化方法都能解決”是一個錯誤的表述。其次,凸優化之所以重要是因為以下幾個原因:1. 每個初學優化的人基本上都是從線性規劃開始的,線性規劃也是凸優化的一種。2. 由于線性規劃的局限性,現實問題很少能夠建成線性優化的模型。而凸優化的范疇會更廣一些。3. 凸優化問題盡管并沒有被完全解決,但也是一個相對比較成熟的“技術”(實際上,如果你讀了Boyd的《凸優化》這本書,凸優化由于還沒有行業公認的通行解決方法,因此還不能稱之為技術)4. Boyd(斯坦福大學)同時稱:我們可以期待凸優化在最近幾年內被完全解決,從而成為一種“技術”,“基本上,如果你把一個現實問題建成凸優化問題模型,你就可以認為這個問題已經被解決了”。5. 在非凸優化中,凸優化同樣起到很重要的作用1)當你要解決一個非凸優化問題時,可以先試圖建立一個簡化多凸優化模型,解出來以后作為非凸問題的一個起始點。2)很多非凸優化問題的啟發式算法的基礎都是基于凸優化3)你可以先建立非凸優化的松弛問題,使用凸優化算法求解,作為非凸優化問題的上限或下限(bound)說到優化的本質,其實是用數學方法解決現實問題。當你在建模時,難免會簡化現實問題,也就是我們通常意義的“模型”。在建模的時候,如何簡化現實問題就顯得很重要了。你當然可以做很少的簡化,幾乎把現實問題完全搬進來。但這樣很可能導致計算壓力過大。你也可以做比較多的簡化,將原問題建立成一個凸優化問題,這樣子就犧牲了準確性保證了效率。如何在上面兩種情況之中取一個合適的平衡點是優化的藝術。以上內容基本上都出自Boyd的《凸優化》一書。發布于 2015-11-21 7 條評論 感謝 分享 收藏 ? 沒有幫助 ? 舉報 ? 作者保留權利
li Eta Machine Learning, Optimization, Comput…20 人贊同凸優化問題性質好(凸性保證局部最優就是全局最優),雖然有時候還要再多加些假設(比如李普希茲連續,等等)。不知道題主是做什么方向的,顯然不是所有理工科的同學都需要凸優化這項工具,題目中所謂的『好多人都在學習凸優化』肯定是指一個圈子內吧?還請題主明示!了解題主所處領域會方便其他人回答。優化圈子自不必說,肯定要學。此外一些管院做運籌學的也需要凸優化。做機器學習(統計學習)的人,肯定也需要學習凸優化,在機器學習圈子內往往不論模型無論凸不凸,都可以用凸優化算法求解,因為用凸算法求得一個非凸問題的局部最優解也是一個不差的解。編輯于 2015-10-19 2 條評論 感謝 分享 收藏 ? 沒有幫助 ? 舉報 ? 作者保留權利
Jeff22 人贊同凸優化(Convex Optimization)之所以重要是因為它是所有優化問題中最容易解決的。凸優化包含但不限于線性優化(Linear Optimization)以及一些具有特殊性質的非線性優化(Nonlinear Optimization)。凸優化之所以‘容易’是因為任何可證明的局部最優解(Local Optimal Solution)都同時為全局最優解(Global Optimal Solution)。換句話說,一旦你找到了一個局部最優解,那么它一定是你能找到中最好的(也就是全局最優的)。之所以說它重要,我認為有兩點原因:1. 它是所有優化問題中最簡單的,很多復雜的算法要基于凸優化,因此很重要; 2. 線性優化是所有優化中最為基本的,一般學習優化算法要從線性優化開始。一些個人的觀點,歡迎批評指正和補充。謝謝!編輯于 2015-11-21 4 條評論 感謝 分享 收藏 ? 沒有幫助 ? 舉報 ? 作者保留權利
凌琳琳10 人贊同是誰告訴你,現有的優化方法都能解決的?!--------------------------------------------------------------------------好吧,來好好回答一發。有感覺有多少問題多符合凸優化條件的呢?實際中并不多。為什么非得是凸優化這么重要?因為這是一類我們目前能很好解決的問題。我們關注凸優化很大程度上是因為這是目前能很好解決的一類問題。(有點像:我們的鑰匙掉在了酒吧,但是我們在路燈下找,因為路燈下比較亮。)現有的優化方法不是都能解決嗎?現在大量NP hard的優化問題都是搞不定的,無法得到全局最優解。比如TSP問題。準確來說,相比于能搞定的問題,更多的問題都是搞不定的。那凸優化又有什么用呢?凸優化的好處在于,很多實際的問題可能未必是凸的,凸優化提供了一個思路,將其轉換為凸問題從而解決。若干解決凸問題的算法,比如gradient descent也都可以用在非凸的情況,只是不能保證全局最優。具體說,可能更加多一些,看看專業的書籍吧。比如,入門可以Stephen Boyd的Convex Optimizationhttps://web.stanford.edu/~boyd/cvxbook/bv_cvxbook.pdfPS: 回去找一下,秀一張Boyd的扉頁簽名。大家等我。--------------------------------------------------------------------------------------最近發現Bimitri P. Bertsekas的Nonlinear Programming也非常棒,從更數學的角度展開,推薦一讀。Boyd那個簽名照不知道存哪里了。。。--------------------------------------------------------------------------------------簽名找到拉~~~
編輯于 2016-10-31 20 條評論 感謝 分享 收藏 ? 沒有幫助 ? 舉報 ? 作者保留權利
xh.along2 人贊同其他行業不清楚,說說機器學習(包括統計)吧,基本上所有機器學習問題都是優化問題,而優化問題中凸優化是很大類且解法豐富,如果問題能轉化為凸優化問題,則必能解!