① 支持向量机原理详解(六): 序列最小最优化(SMO)算法(Part I)
序列最小最优化算法原理详解:
1. 算法背景与目的: 提出者:SMO算法由Platt于1998年提出。 目的:旨在解决训练支持向量机时遇到的大规模二次规划问题。
2. 算法核心思想: 分解策略:SMO算法将大问题分解为一系列小型的二次规划子问题。 解析求解:通过解析求解这些子问题,而不是进行数值优化,以节省计算时间。
3. 停机条件: 优化变量条件:优化变量满足特定条件时,算法停机,保证最终收敛至最优解。
4. 优化变量选择与迭代: 两变量子问题:每次优化两个变量,确保至少一个变量违反KKT条件,以维持算法的收敛性。 启发式规则:在选择优化变量时,首先遍历整个训练集寻找可能违反KKT条件的变量,然后聚焦于非边界样本进行优化。
5. KKT条件检查: 精度内检查:算法在精度范围内进行KKT条件的比较,以加速收敛速度并处理浮点运算的舍入误差。
6. 算法伪代码与实现细节: 伪代码:SMO算法的伪代码在相关文献中给出。 实现细节:具体实现细节在文献[14]中有所描述,涉及算法的核心高效策略,使SVM的训练过程更加高效且可扩展。
通过上述内容,我们可以对序列最小最优化算法的基本原理有一个初步且全面的了解。
② 史上最详细单纯形法—从理解到计算(带约束规划问题)
1947年,Dantzig在美国五角大楼工作时,经常被空军要求解决实际计划问题,如分配人力、经费、飞机等资源。他针对这些问题建立了线性规划模型,并提出了着名的单纯形法(Simplex Method)。
基本问题:[公式]
详细来说,最优化方程可以写成如下形式:[公式]
定理一:线性规划的可行域是凸集。设可行域的极点为[公式],极方向为[公式],任何可行点均可以表示为[公式]。由定理一可得到的关键最优值是[公式]的加权组合。如果存在极方向[公式],则[公式]可以无限大,因此不存在最优值。如果存在极方向[公式],则[公式]必取0。所以最优化其实是优化到某个极点上。
下面对约束方程引入松弛变量化为A矩阵。假设[公式],[公式],[公式]是自由未知量,相当于自由基,取不同的值则方程会有不同的解。[公式]是基变量,[公式]为非基变量,这时的x就是一个基本可行解,所谓基本可行解就是符合约束条件的一个解,可以是很多种。
这里最关键的是理解[公式]。之前说过,最优解一定在某个极点上,这里[公式]其实就是一个极点,那[公式]是什么那?是移动量。请继续看解释:
以一个二维的最优问题为例,[公式]。加入松弛变量,[公式]。画出图解,可以发现不停地使不同的量等于0,就是一直在换不同的极点作为可行解。如果每次只换一个变量为0,那么就相当于每次移动都是从一个极点在沿着一条边移动到另一个极点。所以线性规划最优化的过程就是在不停的换极点作为可行解试,试出来一个最优的解就达到目的了。
每次试都是沿着一条边,对于三维优化问题,就是沿着空间中的一条棱。如下图所示。
而这就是单纯形法。现在我们已经有了一个基本可行解[公式],我们的目的是沿着某个棱,换到不同的极点上,但是换这个操作不便于用数学方法表示,换的过程就是[公式]中的不同元素为0的过程,例如上述二维优化的例子,[公式]其实就是[公式],让[公式]中某两个为0其实完全可以只通过改变[公式]做到,即在基本可行解的基础上,每次减去不同的[公式]。
当然我们不能随便移动,我们应该保证每次都向着最佳的方向移动,这样才能最快地到达最优极点。由我们要最小化的代价函数入手:[公式]。
注:[公式]是N矩阵的第j列,N是松弛变量对应的系数矩阵,所以在上述二维例子中,j从3开始取。[公式]是行向量。显而易见,如果想使[公式]最快的减小,直接减去最大的[公式],([公式]),其他[公式]就好了(因为我们想要的是每次只沿着一个棱移动,所以只能改变一个平移量的值,其他都还是保持0不变)。
现在我们想找到最大的[公式],但是[公式]的取值不确定,无法确定最大的?只能分两步进行:1.按[公式]算就成了。2.怎么办?[公式]不取0的目的是换到另一个极点,或者说一个[公式]不为0,另一个[公式]就要为0,回顾[公式],写成如下形式[公式]。注意[公式]对应为0的那个[公式]可以是任意一个,即可以使[公式]为0,也可以使[公式]或其他为0。所以,[公式]的最大取值即为[公式]。但是:我们应该取最小的才行,因为要满足所有[公式],如果[公式]取值过大,可能[公式]为0了,但是[公式]却变为负数了。即取[公式]。
收敛定理:单纯形表。上面说了单纯形法的理论,但是单纯形最伟大的地方不在于理论上,而是实践上,单纯形表可以使我们方便求解,也方便我们写程序。单纯表形如:来一个例子。
例:用单纯形方法解下列问题[公式],[公式]。引入松弛变量[公式],把上述问题化为标准形式[公式]。①化为标准形式,我们可以得到第一张表:基变量为[公式],对应[公式]。根据公式补全[公式],[公式],最大,所以选[公式]入基,接下来算[公式],得到完整的单纯形表如下,选最小的[公式]对应的基变量做出基变量。[公式]对应的[公式]最小,故[公式]出基。②[公式]入基,[公式]出基,得到第二张表。[公式],[公式],[公式],[公式]。补全[公式]。③得到第三张表:[公式]均为负,得到最优值,利用[公式]计算最优值,此时[公式],[公式]。
③ 什么是最优化
最优化是应用数学的一个分支,主要指在一定条件限制下,选取某种研究方案使目标达到最优的一种方法。最优化问题在当今的军事、工程、管理等领域有着极其广泛的应用。
梯度下降法是最早最简单,也是最为常用的最优化方法。
梯度下降法实现简单,当目标函数是凸函数时,梯度下降法的解是全局解。一般情况下,其解不保证是全局最优解,梯度下降法的速度也未必是最快的。
梯度下降法的优化思想是用当前位置负梯度方向作为搜索方向,因为该方向为当前位置的最快下降方向,所以也被称为是”最速下降法“。最速下降法越接近目标值,步长越小,前进越慢。
牛顿法是一种在实数域和复数域上近似求解方程的方法。方法使用函数f(x)的泰勒级数的前面几项来寻找方程f(x) = 0的根。牛顿法最大的特点就在于它的收敛速度很快。
拟牛顿法是求解非线性优化问题最有效的方法之一,其本质思想是改善牛顿法每次需要求解复杂的Hessian矩阵的逆矩阵的缺陷,它使用正定矩阵来近似Hessian矩阵的逆,从而简化了运算的复杂度。拟牛顿法和最速下降法一样只要求每一步迭代时知道目标函数的梯度。
通过测量梯度的变化,构造一个目标函数的模型使之足以产生超线性收敛性。这类方法大大优于最速下降法,尤其对于困难的问题。另外,因为拟牛顿法不需要二阶导数的信息,所以有时比牛顿法更为有效。如今,优化软件中包含了大量的拟牛顿算法用来解决无约束,约束,和大规模的优化问题。
共轭梯度法是介于最速下降法与牛顿法之间的一个方法,它仅需利用一阶导数信息,但克服了最速下降法收敛慢的缺点,又避免了牛顿法需要存储和计算Hesse矩阵并求逆的缺点,共轭梯度法不仅是解决大型线性方程组最有用的方法之一,也是解大型非线性最优化最有效的算法之一。
在各种优化算法中,共轭梯度法是非常重要的一种。其优点是所需存储量小,具有步收敛性,稳定性高,而且不需要任何外来参数。
启发式方法指人在解决问题时所采取的一种根据经验规则进行发现的方法。其特点是在解决问题时,利用过去的经验,选择已经行之有效的方法,而不是系统地、以确定的步骤去寻求答案。
启发式优化方法种类繁多,包括经典的模拟退火方法、遗传算法、蚁群算法以及粒子群算法等等。
作为一种优化算法,拉格朗日乘子法主要用于解决约束优化问题,它的基本思想就是通过引入拉格朗日乘子来将含有n个变量和k个约束条件的约束优化问题转化为含有(n+k)个变量的无约束优化问题。拉格朗日乘子背后的数学意义是其为约束方程梯度线性组合中每个向量的系数。
将一个含有n个变量和k个约束条件的约束优化问题转化为含有(n+k)个变量的无约束优化问题,拉格朗日乘数法从数学意义入手,通过引入拉格朗日乘子建立极值条件,对n个变量分别求偏导对应了n个方程,然后加上k个约束条件(对应k个拉格朗日乘子)一起构成包含了(n+k)变量的(n+k)个方程的方程组问题,这样就能根据求方程组的方法对其进行求解。