SMO算法原理
SMO(Sequential Minimal Optimization)算法是支持向量机(SVM)的一种高效优化算法,由微软研究院的 John Platt 在 1998 年提出。以下从通俗理解和详细推导两个方面进行介绍:
一、通俗理解
1. SVM 优化问题的本质
SVM 的目标是找到一个超平面,使得不同类别的数据点间隔最大。数学上,这等价于求解一个带约束的二次规划(QP)问题:
- 目标函数:最小化 \(\frac{1}{2}||w||^2 + C\sum\xi_i\)(正则化项 + 分类误差)
- 约束条件:\(y_i(w^T x_i + b) \geq 1 - \xi_i\) 且 \(\xi_i \geq 0\)
其中,w 是超平面的法向量,b 是偏置,\(\xi_i\) 是松弛变量,C 是惩罚参数。
2. SMO 的核心思想
传统求解 QP 问题的方法需要存储整个核矩阵(复杂度 \(O(n^2)\)),并在每次迭代中更新所有参数,计算量极大。SMO 的创新在于:
- 分治法:每次只优化两个拉格朗日乘子(\(\alpha_i\) 和 \(\alpha_j\)),固定其他所有参数。
- 贪心策略:通过启发式方法选择 “最违反 KKT 条件” 的两个变量进行优化,加速收敛。
3. 几何直观解释
- 支持向量:恰好落在间隔边界上的点(即满足 \(y_i(w^T x_i + b) = 1\)),对应的 \(\alpha_i > 0\)。
- 优化过程:SMO 通过调整支持向量对应的 \(\alpha_i\),动态移动超平面,直到所有支持向量到超平面的距离相等且最大。
二、详细推导过程
1. 拉格朗日对偶问题
通过引入拉格朗日乘子 \(\alpha_i \geq 0\) 和 \(\mu_i \geq 0\),原问题转化为对偶问题:
\(\max_{\alpha} \sum_{i=1}^n \alpha_i - \frac{1}{2} \sum_{i=1}^n \sum_{j=1}^n \alpha_i \alpha_j y_i y_j K(x_i, x_j)\)
\(\text{s.t.} \quad \sum_{i=1}^n \alpha_i y_i = 0 \quad \text{和} \quad 0 \leq \alpha_i \leq C\)
其中,\(K(x_i, x_j)\) 是核函数(如线性核、RBF 核)。
2. SMO 的核心:一次优化两个变量
假设固定除 \(\alpha_1\) 和 \(\alpha_2\) 外的所有 \(\alpha_i\),则约束条件变为:
\(\alpha_1 y_1 + \alpha_2 y_2 = -\sum_{i=3}^n \alpha_i y_i = \text{常数} = \xi\)
因此,\(\alpha_1\) 可表示为 \(\alpha_2\) 的函数:
\(\alpha_1 = (\xi - \alpha_2 y_2) y_1\)
3. 变量的上下界约束
由于 \(0 \leq \alpha_i \leq C\),\(\alpha_2\) 的可行区间为:
- 当 \(y_1 \neq y_2\) 时,\(L = \max(0, \alpha_2 - \alpha_1)\),\(H = \min(C, C + \alpha_2 - \alpha_1)\)
- 当 \(y_1 = y_2\) 时,\(L = \max(0, \alpha_2 + \alpha_1 - C)\),\(H = \min(C, \alpha_2 + \alpha_1)\)
4. 目标函数简化
将 \(\alpha_1\) 代入对偶目标函数,得到关于 \(\alpha_2\) 的二次函数:
\(W(\alpha_2) = \alpha_1 + \alpha_2 - \frac{1}{2} \alpha_1^2 K_{11} - \frac{1}{2} \alpha_2^2 K_{22} - \alpha_1 \alpha_2 y_1 y_2 K_{12} + \cdots\)
对 \(\alpha_2\) 求导并令导数为 0,解得最优解 \(\alpha_2^{new, unclipped}\),再将其截断到区间 \([L, H]\) 内:
\(\alpha_2^{new} = \text{clip}(\alpha_2^{new, unclipped}, L, H)\)
5. 更新另一个变量
根据约束条件更新 \(\alpha_1\):
\(\alpha_1^{new} = \alpha_1^{old} + y_1 y_2 (\alpha_2^{old} - \alpha_2^{new})\)
6. 偏置 b 的更新
更新 b 以确保 KKT 条件成立:
\(b_1^{new} = b^{old} - E_1 - y_1(\alpha_1^{new} - \alpha_1^{old})K(x_1, x_1) - y_2(\alpha_2^{new} - \alpha_2^{old})K(x_1, x_2)\)
\(b_2^{new} = b^{old} - E_2 - y_1(\alpha_1^{new} - \alpha_1^{old})K(x_1, x_2) - y_2(\alpha_2^{new} - \alpha_2^{old})K(x_2, x_2)\)
最终 b 取两者的平均值或根据 \(\alpha\) 的范围选择合适的值。
7. 变量选择策略
- 第一个变量:选择违反 KKT 条件最严重的样本(即 \(|y_i f(x_i) - 1|\) 最大)。
- 第二个变量:选择能最大化步长(即 \(|E_1 - E_2|\) 最大)的样本,加速收敛。
三、算法流程总结
- 初始化:所有 \(\alpha_i = 0\),\(b = 0\)。
- 外层循环:遍历所有样本,选择违反 KKT 条件的 \(\alpha_i\) 作为第一个变量。
- 内层循环:选择第二个变量 \(\alpha_j\),优化 \(\alpha_i\) 和 \(\alpha_j\),更新 b。
- 终止条件:所有样本满足 KKT 条件或达到最大迭代次数。
四、SMO 的优势
- 无需矩阵存储:每次只处理两个变量,内存需求从 \(O(n^2)\) 降至 \(O(n)\)。
- 高效迭代:避免了传统 QP 方法的复杂计算,适用于大规模数据集。
- 全局最优:通过迭代优化,保证收敛到全局最优解。
SMO 算法是 SVM 实际应用中的核心优化方法,被广泛用于机器学习库(如 libsvm、scikit-learn)中。

浙公网安备 33010602011771号