凸优化

转:https://www.jianshu.com/p/e969a50bb0a5?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

我们知道在机器学习中,要做的核心工作之一就是根据实际问题定义一个目标函数,然后找到它的最优解

不过求解这种优化的问题其实是很难的,但是有一类问题叫做凸优化问题,我们就可以比较有效的找到全局最优解。

 

例如,SVM 本身就是把一个分类问题抽象为凸优化问题,利用凸优化的各种工具(如Lagrange对偶)进行求解和解释。深度学习中关键的算法反向传播(Back Propagation),本质也是凸优化算法中的梯度下降算法。

凸优化的价值也在于思维转变,当我们在现实生活中遇到计算量接近无穷大的问题时,我们要想办法将模型转换成“凸优化问题”,因为凸优化已经相对嚼得比较烂,所以只要问题转化成凸优化,我们就可以分布迭代去运算

当然现实中绝大部分优化问题并不是凸优化问题,但是凸优化非常重要, 因为:

  • 还是有相当一部分问题是或等价于凸优化问题,例如下面会举例说明 SVM,最小二乘等。
  • 大部分凸优化问题解起来比较快。
  • 很多非凸优化或NP-Hard的问题可以转化(并非是等价的)为P的凸优化问题。并给出问题的界或近似。例如用对偶(Duality),松弛(Relaxation)等方法将一个优化问题转化为凸优化。

什么是凸优化?

关于凸优化,有几个基础概念:凸集,凸函数,凸优化问题,局部最优和全局最优。以及一个很重要的性质,就是所有局部最优点都是全局最优的

1. 凸集

意思是对这个集合的任何两个元素,我们如果画一条线,那么这线上的所有元素仍然属于这个集合:

下面这几个例子都是凸集:

Rn,因为对任意 x, y ∈ Rn, θx + (1 − θ)y ∈ Rn

Rn+ = {x : xi ≥ 0 ∀i = 1,...,n},因为 (θx+(1−θ)y)i =θxi +(1−θ)yi ≥0 ∀i。

范数球,∥ · ∥ 例如 {x: ∥x∥ ≤ 1}

映射子空间 Affine subspaces: {x ∈ Rn : Ax = b}

多面体 polyhedra: {x ∈ Rn : Ax ≼ b},即 Ax 的每个元素小于或等于 b 的对应元素

凸集的交集

半正定矩阵 Positive semidefinite matrices:A = AT 且 for all x ∈ Rn, xT Ax ≥ 0.

在文献中有详细的证明:
http://cs229.stanford.edu/section/cs229-cvxopt.pdf

只需要按照凸集的定义,任取这个集合的两个元素,以及 0 ≤ θ ≤ 1,如果可以证明 θx+(1−θ)y 仍然属于这个集合,那么它就是凸集

2. 凸函数:

它的含义就是在这个函数上任意取两个点,在它们之间画一条线,那么这两点之间的函数上的值需要在这条线以下。:

如何验证某个函数是否为凸函数呢?

最基本的,我们可以用凸度的一阶二阶条件:

一阶条件的含义就是,如果我们在这个函数上的任意一点画出它的切线,那么这条切线上的所有点都将在函数的下面。:

二阶条件中如果是一维的话,就相当于函数的二阶导数总是非负的。:

≽ 此处意思为半正定。

5. 性质

对于凸优化问题,有一个很重要的性质,就是所有局部最优点都是全局最优的。

 

下面这几个例子都是凸优化问题:

Linear Programming

Quadratic Programming

 

Quadratically Constrained Quadratic Programming

 

Semidefinite Programming

 


那么这些有什么用呢?

让我们用常见的算法举例,

1. SVM 的优化目标如下:

如果我们根据下面的形式,定义了 x,P,c,G,h,X,y,

那么 SVM 的优化目标就可以写成 Quadratic Programming 的形式:

 

所以这是个凸优化问题,
当然了我们可以简单地根据 SVM 具有二次的优化目标,以及线性的限制条件来判断,而无需转化成标准形式。

2. 最小二乘的优化目标:

如果我们做如下定义,可以看出它也是个 Quadratic Programming:


当我们拿到了一个凸的优化函数时,那么就有一大套公式定理可以帮我们解决问题了。
因为对凸优化的问题,在基础数学上面已经有了很多解决方法,例如可以将凸优化问题Lagerange做对偶化,然后用Newton、梯度下降算法求解等等。

推荐凸优化入门资源:

  • book Convex Optimization by Stephen Boyd and Lieven Vandenberghe (available for free online),
  • EE364,a class taught here at Stanford by Stephen Boyd

参考:
http://cs229.stanford.edu/section/cs229-cvxopt.pdf
https://www.zhihu.com/question/24641575

 

 

 

 

 

 

 

 

 

 

 

 

 


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值