(系列笔记)10.SVM系列(3)
SVM——对偶学习算法
对偶问题
上一篇z,g分别代表一个二元函数和一个一元函数,一般情况下,我们用x代表一个函数的自变量,而这个x本身可以是多维的。而且,同一个函数可能同时既有等式约束条件,又有不等式约束条件。
主问题
考虑在d维空间上有m个等式约束条件和n个不等式约束条件的极小化问题,这样的问题可以写作:
我们把上述问题称为“原始最优化问题”,也可以叫做“原始问题”或“主问题”。
为了解决原始问题,我们引入拉格朗日乘子 和,构造拉格朗日函数:
然后,再设:
由上式子得出:
这里的:
我们称为主问题的对偶问题,和称为对偶变量
强对偶及求解对偶问题
设对偶问题的最优解为,显然有。
若,则我们将主问题和对偶问题的关系称为强对偶性,否则称为弱对偶性。显然,强对偶性如果成立,我们就可以通过最优对偶问题来打到优化主问题的目的了。
强对偶性成立
如果主问题是凸优化问题,也就是说当 (1、2、3需要同时成立):
- 拉格朗日函数中的和都是凸函数;
- 是仿射函数;
- 主问题可行域中至少有一点是的不等式约束严格成立。即存在x,对所有j,均有
注意:当主问题和对偶问题存在强对偶性时,存在和,分别为主问题的解和对偶问题的解的充分必要条件:它们满足KKT条件。
通过对偶问题求解主问题
当强对偶性成立时,为了解决主问题:
4. 构造拉格朗日函数,引入非负参数的拉格朗日算子去给目标函数加上限制;
5. 求拉格朗日函数对主变量的极小——将拉格朗日函数对主变量求偏导,令其为零后得出主变量与对偶变量的数值关系,由此把对主变量进行极小化的拉格朗日函数转化为一个对偶变量的函数;
6. 求上面第2步得出的函数对对偶变量的极大
由此一来,就将解主问题转化成极大极小问题,接下来,我们用这个方法求解线性可分SVM的目标函数。
线性可分SVM的对偶问题
主问题
SVM的主问题:
主问题的强对偶性
判断线性可分SVM主问题是否是强对偶的:
- 是凸函数;
- 也是凸函数(线性函数是凸函数);
- 想想我们是如何构造不等式约束条件的——对于所有位于最大分割超平面两侧,距离最大分割超平面距离为的辅助超平面上的点,有,而对这两个辅助平面之外的点,则有。因此,主问题可行域中,至少有一点使得不等式条件严格成立。
所以,线性可分SVM 的目标函数可以通过求解其对偶问题来求解。
使用对偶算法求解线性可分SVM的步骤
步骤1:对主问题构造拉格朗日函数
引入拉格朗日乘子,其中,得到拉格朗日函数:
步骤2:求拉格朗日函数对于 的极小
补充知识:
我们先将拉格朗日函数对 和 求偏导,然后分别令两个偏导结果为0,之后得出了下列数值关系:
将这两个等式带入拉格朗日函数,得:
步骤3:求对的极大
也就是对偶问题:
步骤4:由对偶问题求
步骤5:由求
由步骤1已知:
,已知,已由上一步求出,将它们带入上式,求。
步骤6:由于求求
都已经求出来了。
因为是整体约束条件;又因为对于所有支持向量,都有,因此,所有大于0的所对应的必然是支持向量。否则,如果,则$\alpha_k^*(1-y_k(wx_k+b))<0,不符合约束条件。
注意:
那么既然哪些对是支持向量都已经清楚了,理论上讲,我们随便找一个支持向量,把它和带入:,求出b即可。
为了更加鲁棒,我们可以求所有支持向量的均值:
步骤7:求最终结果
SMO(Sequetial Minimal Optimization)算法
先看一下优化目标:
一共有m个参数需要优化,这是一个典型的二次规划问题,我们可以直接用二次规划方法求解。或者,为了节约开销我们也可以用 SMO 算法。SMO 是一种动态规划算法,它的基本思想非常简单:每次只优化一个参数,其他参数先固定住,仅求当前这一个优化参数的极值。
然而,我们的优化目标有约束条件:
如果一次只能优化一个参数,就没法体现约束条件了。改进一下:
步骤1:
选择两个需要更新的变量和,固定他们以外的其他变量。这样约束条件:
其中:
这样由此得出:,也就是我们可以用的表达式代替,将这个替代式带入优化目标函数。就相当于把目标问题转化成了一个单变量的二次规划问题,仅有的约束是:
步骤2:
对于仅有一个约束条件的最优化问题,我们完全可以在上,对问题函数求(偏)导,令导数为零,从而求出变量值
确定新值后,更新和
步骤3:
多次迭代上面1-2步,直到收敛。
SMO算法可以自己研究推导过程、以及如何选每次来提高效率等。