凸优化和非凸优化

2/10/2017来源:ASP.NET技巧人气:723

凸优化和非凸优化

2014-09-15 09:31 14094人阅读 评论(2) 收藏 举报  分类: 数学中最优化问题的一般表述是求取x^{*}\in \chi ,使f(x^{*} )=min\{f(x):x\in \chi \},其中x是n维向量,\chix的可行域,f\chi上的实值函数。 凸优化问题是指\chi闭合的凸集f\chi上的凸函数的最优化问题,这两个条件任一不满足则该问题即为非凸的最优化问题

其中,\chi 凸集是指对集合中的任意两点x_{1},x_{2}\in \chi,有tx_{1}+(1-t)x_{2}\in \chi,t\in[0,1],即任意两点的连线段都在集合内,直观上就是集合不会像下图那样有“凹下去”的部分。至于闭合的凸集,则涉及到闭集的定义,而闭集的定义又基于开集,比较抽象,不赘述,这里可以简单地认为闭合的凸集是指包含有所有边界点的凸集。

注意:中国大陆数学界某些机构关于函数凹凸性定义和国外的定义是相反的。Convex Function在某些中国大陆的数学书中指凹函数。Concave Function指凸函数。但在中国大陆涉及经济学的很多书中,凹凸性的提法和其他国家的提法是一致的,也就是和数学教材是反的。举个例子,同济大学高等数学教材对函数的凹凸性定义与本条目相反,本条目的凹凸性是指其上方图是凹集或凸集,而同济大学高等数学教材则是指其下方图是凹集或凸集,两者定义正好相反。 为什么要求是凸函数呢?因为如果是下图这样的函数,则无法获得全局最优解。 为什么要求是凸集呢?因为如果可行域不是凸集,也会导致局部最优 实际建模中判断一个最优化问题是不是凸优化问题一般看以下几点: 目标函数f如果不是凸函数,则不是凸优化问题决策变量x中包含离散变量(0-1变量或整数变量),则不是凸优化问题 约束条件写成g(x)\le0时,g如果不是凸函数,则不是凸优化问题 之所以要区分凸优化问题和非凸的问题原因在于凸优化问题中局部最优解同时也是全局最优解,这个特性使凸优化问题在一定意义上更易于解决,而一般的非凸最优化问题相比之下更难解决。

非凸优化问题如何转化为凸优化问题的方法: 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 计算数学并不爱pde 2 人赞同 有个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 time 3 人赞同 我们学校就不按照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 Optimization 63 人赞同 首先,优化领域只有两种问题可以认为是完全可以解决的,那就是最小二乘法和线性规划优化问题。哪怕是凸优化问题,也并没有定论一定能解决。所以“现有优化方法都能解决”是一个错误的表述。 其次,凸优化之所以重要是因为以下几个原因: 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 条评论 感谢  分享  收藏 • 没有帮助 • 举报 • 作者保留权利 Jeff 22 人赞同 凸优化(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 Optimization https://web.stanford.edu/~boyd/cvxbook/bv_cvxbook.pdf PS: 回去找一下,秀一张Boyd的扉页签名。大家等我。 -------------------------------------------------------------------------------------- 最近发现Bimitri P. Bertsekas的Nonlinear Programming也非常棒,从更数学的角度展开,推荐一读。Boyd那个签名照不知道存哪里了。。。 -------------------------------------------------------------------------------------- 签名找到拉~~~ 编辑于 2016-10-31 20 条评论 感谢  分享  收藏 • 没有帮助 • 举报 • 作者保留权利 xh.along 2 人赞同 其他行业不清楚,说说机器学习(包括统计)吧,基本上所有机器学习问题都是优化问题,而优化问题中凸优化是很大类且解法丰富,如果问题能转化为凸优化问题,则必能解!