SMO要解决的问题是什么?
经过漫长的探索,我们建立了SVM模型,但是这个模型中还剩下一个未知参数需要求解,SMO就是求解这个参数的一种高效的方法。
我们需要解决的终极问题是:
max α ∑ i = 1 n α i − 1 2 ∑ i = 1 n ∑ j = 1 n α i α j y i y j ⟨ x i T x j ⟩ \max \limits_{α}∑^n_{i=1}α_i−\dfrac{1}{2}∑^n_{i=1}∑^n_{j=1}α_iα_jy_iy_j⟨x^T_ix_j⟩ αmaxi=1∑nαi−21i=1∑nj=1∑nαiαjyiyj⟨xiTxj⟩
s . t . 0 ≤ α i ≤ C i = 1 , . . . . , n s.t.\quad 0≤α_i≤C \quad i=1,....,n s.t.0≤αi≤Ci=1,....,n
∑ i = 1 n α i y i = 0 ∑^n_{i=1}α_iy_i=0 i=1∑nαiyi=0
我们做一个简单的变形,上述问题等价于:
min α 1 2 ∑ i = 1 n ∑ j = 1 n α i α j y i y j ⟨ x i T x j ⟩ − ∑ i = 1 n α i \min \limits_{\alpha} \frac{1}{2} \sum_{i=1}^n \sum_{j=1}^n\alpha_i \alpha_j y_i y_j \langle {x_i^T x_j} \rangle - \sum_{i=1}^n \alpha_i αmin21i=1∑nj=1∑nαiαjyiyj⟨xiTxj⟩−i=1∑nαi
s . t . 0 ≤ α i ≤ C i = 1 , . . . , n s.t. \qquad 0 \leq \alpha_i \leq C \quad i=1,...,n s.t.0≤αi≤Ci=1,...,n
∑ i = 1 n α i y i = 0 \sum_{i=1}^n \alpha_i y_i = 0 i=1∑nαiyi=0
这就是我们要最终想要解决的问题,后面所有的努力,都是为了寻找一个满足约束条件的
α = [ α 1 , . . . , α n ] \alpha=[\alpha_1,...,\alpha_n] α=[α1,...,αn]
让我的目标函数最小。
SMO解决问题的思路是什么?
作为一个普通人,看到这个问题,实在是太复杂了,因为 α \alpha α其实并不是一个变量,而是n个,而且这个n个之间还互相有约束,实在让人费解。
我们不妨回到问题的开始,求解 α \alpha α的目的何在?
当然是为了求 w w w和 b b b,这样我的最优超平面就求出来了,SVM模型也最终完整的建立起来了!
我们现在假设已经找到了这样的 α \alpha α
那我的 w w w和 b b b也就随之确定。
那我的最优分离超平面也就确定了:
f ( x i ) = w x + b f(x_i) = wx +b f(xi)=wx+b
求出的这个最优分离超平面和 α \alpha α又有什么关系呢?
既然现在得到的是最优的分离超平面,那就应该满足当初求解过程中的一系列约束条件,也就是肯定满足KKT条件。
根据KKT条件,可以得到如下关系。若对此有疑问可以参考另一篇文章,拉格朗日对偶和KKT条件详解。
y i f ( x i ) = { ≥ 1 α i = 0 ⇒ x i 在边界内,正确分类 = 1 0 < α i < C ⇒ x i 在边界上,是支持向量 ≤ 1 α i = C ⇒ x i 在两条边界之间 y_if(x_i)= \begin{cases} \geq 1 & \alpha_i=0 \Rightarrow x_i \text{在边界内,正确分类}\\ =1& 0<\alpha_i<C \Rightarrow x_i \text{在边界上,是支持向量}\\ \leq 1 & \alpha_i=C \Rightarrow x_i \text{在两条边界之间} \end{cases} yif(xi)=⎩⎪⎨⎪⎧≥1=1≤1αi=0⇒xi在边界内,正确分类0<αi<C⇒xi在边界上,是支持向量αi=C⇒xi在两条边界之间
反过来想我们求解出来的 α i \alpha_i αi和对应的 x i x_i xi也必须满足这样的关系式才是正确的。
我们在求解 α \alpha α的过程中也必须要朝着这样的目标去思考。
同时求解的过程中 α \alpha α也必须满足它的初始的限制条件:
∑ i = 1 n y i α i = 0 \sum_{i=1}^n y_i \alpha_i = 0 i=1∑nyiαi=0
0 ≤ α i ≤ C , i = 1 , . . . , n 0 \leq \alpha_i \leq C,i=1,...,n 0≤αi≤C,i=1,...,n
现在我们的思路就非常清晰了!
我们可以初始化一个 α \alpha α然后不断的优化,直到满足上述条件,这里我们把这个条件暂且称为目标条件。
现在的问题在于我们如何具体优化 α \alpha α呢?
α = [ α 1 , . . . , α n ] \alpha=[\alpha_1,...,\alpha_n] α=[α1,...,αn]这里有n个 α \alpha α
1.我每次该选择几个 α \alpha α来进行优化呢?
最简单的思考,我们选择1个来进行优化。
但是不要忘了我们的约束条件: ∑ i = 1 n α i y i = 0 \sum_{i=1}^n \alpha_i y_i=0 ∑i=1nαiyi=0
如果我们只选择一个,假设选择 α 1 \alpha_1 α1来进行优化,此时剩余的 α \alpha α被视为是确定的常数。
由于约束条件,所以: α 1 y 1 = − ∑ i = 2 n α i y i \alpha_1 y_1 = - \sum_{i=2}^n \alpha_iy_i α1y1=−∑i=2nαiyi
这样根本就没有优化的必要了啊,等式左边的值是确定的,右边的值也确定了。
所以,我们每次选择两个 α \alpha α来进行优化,把剩余的 α \alpha α被视为是确定的常数,就可以避免上述问题!此时这两个 α \alpha α满足下列的关系式:
α 1 y 1 + α 2 y 2 = − ∑ i = 3 n α i y i = ζ \alpha_1 y_1 + \alpha_2 y_2 = - \sum_{i=3}^n \alpha_iy_i=\zeta α1y1+α2y2=−i=3∑nαiyi=ζ
现在我每次优化的对象就只有两个变量啊,这样一来问题简单了很多。
现在更神奇的事情是, α 1 \alpha_1 α1和 α 2 \alpha_2 α2满足一个等式,我完全可以再简化一点啊,用其中的一个变量来表示另外一个。
α 1 = ζ − α 2 y 2 y 1 \alpha_1 = \frac{\zeta - \alpha_2 y_2}{y_1} α1=y1ζ−α2y2
因为y的取值只能是+1和-1,上式可以写成:
α 1 = ( ζ − α 2 y 2 ) y 1 \alpha_1 = (\zeta - \alpha_2 y_2)y_1 α1=(ζ−α2y2)y1
现在有没有一种柳暗花明的感觉?只要我找到一个 α 2 \alpha_2 α2进行优化,并且求出优化后的值,那我的 α 1 \alpha_1 α1也就随之进行了优化。
2.我开始的时候该选择哪个 α \alpha α作为我的 α 2 \alpha_2 α2来进行优化呢?
这时候又思考,我们为什么要优化 α \alpha α?
是因为我们想让它满足上述的目标条件。
那开始肯定大多 α \alpha α都不满足。
很明显了,从效果上的考虑,我应该优先选择那些违反目标条件最多的,最不满足目标条件的 α \alpha α来进行优化!
同时,我们还可以从另一个角度来考虑。
我们希望优化后的 α \alpha α都能满足目标条件,但是优化几次才能满足目标条件呢?当然是想尽可能少的次数就让它满足目标条件!
因此我希望挑选出来的 α 2 \alpha_2 α2每一次优化后,它不满足目标条件的程度应该尽可能减少,自身应该有更多的改变!
有没有一个具体的标准来衡量这种改变呢?
这里直接给出标准,暂不讨论为什么。
我们定义一个误差:
E i = f ( x i ) − y i E_i = f(x_i) - y_i Ei=f(xi)−yi
我们发现:
∣ E 1 − E 2 ∣ |E_1 - E_2| ∣E1−E2∣
越大,优化后的 α \alpha α改变就越大。
现在又有一个问题,我如何保证优化后的 α \alpha α就一定是朝着不满足目标条件的程度能减少的方向发展呢?有什么方法可以来判断我的方向正确性呢?
我们现在把目光放在最开始的目标,我们做的一切的一切都是为了最开始的那个目标!
min α 1 2 ∑ i = 1 n ∑ j = 1 n α i α j y i y j ⟨ x i T x j ⟩ − ∑ i = 1 n α i \min \limits_{\alpha} \frac{1}{2} \sum_{i=1}^n\sum_{j=1}^n \alpha_i \alpha_j y_i y_j \langle {x_i^T x_j} \rangle - \sum_{i=1}^n \alpha_i αmin21i=1∑nj=1∑nαiαjyiyj⟨xiTxj⟩−i=1∑nαi
s . t . 0 ≤ α i ≤ C i = 1 , . . . , n s.t. \qquad 0 \leq \alpha_i \leq C \quad i=1,...,n s.t.0≤αi≤Ci=1,...,n
∑ i = 1 n α i y i = 0 \sum_{i=1}^n \alpha_i y_i = 0 i=1∑nαiyi=0
目标是求最小值!
那现在虽然我不知道怎样优化α1、α2,让它们对应的样本违反g(x)目标条件变轻,但是我可以让它们优化后目标函数的值变小啊!使目标函数变小,肯定是朝着正确的方向优化!也就肯定是朝着使违反g(x)目标条件变轻的方向优化,二者是一致的!!
那现在,我们把 α 1 \alpha_1 α1和 α 2 \alpha_2 α2看作变量,其余都看作常数。
把上面的式子展开,发现其实是一个的二次函数优化问题。
min α 1 α 2 W ( α 1 α 2 ) = m α 1 2 + n α 2 2 + k α 1 α 2 + q α 1 + p α 2 \min \limits_{\alpha_1 \alpha_2} W(\alpha_1 \alpha_2) = m \alpha_1^2 + n \alpha_2^2 + k\alpha_1 \alpha_2 + q\alpha_1 + p\alpha_2 α1α2minW(α1α2)=mα12+nα22+kα1α2+qα1+pα2
其中:
y 1 α 1 + y 2 α 2 = ζ y_1 \alpha_1 + y_2 \alpha_2 = \zeta y1α1+y2α2=ζ
0 ≤ α 1 ≤ C , 0 ≤ α 2 ≤ C 0\leq \alpha_1 \leq C, 0 \leq \alpha_2 \leq C 0≤α1≤C,0≤α2≤C
那解这个问题就很简单了,通过等式
α 1 = ( ζ − α 2 y 2 ) y 1 \alpha_1 = (\zeta - \alpha_2 y_2)y_1 α1=(ζ−α2y2)y1
可以进一步的把上述问题化简为一个只关于