先贴一下cs229课程的官网地址:http://cs229.stanford.edu/
$$max_\alpha W(\alpha) = \sum_{i=1}^m \alpha_i - \frac{1}{2}\sum_{i,j=1}^m y^{(i)}y^{(j)}\alpha_i\alpha_j
$$ st. 0 \leq \alpha_i \leq C , i = 1,2, ... ..., m$$
$$ \sum_{i=1}^m \alpha_i y^{(i)} = 0$$
Repeat till convergence {
1、从\(\alpha_1,\alpha_2, ... ... , \alpha_m\)中选取出一对\(\alpha_j\)和\(\alpha_k\)进行优化;
2、将除了上一步中挑选的\(\alpha_j\)和\(\alpha_k\)以外的\(\alpha\)看做常数,对选出的两个\(\alpha\)进行更新使得\(W(\alpha)\)取得更大的值;
}
1、循环的结束条件,即如何算是收敛。略。
2、如何选取\(\alpha_j\)和\(\alpha_k\)。略(这个现在没搞明白)。
3、如何更新\(\alpha_j\)和\(\alpha_k\):
公式\(\sum_{i=1}^m \alpha_i y^{(i)}\)中除\(\alpha_j\)和\(\alpha_k\)以外\(\alpha\)都被看做常数,所以我们将约束:
$$ \sum_{i=1}^m \alpha_i y^{(i)} = 0$$
写成另一种形式:
$$\alpha_j y^{(j)} + \alpha_k y^{(k)} + \zeta = 0$$
再做一点变形即\(\alpha_jy^{(j)} + \alpha_ky^{(k)} = -\zeta\),其中\(\zeta\)表示一个常数。
我们将\(\zeta\)前面的负号去掉(\(\zeta\)是我们自己定义的一个常数,这里负号去掉并没什么关系)然后解出\(\alpha_j\):\(\alpha_j = \frac{\zeta - \alpha_k y^{(k)}}{y^{(j)}}\)
所以此时的\(W(\alpha)\)是只关于\(\alpha_k\)的函数(因为\(W(\alpha)\)中的参数\(\alpha_1,...,\alpha_m\)中除\(\alpha_j\)和\(\alpha_k\)外都是常数,\(\alpha_j\)也可以用\(\alpha_k\)表示)。
所以原优化问题变成了:
$$max_{\alpha_k} W(\alpha_k)$$
$$st. 0 \leq \alpha_k \leq C$$
从原来的优化问题的\(W(\alpha)\)表达式中可以看出,\(W(\alpha)\)中\(\alpha\)的最高次幂为2,所以我们的新优化问题中\(max_{\alpha_k} W(\alpha_k)\)实际是一个关于\(\alpha_k\)的二次函数,对于自变量\(\alpha_k\)有个限制条件是必须要在0到C之间,这个新优化问题应该绝大部分人都会求了。
求出\(\alpha_k\),再利用\(\alpha_j = \frac{\zeta - \alpha_k y^{(k)}}{y^{(j)}}\)求出\(\alpha_j\),这样就求出了新的\(\alpha_j\)和\(\alpha_k\),替换原来的值就可以了。
对\(m\)个\(\alpha\)初始化一下,比如说全赋值为0。然后选取想要进行更新的两个\(\alpha\),然后用上面的第三步对这两个\(\alpha\)进行更新。最后一直循环执行更新\(\alpha\)的步骤,直到我们使\(W(\alpha)\)取得极值。