為什麼凸優化這麼重要?
題主主要提了兩個問題,這邊分別回答一下。這個回答基於我個人的經驗,未必說的到位,請各位看官輕噴。
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的一系列非凸優化演算法的文章中所謂的非凸性的刻畫仍然是基於此衍生出來的:
我們知道它裡面這個刻畫非凸性的引數 如果取成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也頂多要算個幾小時就能找到全域性最優解,無近似)
與此相對應的, 即使是一個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的結果,有興趣的同學可見我這篇專欄文章的第二部分。
覃含章:Copositive Programming簡介隨手寫寫沒想到也吐了不少嘈,我這邊最後就再總結個幾點吧:
- 做研究過程中,切忌輕易下結論。 實際上,對很多看似已經“解決”的問題,你如果肯花點功夫研究研究,會發現總有很多細節是值得深思的。更不要說直接說一個大的研究領域就已經被“解決”了。我記得前不久還看到NeurlIPs文章的方向彙總,凸優化仍然是優化方向文章裡數量最多(還是第二多,具體記不清了)的。因為實際上我前面還有很多沒提,比如像現在很火的強化學習(或者說多階段的隨機動態規劃)裡面還有大量的凸優化問題沒搞定。。
- 基礎永遠是重要的 。而凸優化就是你做非凸優化研究的基礎。這麼些年來,我自己也逐漸體會,研究當中最常用的,真的還就是那些最基礎的微積分,線性代數,概率統計的基本功。很多問題,如果你有基礎,就都直接不是問題了;反過來,如果當初在學習過程中冒進,去追求最前沿,最時髦,最fancy的topic,卻沒好好打基礎,你可能就會發現很多基本的知識本來都不應該成為障礙,最後卻各種讓你磕磕絆絆。
- 作為優化研究者,埋頭研究的同時,一定要睜開眼睛看看業界的實際情況 。當然,總有一部分優化大師是不在乎實際應用的(然而Nesterov, Nemirovski這樣的人也是有應用文章的),有志做令人高山仰止的大師的就可以忽略我這條了。我只是想說,對於大多數做優化的人,我們實際上應該都是希望自己做的東西可以用在業界的實際問題當中。那麼這個時候除了學理論知識,真的我們應該多hands on,get your hands dirty。我自己的體會是,往往都是在實際寫程式碼求解問題的時候才會對很多知識有更深刻的理解,並且能找到真正值得研究的有意思的問題。
來源:知乎 www.zhihu.com
作者:覃含章
【知乎日報】千萬使用者的選擇,做朋友圈裡的新鮮事分享大牛。點選下載
此問題還有32 個回答,檢視全部。
延伸閱讀:
最優化與運籌學 是一回事嗎?