以下整理按照知乎全部回答的預設排序
No.1
作者:覃含章
1.為什麼凸優化重要?
凸優化性質好,許多日常生活中的非凸優化問題,目前最有效的辦法也只能是利用凸優化的思路去近似求解。
例如:
● 帶整數變數的優化問題,鬆弛之後變成凸優化問題(所以原問題其實是凸優化問題+整數變數);
● 任意帶約束的非凸連續優化問題,其對偶問題作為原問題解的一個lower bound,一定是凸的!
● 針對帶有hidden variable的近似求解maximum likelihood estimate的EM演算法,或者貝葉斯版本里頭所謂的variational Bayes(VB) inference。而原本的MLE其實是非凸優化問題,所以EM和VB演算法都是找到了一個比較好優化的concave lower bound對這個lower bound進行優化。
這是什麼意思呢?
也就是說到今天2019年為止,我們還是隻對凸優化問題比較有把握。
當然有人可能要說了,現在各種深度強化學習、深度學習的優化問題都是極其複雜的非凸優化問題,不是大家也能解的挺好?
這個問題的回答就更難一些,我個人觀點,簡單來說是這樣,目前對於這些非凸優化問題取得的演算法理論方面的突破大體其實歸結於找到這些非凸優化問題中“凸”的結構。這也是為什麼我們看到一階演算法(SGD, ADAM等)仍然大行其道,而分析這些非凸優化演算法的時候其實很多的lemma(引理)仍然是凸優化(凸分析)裡的引理或者引申。
舉個例子:
我們大家都知道凸函式的各種等價定義。而在Zeyuan Allen-Zhu的一系列非凸優化演算法的文章中所謂的非凸性的刻畫仍然是基於此衍生出來的:
來源:Allen-Zhu, Zeyuan. Natasha: Faster Non-Convex Stochastic Optimization via Strongly Non-Convex Parameter. International Conference on Machine Learning. 2017.
我們知道它裡面這個刻畫非凸性的引數 ,如果取成0,那就等價於凸函式的定義,如果取成負的,那麼實際上就是所謂strongly convex,而如果是正的,就變成它這裡的non-convexity了。實際上,現在非凸優化裡面很多的非凸性刻畫都是脫胎於凸優化,比如prox regularity之類的,或者一些更弱的convexity定義(這在經典凸分析裡就已經有不少研究了,quasi-convex,psuedo-convex等等),這裡不再贅述。
個人認為,我們能真正一般化地解決非凸優化問題,那肯定是要對一般的混合整數(線性)規劃(MILP, mixed integer linear programming)要有好的辦法求解才算。因為任意一個非凸優化問題,都可以用很多的分段線性函式逼近,最後變成一個MILP。當然,因為P!=NP這個猜想的存在,這件事情在理論上肯定是hopeless,但是在實際當中,基於硬體能力的提升,還有比如量子計算機一類的新技術,我個人對人類未來能夠在實際中求解MILP還是持一個比較樂觀的態度。到那個時候,我覺得我們才能說傳統的凸優化理論才是真正過時了。
2. 現有的優化方法不是都能解決(凸優化)嗎?那凸優化又有什麼用呢?
首先先明確一點,凸優化難嗎?嗯相比非凸優化,各種NP-complete問題,凸優化裡各種P問題,那肯定是簡單的。然而,在實際當中,我們完全不可能滿足於有一個“多項式時間演算法”就好了。
我們知道,運籌學,優化問題,反映到現實世界裡面就是各種數學建模問題。這些問題,普遍地出現在航空業、金融業、廣告業、電商零售業、能源業、醫療業、交通業等各個領域。我們必須要明確一點,計算複雜性理論(P,NP這套東西)在實際當中其實是沒什麼用處的。嗯,NP hard, NP complete問題很難,沒有多項式時間演算法,但如果你實際的問題規模不太大,比如幾十個城市的旅行商問題(TSP, travelling salesman problem),幾十x幾十的圖上的NP-complete問題,是不是很難?然而現在2019年,你在iphone上下個app,一部小小的手機不要幾秒鐘就能給你算出最優解。(實際上,他們這個app,1000個左右城市的TSP, iphone也頂多要算個幾小時就能找到全域性最優解,無近似)
TSP求解app,當然,這得益於Concorde他們家目前行業領先的解大規模TSP底層演算法...
與此相對應的,即使是一個P問題,但是如果實際當中你的問題規模超級大呢?實際上反而這個問題會讓你更頭疼的。
舉個例子,比如現在優酷、天貓、京東、亞馬遜這些個平臺,每天你登陸網站,它在推薦欄都需要根據你的歷史活動記錄決定推薦哪些產品給你。這個線上推薦演算法,本質上只是需要求解一個線性規劃問題(LP, linear programming, 比一般的凸優化還簡單),甚至還不是一個一般的線性規劃,有個專門的名字叫做packing LP,這類packing LP理論上可以有跟問題規模呈線性的複雜度的演算法(忽略log項,跟排個序差不多...)。聽起來是不是很簡單?然而,實際這些問題的規模無比巨大,每天這些平臺上線人次數以億記,這些平臺可以推薦的商品也是至少百萬千萬規模的。。而且實際問題還有各種各樣的現實約束,比如我們希望我們的演算法可以完全線上更新(online,甚至是streaming algorithm),我們的演算法需要靈活運用儲存資料的資料結構,需要利用計算叢集的並行能力,分散式能力,這也是需要非常非常專門的(一階)優化演算法設計的。。這邊就不再多說了,因為我個人確實在之前公司實習的時候,發現中國最好的IT公司面對這類海量規模的“簡單”LP,實際上遠沒有能力去完美地求解。
因此你說現有的方法能解決所有的凸優化問題,但從實際的角度其實還差的遠。事實上,目前的大公司面對如此規模的優化問題,也就LP還可以勉強接受,像是什麼second-order cone prorgamming (SOCP), semidefinite programming (SDP)根本目前實際中都不可能大規模求解。而這兩類問題在理論上還仍然都是“線性”的,因為可以寫成linear conic programming,所以就更不要說一般的帶約束的凸優化問題了。
實際上,在這個方面,無論是求解器(solver)還是更好的理論演算法的開發都還有大量的研究空間。比如,SDP實際當中的大規模演算法設計目前來看還基本一片空白,有很多很基本的問題都還沒有在理論上得到滿意的解答(像SDP其實和另一類凸優化問題只有一絲之隔,copositive programming,而這類凸優化問題的計算複雜度卻是NP complete的,所以即使是凸優化也未必複雜度就容易!實際上,所有mixed 0/1 nonconvex quadratic program都可以寫成copositive program這個凸優化的形式。兩者的演算法設計也因此都很蛋疼)。。還有這麼多沒有解決的問題,又如何能說凸優化的問題都已經被“解決”了呢?
至於具體如何把mixed 0/1 nonconvex quadratic program寫成凸優化形式,這是個很cute的結果,有興趣的同學可見我這篇專欄文章的第二部分。
https://zhuanlan.zhihu.com/p/34772469
隨手寫寫沒想到也吐了不少嘈,我這邊最後就再總結個幾點吧:
● 做研究過程中,切忌輕易下結論。
實際上,對很多看似已經“解決”的問題,你如果肯花點功夫研究研究,會發現總有很多細節是值得深思的。更不要說直接說一個大的研究領域就已經被“解決”了。我記得前不久還看到NeurlIPs文章的方向彙總,凸優化仍然是優化方向文章裡數量最多(還是第二多,具體記不清了)的。因為實際上我前面還有很多沒提,比如像現在很火的強化學習(或者說多階段的隨機動態規劃)裡面還有大量的凸優化問題沒搞定。。
● 基礎永遠是重要的。
而凸優化就是你做非凸優化研究的基礎。這麼些年來,我自己也逐漸體會,研究當中最常用的,真的還就是那些最基礎的微積分,線性代數,概率統計的基本功。很多問題,如果你有基礎,就都直接不是問題了;反過來,如果當初在學習過程中冒進,去追求最前沿,最時髦,最fancy的topic,卻沒好好打基礎,你可能就會發現很多基本的知識本來都不應該成為障礙,最後卻各種讓你磕磕絆絆。
● 作為優化研究者,埋頭研究的同時,一定要睜開眼睛看看業界的實際情況。
當然,總有一部分優化大師是不在乎實際應用的(然而Nesterov, Nemirovski這樣的人也是有應用文章的),有志做令人高山仰止的大師的就可以忽略我這條了。我只是想說,對於大多數做優化的人,我們實際上應該都是希望自己做的東西可以用在業界的實際問題當中。那麼這個時候除了學理論知識,真的我們應該多hands on,get your hands dirty。我自己的體會是,往往都是在實際寫程式碼求解問題的時候才會對很多知識有更深刻的理解,並且能找到真正值得研究的有意思的問題。
convexity is sexy~
No.2
作者: 留德華叫獸
前言:運籌學在國內,遠沒有統計和人工智慧來的普及。
相信很多人不知道,運籌學正是研究優化理論的學科(包括凸優化),而人工智慧模型最後幾乎都能化簡成求解一個能量/損失函式的優化問題。因此,我把它稱為人工智慧、大資料的“引擎”。(本文的詳細版本已發表在@運籌OR帷幄專欄:離散/整數/組合/非凸優化概述及其在AI的應用 - 知乎專欄)
言歸正傳,為什麼凸優化這麼重要?
1. 首先大家需要知道Convex VS Non-Convex的概念吧?
數學定義就不寫了,介紹個直觀判斷一個集合是否為Convex的方法,如下圖:
簡單的測試一個集合是不是凸的,只要任意取集合中的倆個點並連線,如果說連線段完全被包含在此集合中,那麼這個集合就是凸集,例如左圖所示。
2. 凸優化-相對簡單
凸優化有個非常重要的定理,即任何區域性最優解即為全域性最優解。由於這個性質,只要設計一個較為簡單的區域性演算法,例如貪婪演算法(Greedy Algorithm)或梯度下降法(Gradient Decent),收斂求得的區域性最優解即為全域性最優。因此求解凸優化問題相對來說是比較高效的。
另一個側面,可微分的凸優化問題滿足KKT條件,因此容易求解:
【學界】關於KKT條件的深入探討
這也是為什麼機器學習中凸優化的模型非常多,畢竟機器學習處理海量的資料,需要非常高效的演算法。
3,非凸優化-非常困難
而非凸優化問題被認為是非常難求解的,因為可行域集合可能存在無數個區域性最優點,通常求解全域性最優的演算法複雜度是指數級的(NP難)。如下圖:
假設有1w個區域性最優點,你至少要投點1w次吧?並且你還要假設每次投點都投到了不同的區域,不然你只會搜尋到以前搜尋過的區域性最優點。
4. 為何要學習非凸優化呢?
因為現實生活中,幾乎所有問題的本質都是非凸的。
把3中的圖看作山川盆地,你在現實中有見過左圖這麼“光滑”的地形麼?右圖才是Reality!
5. 凸優化為何這麼重要呢?
科學的本質便是由簡到難,先把簡單問題研究透徹,然後把複雜問題簡化為求解一個個的簡單問題。
例如3中經典的蒙特卡羅投點法,就是在求解一個個的凸優化問題。
假設需要求解1w個凸優化問題可以找到非凸優化的全域性最優點,那麼凸優化被研究透徹了,會加速凸優化問題的求解時間,例如0.001秒。這樣求解非凸優化問題=求解1w個凸優化問題=10秒,還是可以接受的嘛!【學界】非凸轉成凸、約束轉無約-運籌學和支援向量機中的拉格朗日鬆弛法。
6. 運籌學中線性規劃與凸優化的關係
線性規劃是運籌學最基礎的課程,其可行域(可行解的集合)是多面體(polyhedron),具有著比普通的凸集更好的性質。
因此是比較容易求解的(多項式時間可解)。
如有興趣,且聽我嘮叨一下關於運籌學的四個知乎 Live
7. 運籌學中(混合)整數規劃與非凸優化的關係
大家或許不知道,(混合)整數規劃被稱為極度非凸問題(highly nonconvex problem),如下圖:
實心黑點組成的集合,是一個離散集,按照1中判斷一個集合是否為凸集的技巧,我們很容易驗證這個離散集是非凸的。
因此整數規劃問題也是一個非凸優化問題,並且它也是NP難的。
那麼整數規劃的求解思路呢,也遵循了科學研究的本質,即被分解為求解一個個的線性規劃(凸優化)問題。
感興趣的朋友可以搜尋參考下文:
【學界】混合整數規劃/離散優化的精確演算法--分支定界法及優化求解器
8.(混合)整數規劃為何重要?
雖然時間是連續的,但是社會時間卻是離散的。例如時刻表,通常都是幾時幾分,即使精確到幾秒,它還是離散的(整數)。沒見過小數計數的時刻表吧?
同樣,對現實社會各行各業問題數學建模的時候,整數變數有時是不可避免的。例如:x輛車,y個人。x,y這裡便是整數變數,小數是沒有意義的。
9. 深度學習為何非凸?
深度學習裡的損失函式,是一個高度複合的函式。什麼叫複合函式?好吧,例如h(x)=f(g(x))就是一個f和g複合函式。
當f,g都是線性的時候,h是線性的。但在深度學習裡用到的函式,Logistic, ReLU等等,都是非線性 ,並且非常多。把他們複合起來形成的函式h,便是非凸的。
求解這個非凸函式的最優解,類似於求凸優化中某點的gradient,然後按照梯度最陡的方向搜尋。不同的是,複合函式無法求gradient,於是這裡使用Back Propagation求解一個類似梯度的東西,反饋能量,然後更新。
10. 深度學習的優化問題在運籌學看來是“小兒科”
這句話可能會打臉大部分觀眾。
深度學習中的優化問題,雖然目標函式非常複雜,但是它沒有約束阿,是一個無約束優化問題!
大家如果學過運籌學,就知道它由目標函式和約束條件組成,而約束條件,是使得運籌學的優化問題難以求解的重要因素(需要搜尋可行解)。
關於運籌學與人工智慧更多的交叉與應用(自動駕駛),
參見知乎Live:理工科的你想要轉AI?快上車!
總結:
機器學習、資料科學因為處理資料量龐大,因此研究問題主要的方法還是凸優化模型,原因正是求解高效,問題可以scale。
雖然目前還很小眾,但是隨著計算機硬體能力的提高,GPU平行計算的流行,以及(非)凸優化演算法、模型的進化,想必非凸優化,甚至(混合)整數規劃會是未來的研究熱點。
這不,最近就有研究智慧演算法求解深度學習損失函式的paper:遺傳演算法,模擬退火演算法,粒子群演算法,神經網路等智慧演算法的作用?
No.3
作者:王源(運籌優化博士,機器學習半吊子)
之前看過Nesterov的 Introductory Lectures on Convex Programming 頗有一些收穫,再這裡就把Nesterov 關於凸函式的觀點簡單的解讀一下。
這個條件被稱為一階必要條件,什麼是必要條件呢,就是滿足這個條件的不一定是最優解,而不滿足的一定不是最優解。如果把在茫茫人海中尋找到你的最佳伴侶比喻成找到優化問題的最優解,那麼這個一階必要條件就相當於一個篩選條件,例如有房有車的。沒房沒車的人肯定不是最佳伴侶,下面僅僅在有房有車的人當中找最佳伴侶,這樣事情會變得簡單一些了。
一階必要條件可以幫我們篩選掉一些肯定不是區域性最優解的,讓問題變得簡單,但是這個一階必要條件有兩個致命傷:一是它是一個必要條件啊,必要條件多多少少看著就讓人有點不爽。我們辛辛苦苦用梯度法,擬牛頓法或者共軛梯度法找到了一個滿足必要條件的點,然後一階必要條件告訴我們,這個點可能是最優解,也可能不是。二是該條件是針對區域性最優解的,根本沒談全域性最優的事情,能不能找到全域性最優只能看運氣嘍,梯度法的初始點選得好興許能找到,也興許沒找到。概括以上兩點就是“區域性最優不一定,全域性最優全靠碰。”
那麼到這裡肯定就想問一下,有沒有辦法讓這個一階必要條件變成充要條件,同時讓區域性最優變成全域性最優的情況呢?
答案是有的,對一些特殊一點的而言,一階必要條件會變成充要條件。那這類性質非常好的函式長什麼樣呢?
答案是 凸函式。
也就是說對於是可微的凸函式而言,一階必要條件就變成了充要條件,同時區域性最優也升格為全域性最優。如果各位想看該命題的嚴謹證明的話 參考Introductory Lectures on Convex Programming 的chapter2即可。
到此為止,我們可以自信滿滿的說若是可微還是凸函式的話,滿足的點,一定是全域性最優解。哈哈,梯度法,擬牛頓法或者共軛梯度法等基於梯度的演算法都可以完完全全保證能收斂到全域性最優解上去。
所以說對優化問題而已 凸函式的性質簡直好到爆炸啊。個人感覺這就是凸優化為何那麼重要的原因之一吧。套用一句經典話語:優化問題的分水嶺不是線性和非線性,而是凸和非凸。
參考文獻
Nesterov, Yurii. "Introductory lectures on convex programming volume i: Basic course." Lecture notes (1998).
Allen-Zhu, Zeyuan. Natasha: Faster Non-Convex Stochastic Optimization via Strongly Non-Convex Parameter. International Conference on Machine Learning. 2017.