凸优化和机器学习
CSDN的博主poson在他的博文《机器学习的最优化问题》中指出“机器学习中的大多数问题可以归结为最优化问题”。我对机器学习的各种方法了解得不够全面,本文试图从凸优化的角度说起,简单介绍其基本理论和在机器学习算法中的应用。
1.动机和目的
人在面临选择的时候重视希望自己能够做出“最好”的选择,如果把它抽象成一个数学问题,那么“最好的选择”就是这个问题的最优解。优化问题,就是把你考虑的各个因素表示成为一组函数(代价函数),解决这个问题就是在一集备选解中选择最好的解。
那么,为什么我们要讨论凸优化而不是一般的优化问题呢?那时因为凸优化问题具有很好的性质——局部最优就是全局最优,这一特性让我们能够迅速有效的求解问题。(实际上就是太一般的优化问题讨论不来)
2.凸优化的定义
首先明确两个定义:
(1) 如果中任意两点之间的线段任在中,那么集合被称为凸集。即对任意和满足的都有
(2) 函数是凸函数,则是凸集,且对于任意在任下有
Stephen Boyd在他的《convex optimization》中定义凸优化问题是形如
的问题,其中为凸函数。也就是说,凸优化问题是指需要最小化的函数(代价函数)是凸函数,而且定义域为凸集的问题。
3.凸优化问题的一般求解方法
有些凸优化问题比较简单,是可以直接求解的,譬如二次规划,这里不做说明。求解凸优化问题,就要利用该问题的“凸”性——只要我一直朝着代价函数减小的方向去,那么我一定不会走错!这就是下降方法的基本思想。
《convex optimization》这本书中,将凸优化问题分为无约束优化、等式约束优化和不等式约束优化分别介绍了其算法,然其本质并无区别。下降方法即产生一优化点列其中
并且。此处表示迭代的步长(比例因子),表示的是搜索方向(搜索步径)。下降方法指只要不是最优点,成立。 以下内容均来自Stephen Boyd的《convex optimization》及其中文译本。
搜索步径
一旦确定了搜索方向,那么我们可以通过求解得到搜索步径,当求解该问题成本较低时,可以采用该方法。该方法称为精确直线搜索。
然而实践中一般采用非精确直线搜索方法,譬如回溯直线搜索。算法如下图:
下降方向
在各个领域都广为应用的LMS算法也称为随机梯度算法(LMS算法和这里算法的区别和联系应该会另写一篇)。用负梯度作为下降的方向是一种和自然的选择,此外还有Newton方法。而最速下降方法是定义出的在某一特定范数下的方法。梯度下降和Netwon方法分别是二次范数和Hessian范数下的最速下降方法。算法的收敛性和Hessian矩阵有关,此处不详细说明。
等式约束
对于标准的凸优化问题,等式约束是仿射的,这也就意味着该优化问题的定义域是一个向量子空间。一个自然的想法是在这个空间内进行下降,这种想法被证明是可行的。根据初始迭代点的兴致,可以分为两类。
(1)初始点可行:在可行域内迭代
(2)初始点不可行:迭代过程中逐步靠近可行域
不等式约束
如果我们不能解决一个问题,那么就消除这个问题。
采用示性函数可以将不等式约束隐含在代价函数中,这里带来的问题是——代价函数非凸。障碍方法被引入以解决这个问题。(内点法)这样,不等式约束就变成了等式约束或是无约束的情况了。
如果,我不知道该怎么选择搜索方向?
既然真的不知道,那就找一套合适的规则,避开选择方向这个问题吧!
——坐标下降法
坐标下降法如下所示(可参考维基百科)
坐标下降方法是一种下降方法,但是和梯度下降不同,坐标下降法采用一维搜索,也就是说在每次迭代过程中,下降方向都是平行与坐标轴的。由于下降方向是确定的,因此坐标下降方法并不涉及到寻找搜索方向这一过程。迭代过程图如下所示:
4.KKT条件
面临一个凸优化问题,直接采用下降方法是一个不明智的选择——很有可能你还在迭代,别人已经把结果求出来了。或者,别人把原问题转换成为一个更容易求得的问题。KKT条件是最优点需要满足的条件,如下所示
前两个条件是约束给出的,后三个条件涉及到(拉格朗日)对偶函数。对偶函数定义了最优值得下界。
定义对偶问题的最优解为,原问题的最优解为,如果,则强对偶性成立。这个时候对偶函数才起到了左右。(要不然求个下界没什么用处)当凸优化问题满足Slater条件时,强对偶性是成立的。
由此可以导出KKT条件的后三个式子——不等式约束Lagrange乘子大于等于0,强对偶性成立,对偶函数梯度为0。
5.机器学习算法举例
支持向量机(SVM)
对于线性可分的两类而言,SVM的目的是找出最优的分离面。这个最优的判断准则是和点的距离最远。这个问题可以表示为如下形式
SVM算法火了很多很多年了,博客JerryLead里用5篇写了SVM的基本方法和理论,可以去看他的。支持向量机中涉及到了KKT条件和Slater约束(实际上更准确来说求解的是对偶问题的解),以及和坐标下降法有一定关系的SMO算法。
主分量分析(PCA)
主分量分析是无监督学习。主分量分析是统计模式识别和信号处理中进行数据压缩的一种标准方法。
特征选择的过程中,理论上“数据空间”到“特征空间”这一个线性变化的过程不会改变数据的维数。在需要对数据进行维数压缩的情况下,我们希望截断x后,在均方误差意义下最优。principal components 的意思就是,将数据投影到特征空间后,留下的分量是最主要的。
主成分中的“主要”指的是含有原信号的最多信息,信息在这里采用的是方差来描述。(信息熵难以计算,而方差作为二阶统计信息,在一定程度上可以表示其包含的信息)PCA中采用了一组正交基来表示,所以各个向量是两两正交的,并且方差和向量的范数有关,所以限定方向向量的范数为1(采用欧几里德范数)。在以上假设下,求解凸优化问题就能得到PCA的解析解。
在以上假设下,首先考虑输出是一维的情况,假设输入为且均值为0,输出满足
那么输出的方差表示为
那么,优化问题可表示为
显然,这是一个凸优化问题,利用KKT条件有
这就意味着,当取对应的最大特征值的特征向量时,输出具有最大的方差。同理,当输出为多维时,可以采用数学归纳法求得各个分量。对应第分量,需要求解的优化问题是
易知第n分量对应的向量为第n大特征值的特征向量,这里仅用了KKT条件就求得了对输入进行主分量分析的方法。
6.总结
前段时间我问自己一个问题“人是如何确定世界最高峰的”,这显然不是一个凸优化问题。或许在最初的时候,生活在平原上的人们发现了一处高地,他们爬了上去,认为这就是“世界最高峰”。
但很遗憾的是,这并不是一个凸优化问题。后来,人们走到了更多的地方,发现有更高的山,不断的修改自己的认知。世界是非凸的,没有那么美妙的性质可以利用,我们必须不断修正自己的认知,扩展自己的见识,才能站在更高的地方,领略不一样的风景。