SMO算法理解
我们知道SVM的对偶问题如下:
这是一个二次规划问题,可以使用通用的二次规划算法来求解,然而,该问题的规模正比于训练样本数,这会在实际任务中造成很大的开销,而SMO算法就是利用问题本身的特性来避开这个障碍,从而高效求解这个问题。
从公式$(1)$我们可以看出它只是$\alpha$的函数,我们的目的就是求出一个$\alpha$使公式$(1)$有最大值,同时满足下面的限制条件。假设我们找到了一个$\alpha =[\alpha_1,\alpha_2,\alpha_3\cdots\alpha_N]^T$,它就是上面的最优解,那么我们就可以利用KKT条件求解出原问题的最优解$(W,b)$,进而我们可以得到分离超平面:
我们又知道原问题满足的限制条件为:
根据KKT条件我们可以知道:
这个结果可以参考我上一篇博客:SVM算法理论推导。这里我们为了讨论方便,假设不进行低维到高维的映射,
公式(3)可以写作:
公式$(4)$就可以写成:
当$\alpha_i$取不同的值时我们可以得到以下三种不同的结果:
综上我们可以得到,当求得最佳$\alpha$时,所有样本必须满足:
那么如果我找到了一个$\alpha$,它除了满足公式$(1)$的限制条件,还满足公式(7)的条件,那么这个$\alpha$就是对偶问题的最优解。所以我们求解$\alpha$的思路就来了:先初始化一个$\alpha$,让它满足对偶问题的两个初始条件,即公式 $(1)$ 的条件,然后我们不断去优化它,使它确定的分离超平面满足公式$(7)$的条件,同时在优化的过程中始终使它满足对偶问题的两个初始条件,这样就可以找到最优解。
$\alpha$的优化必须遵循两个原则:
- 每次优化时,必须同时优化$\alpha$的两个分量,因为如果只优化一个分量的话,新的$\alpha$就不满足公式$(1)$中的限制条件的等式条件。原因:$\sum_{i=1}^N\alpha_i y_i=0$中$y_i$的取值只有正负1,所以如果只有一个$\alpha_i$变了的话,这个等式条件就不满足了。
- 每次优化的两个变量应当是违反公式$(7)$条件比较多的。
我们先选第一个分量,先从大于0小于C的分量中选择,实在没有选择时再从等于0和等于C的分量中选。我们选择两个分量,假设就是$\alpha_1、\alpha_2$,即$\alpha$的第一个和第二个分量,以方便后面讨论。此时我们可以将其余的分量看做固定的值。因为存在约束条件:
所以如果我们确定了$\alpha_1$优化后的值,我们就可以通过此关系确定$\alpha_2$优化后的值。
那么怎么知道$\alpha_1,\alpha_2$优化后,其违反公式$(7)$条件的程度变小了呢,这时我们来看一下对偶问题:
虽然我们不知道怎么优化后使其违反公式$(7)$条件的程度变小,但是我们可以让它们优化后使目标函数的值变大,使目标函数值变大,肯定是朝着正确方向优化的,也肯定是朝着违反公式$(7)$程度变小的方向优化。这时对偶问题就变成了简单的二次函数优化问题,我们将$\alpha_1,\alpha_2$之外的变量看作常数,则公式$(8)$就可以化为:
通过合并同类项可得:
这个时候我们就可以进一步将公式$(10)$化简:
根据公式$(8)$中的限制条件,我们可以得到:
这个时候问题就变得很简单了,假设$y_1 = 1,y_2 = 1$,则公式$(12)$的第一个限制条件就变成了:
这时我们将:
代入目标函数就可以得到关于 的一元二次函数。对 求导,同时令导数为零就可以求出 。观察限制条件,有:
进而求得:
再加上原有的限制:
可得:
如果 在这个范围内,那就使用这个求出,完成一轮迭代。如果不在这个范围内,进行截断,得到新的,再求得,此轮迭代照样结束。不断重复上述过程,直到的每一个分量都被优化完成,此时我们也就得到了最优的值。至于如何对进行截断,以后再说。
这篇文章主要参考了下面这位大佬的博客,加上了一些自己的记录,以便随时翻阅,有错误的地方还请大家批评指正。
参考博客链接:https://blog.csdn.net/qq_39521554/article/details/80723770