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|\) 最大)的样本,加速收敛。

三、算法流程总结

  1. 初始化:所有 \(\alpha_i = 0\),\(b = 0\)。
  2. 外层循环:遍历所有样本,选择违反 KKT 条件的 \(\alpha_i\) 作为第一个变量。
  3. 内层循环:选择第二个变量 \(\alpha_j\),优化 \(\alpha_i\) 和 \(\alpha_j\),更新 b。
  4. 终止条件:所有样本满足 KKT 条件或达到最大迭代次数。

四、SMO 的优势

  • 无需矩阵存储:每次只处理两个变量,内存需求从 \(O(n^2)\) 降至 \(O(n)\)。
  • 高效迭代:避免了传统 QP 方法的复杂计算,适用于大规模数据集。
  • 全局最优:通过迭代优化,保证收敛到全局最优解。

SMO 算法是 SVM 实际应用中的核心优化方法,被广泛用于机器学习库(如 libsvm、scikit-learn)中。
posted @ 2025-07-05 11:15  有何m不可  阅读(130)  评论(0)    收藏  举报