题主主要提了两个问题,这边分别回答一下。这个回答基于我个人的经验,未必说的到位,请各位看官轻喷。
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的结果,有兴趣的同学可见我这篇专栏文章的第二部分。
随手写写没想到也吐了不少嘈,我这边最后就再总结个几点吧:
- 做研究过程中,切忌轻易下结论。实际上,对很多看似已经“解决”的问题,你如果肯花点功夫研究研究,会发现总有很多细节是值得深思的。更不要说直接说一个大的研究领域就已经被“解决”了。我记得前不久还看到NeurlIPs文章的方向汇总,凸优化仍然是优化方向文章里数量最多(还是第二多,具体记不清了)的。因为实际上我前面还有很多没提,比如像现在很火的强化学习(或者说多阶段的随机动态规划)里面还有大量的凸优化问题没搞定。。
- 基础永远是重要的。而凸优化就是你做非凸优化研究的基础。这么些年来,我自己也逐渐体会,研究当中最常用的,真的还就是那些最基础的微积分,线性代数,概率统计的基本功。很多问题,如果你有基础,就都直接不是问题了;反过来,如果当初在学习过程中冒进,去追求最前沿,最时髦,最fancy的topic,却没好好打基础,你可能就会发现很多基本的知识本来都不应该成为障碍,最后却各种让你磕磕绊绊。
- 作为优化研究者,埋头研究的同时,一定要睁开眼睛看看业界的实际情况。当然,总有一部分优化大师是不在乎实际应用的(然而Nesterov, Nemirovski这样的人也是有应用文章的),有志做令人高山仰止的大师的就可以忽略我这条了。我只是想说,对于大多数做优化的人,我们实际上应该都是希望自己做的东西可以用在业界的实际问题当中。那么这个时候除了学理论知识,真的我们应该多hands on,get your hands dirty。我自己的体会是,往往都是在实际写代码求解问题的时候才会对很多知识有更深刻的理解,并且能找到真正值得研究的有意思的问题。
来源:知乎 www.zhihu.com
作者:覃含章
【知乎日报】千万用户的选择,做朋友圈里的新鲜事分享大牛。
点击下载
此问题还有 32 个回答,查看全部。
延伸阅读:
运筹学(最优化理论)如何入门?
最优化与运筹学 是一回事吗?