转自西瓜书《机器学习》
----------------------------------------------------------------------------------------------------------------------------------
简单介绍一下凸二次规划,转自博客二次规划(quadratic programming)
二次规划是指,带有二次型目标函数和约束条件的最优化问题。二次规划的一般形式可以表示为,如下图式子。
其中G是Hessian矩阵,τ是有限指标集,c,x和{ai},都是R中的向量。
如果Hessian矩阵是半正定的,则我们说式 1是一个凸二次规划,存在全局最优解;
如果Hessian矩阵是正定的,则存在全局唯一最优解;
如果Hessian矩阵是非正定的,则为非凸二次规划,存在多个平稳点和局部极小值点。
那么如何求解式(6)呢?不难发现,这是一个二次规划问题,可使用通用的二次规划算法来求解;然而,该问题的规模正比于一训练样本,这会咋实际任务中造成很大的开销,为了避开这个障碍,人们通过利用问题自身的特性,提出了很多高效算法,SMO(Sequential Minimal Optimization)是其中一个著名的代表。
SMO的基本思路是固定之外的所有参数,然后求上的极值,由于存在约束,若固定之外的其他变量,则可由其他变量导出。于是,SMO每次选择两个变量,并固定其他参数,这样,在参数初始化后,SMO不断执行如下两个步骤直至收敛:
(1)选取一对需要更新的变量
(2)固定之外的参数,求解式(6)获得更新后的
注意到只需选取的有一个不满足KKT条件,目标函数就会在迭代后增大。直观来看,KKT条件违背程度越大,则变量更新后可能导致的目标函数数组增幅越大。于是,SMO先选取违背KKT条件程度最大的变量。第二个变量应选择一个使目标函数增长最快的变量,但由于比较各变量所对应的目标函数值增幅的复杂度过高,因此SMO采用了一个启发式:使选取两变量所对应样本之间的间隔最大。一种直观的解释是,这样的两个变量有很大的差别,与对两个相似的变量进行更新比较,对他们进行更新带给目标函数数值更大的变化。
SMO算法之所以高效,恰由于在固定其他参数后,仅优化两个参数的过程能做到非常高效。具体来说,仅考虑时,式(6)中的约束可重写为
其中
是使(6)中约束条件成立的常数。用
消去式(6)中的变量,则得到一个关于的单变量二次规划问题,仅有的约束是。不难发现,这样的二次规划问题具有闭式解,于是不必调用数值优化算法即可高效地计算出更新后的。
如何确定偏移项b呢?注意到对任意支持向量都有,即
其中为所有支持向量的下标集。理论上,可选取任意支持向量并通过求解上式获得b,但现实任务中常采用一种更鲁棒的做法:使用所有支持向量求解的平均值: