[关闭]
@ShawnNg 2016-10-27T14:58:07.000000Z 字数 9452 阅读 4008

凸优化

Convex Optimization Overview[1]

机器学习 数学基础



1 前言

在机器学习中,我们会经常优化函数的值,给定函数,我们要寻找该函数的最小值。最小二乘法(least-squares)逻辑斯蒂回归(logistic regression)支持向量机(support vector machines)等模型优化都可以看做一个优化问题。
一般来说,寻找函数的全局最优比较困难,但是有一种优化问题叫凸优化(optimazation problems),我们可以在合理的时间内找到全局最优的结果。
以下是一个凸优化的简单介绍,如果有兴趣深入了解可以阅读书籍《Convex Optimization》[2]

2 凸集(Convex Sets)

凸优化中,凸集的定义如下:
定义2.1:集合C是凸的,如果对于所有的


直观上可以这样理解,在集合中任选两点,在这两点的连线上的所有点都属于集合。所以我们称点为点的凸组合。Figure 1展示了凸集和非凸集。

convex set and non-convex set

2.1 例子

3 凸函数(Convex Fuctions)

凸函数,是凸优化中一个重要的概念。
定义3.1:函数是凸函数,如果函数的定义域是一个凸集,并且对于所有的,都有:

直观上可以这样理解,在函数上任意挑两点,两点的连线必然在两点间的函数值之上,如Figure 2所示:
convex fuction

3.1 凸性质的一阶条件

假设函数是处处可导的。是凸的,当且仅当是凸集,并且对于所有都有:

直观上可以这样理解,在函数上随便挑一个点,该点的切线必然在函数的下方,如Figure 3所示:
first-order condition

3.2 凸性质的二阶条件

假设函数处处二阶可导。是凸的,当且仅当是凸集,并且其海塞矩阵(Hessian)是半正定的(即,对所有都有:


这里的符号表示矩阵半正定(positive semidefiniteness),而不是指矩阵中每个元素。但是如果再一维的情况下,这就代表二次导数。假如海塞矩阵是正定矩阵,那么就是严格凸(strictly convex)的。

3.3 琴生不等式(Jensen's Inequality)

假设凸函数的基本定义为:


上述等式可以扩展到多个点:

再将上述等式扩展到积分形式:

由于积分为1,我们可以把看作是一个概率密度函数,所以尚属等式可以用以下形式表达:

最后一条等式就是著名的琴生不等式

3.4 水平子集(Sublevel Sets)

-sublevel set是比较重要的一种凸函数。给定一个凸函数,和一个实数-sublevel set定义如下:


换而言之,-sublevel set就是所有的点都符合的凸函数。

3.5 例子[TODO]

这里举一些凸函数的例子,先从单变量开始,然后推广到多变量。

4 凸优化问题(Convex Optimization Problems)

凸优化问题可以看做是以下形式:


其中是凸函数,是凸集,是优化变量。为了更加具体,我们可以改为以下形式:

其中是凸函数,是凸函数,是仿射函数,是优化变量。

值得注意的是,凸函数一定小于等于0。因为是0-sublevel set,可行域是多个凸集的交点,所以可行域也是凸的。如果我们限制某些凸函数,这样可行域将不会是凸集,这样我们就不能保证能找到全局最优解。同时,我们要注意,只有仿射函数才可以是等式约束。我们可以把等式约束看做是两个不等式约束,,所以只有当即是凸集又是凹集的时候才是一个有效的约束。

将优化问题的最优值表示为或者是 ,它等于目标方程再可行域中的最小值:


当优化问题无解时,取值为,当优化问题存在解使得无下界时,取值为。当时,称为最优解,当有界时,有可能有多个最优解。

4.1 凸优化问题的全局最优(Global Optimality)

首先,我们要定义两个概念,局部最优(locally optimal)全局最优(globally optimal)。局部最优可以认为是一个可行解附近没有比自己有更低的目标值的解。而全局最优是所有可行解中目标值最低的解。具体我们可以定义为:

定义4.1是可行解,并且存在使得所有的可行解满足时,是局部最优解

定义4.2是可行解,并且对于所有都满足足时,是全局最优解。

在凸优化问题中,一个最关键的点就是对于一个凸优化问题,所有的局部最优解都是全局最优解。直观上凸优化确实就是这么一回事,但我们可以证明:
假设是局部最优解,而不是全局最优解,所以存在一个可行解使得。在局部最优解的定义中,不存在一个可行解并且,但是我们可以选出一个点:


然后

然后,通过凸函数性质,得到:

并且当可行域是个凸集,都是可行解。所以是可行解并且,时,这与局部最优解的定义相违背,因此不可能是局部最优解。

4.2 凸优化问题的某些特定问题

因为各种原因,考虑一般凸规划问题的特定问题会更方便。对于这些特定问题,我们经常会设计一些可以解决大型问题并且十分高效的算法,因此你会看到这些特殊例子就是人们经常使用的凸优化技术。

其实,二次规划是线性规划的一般形式,平方约束的二次规划又是二次规划的一般形式,然而半定规划是平方约束的二次规划的更一般形式。

4.3 实例

在此之前,我们已经看到了凸优化中的大量的让人厌烦的数学和公式,接下来我们会进入最有趣的部分:使用这些技术去解决真正的问题。
- 支持向量机(Support Vector Machines,SVM)
凸优化在机器学习领域使用的最流行的其中一个应用就是SVM分类器。优化SVM分类器的算法可以描述为一个带有松弛变量的优化问题:


其中是优化变量,其中是由问题决定的。我们要将问题化为前面提到的形式。首先,我们定义优化变量为:

然后定义矩阵:

这里的是单位矩阵,是全为1的向量,X是所有训练数据的特征向量形成的矩阵,y是对应X每行的类标签:

在定义了这些矩阵后,SVM优化问题就可以转化为一个二次规划问题了。事实上,很容易就可以看出SVM规划问题有一个二次目标方程和线性约束,所以我们不需要将它化为标准形式了,只有当我们需要用一个要求输入是一个标准形式的解决方法时才需要。

4.4 实现:使用python实现线性SVM[TODO]

我们可以使用一些现成的软件包来解决凸优化问题,这是一种快速构建模型的方式,但是这些现成的包的实现会比最好的实现要慢,所以假如你有需要用一个更快的实现时,你需要自己完整实现一个。


[1] This is a page which is the by-product of a class called cs224d, wriiten by the teacher from Stanford university.Online:http://cs229.stanford.edu/section/cs229-cvxopt.pdf
[2] Stephen Boyd and Lieven Vandenberghe. Convex Optimization. Cambridge UP, 2004.Online:http://www.stanford.edu/~boyd/cvxbook/
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注