非线性支持向量机求解算法
1. 非线性支持向量机的对偶优化问题回顾
非线性支持向量机的学习问题,通过引入松弛变量和核函数,最终转化为以下凸二次规划问题(对偶问题):
其中, 是拉格朗日乘子向量, 是核函数, 是惩罚参数。 这是一个具有 个变量()和 个约束(一个等式约束和 个边界约束)的二次规划问题。当训练样本数量 很大时,直接使用通用的二次规划求解器会非常低效。
2. 坐标下降法 (Coordinate Descent)
2.1 坐标下降法的基本原理
坐标下降法 (Coordinate Descent, CD) 是一种优化算法,其基本思想是:
- 在每次迭代中,只选择目标函数中的一个变量进行优化,同时固定其他所有变量。
- 对选定的变量,求解其最优值。
- 重复这个过程,轮流更新所有变量,直到目标函数收敛。
优点:当目标函数关于每个变量都是凸的(即使整体不是凸的),并且每个单变量优化问题都容易求解时,CD 算法非常有效。
2.2 坐标下降法在非线性 SVM 中的应用分析
对于非线性 SVM 的对偶问题,我们能将目标函数 写成关于 的二次函数,所以对单个 而言,其优化是容易的。那么,坐标下降法可以直接应用吗?
答案:不能直接应用,会导致失败。
原因分析: 问题在于约束 1: 。
- 这个约束将所有的 都耦合在了一起。
- 如果我们只选择一个 进行更新,比如我们更新 而固定其他 ,那么为了保持 这个等式约束,除非被更新的 恰好不改变其值,否则这个约束就会立即被违反。
- 换句话说,要满足这个等式约束,每次更新至少需要同时调整两个 值,使得它们的变化相互抵消,从而保持求和为零。
因此,朴素的坐标下降法(每次只更新一个变量)无法直接应用于带有这种等式约束的 SVM 对偶问题。
3. 序列最小优化 (Sequential Minimal Optimization, SMO) 算法
为了解决 SVM 对偶问题的大规模计算挑战,John Platt 于 1998 年提出了序列最小优化 (SMO) 算法。SMO 巧妙地规避了坐标下降法的限制,成为目前最广泛使用的 SVM 训练算法。
3.1 SMO 的核心思想:分解为二维子问题
SMO 的核心思想正是为了解决坐标下降法遇到的问题:
- SMO 每次迭代选择两个拉格朗日乘子 和 进行优化。
- 同时固定所有其他 个 ()。
- 将原始的 维优化问题分解为一系列二维子问题 (Two-Variable Subproblems)。
为什么是两个变量?
-
当固定所有其他 时,等式约束 就可以简化为只涉及这两个变量 的一个线性等式。例如,如果选择 :
这个常数 是由固定不变的 决定的。
-
有了这个线性的等式约束,我们就可以用其中一个变量表示另一个变量(例如 ),从而将二维优化问题转化为一个单变量的无约束二次函数最小化问题,然后结合边界约束 进行求解。这种单变量的二次问题可以解析求解,效率极高。
3.2 SMO 的优化目标
我们从原始的对偶问题出发,抽取只依赖于 和 的项。 原目标函数:
为了简化表达,我们只保留与 相关的项,并将不相关的项视为常数:
解释:
- 。
- (因为 )。
- 包含了固定变量对 所在项的贡献,我们可以简写为 。
- 包含了固定变量对 所在项的贡献,我们可以简写为 .
所以,目标函数可以简化为:
同时,我们有线性约束: (常数)。
3.3 最优解的解析推导
为了求解 ,我们利用约束 来将 表示为 的函数。 从约束得到:。 将 代入 ,得到一个只关于 的二次函数 。为了最小化这个二次函数,我们对其求导并令导数等于零。
推导 :
这个推导涉及到当前的模型输出误差 ,其中 。
我们使用 和 作为当前值。 。
化简后的目标函数(关于 的二次函数)为:
解释:
- (在图片中也有这个符号),它通常被称为二次项系数,且 。如果 ,则可能需要特殊处理。
对 关于 求导并令为零:
解出 :
解释:这是在不考虑边界约束 的情况下, 的最优解。它利用了当前模型在 和 上的预测误差。
3.4 约束条件下的解 (Clipping)
由于 必须满足边界约束 和 ,以及线性约束 。我们需要对 进行裁剪。
线性约束 定义了 在一个平面上的直线。同时,方框约束 和 定义了一个边长为 的正方形区域。因此, 的可行域是这条直线段与正方形区域的交集。
根据 和 的关系(同号或异号),这条直线的形状和截距不同:
-
情况 1: (同号) 此时 。 这是一条斜率为 -1 的直线。 通过计算直线与正方形边界的交点,可以确定 的边界 和 :
-
情况 2: (异号) 此时 。 这是一条斜率为 1 的直线。 通过计算直线与正方形边界的交点,可以确定 的边界 和 :
计算出 和 后,对 进行裁剪,得到最终的 :
更新 : 一旦 确定,根据线性约束 :
解释:这个公式确保了即使在裁剪后, 和 仍然满足线性约束。
3.5 偏置项 的更新
每次迭代后,偏置项 也需要更新。 的更新依赖于 KKT 条件。 理想情况下,当 时,样本 是支持向量,且 ,KKT 条件要求 。 所以 。 为了数值稳定性,SMO 会根据更新后的 和 来更新 :
-
如果 : 这个可以简化为:
-
如果 : 这个可以简化为:
-
最终 的更新规则:
- 如果 且 ,则 。
- 如果 和 都不在 区间内(即它们是 0 或 ),那么理论上 的取值范围由 KKT 条件决定,此时可以取 和 的中点,即 。
3.6 变量选择启发式
SMO 算法的关键在于如何高效地选择每次迭代要优化的两个 和 。选择策略对算法的收敛速度有显著影响。
- 选择第一个 (外层循环):
通常选择一个最严重违反 KKT 条件的样本点对应的 。
KKT 条件的核心是:
- 如果 ,则
- 如果 ,则
- 如果 ,则 违反 KKT 条件意味着上述关系不成立。算法会遍历所有样本,寻找违反程度最大的 。
- 选择第二个 (内层循环): 一旦确定了第一个 ,选择第二个 的目标是使得目标函数 有足够大的变化。 这通常通过最大化 来实现(即选择与第一个 对应误差 差距最大的 的 )。因为 的更新量正比于 ,最大化这个差值能够最大化更新步长。 如果这种选择方式没有显著改进,则可以退而求其次,遍历所有非边界值()的 ,直到找到合适的 。
3.7 SMO 算法的整体流程
- 初始化:设置 ,偏置 。选择惩罚参数 和收敛容差
tol。 - 外层循环:
- 遍历所有样本,检查它们是否违反 KKT 条件。
- 如果发现违反 KKT 条件的 ,则将其选为第一个变量。
- 如果没有变量违反 KKT 条件(或违反程度小于
tol),则算法收敛,停止迭代。
- 内层循环:
- 在确定第一个 后,选择使目标函数变化最大的第二个 。
- 如果成功找到了合适的 ,则进行下面的优化步骤。
- 如果找不到合适的 ,则放弃当前选择的 ,重新在外层循环中选择下一个 。
- 优化步骤: a. 计算 。 b. 根据 的关系和 值,计算 的裁剪边界 。 c. 将 裁剪到 范围内,得到 。 d. 如果 相对于 的变化太小(小于一个极小的阈值),则放弃本次更新,重新选择 或跳出内层循环。 e. 根据 ,更新 。 f. 更新偏置项 。 g. 更新所有相关的误差缓存 。
4. 总结
- 线性 SVM 的对偶问题是一个凸二次规划问题,其目标函数和约束条件都依赖于拉格朗日乘子 。
- 坐标下降法由于等式约束的存在,无法直接应用于 SVM 的对偶问题,因为它无法在每次只更新一个变量的情况下保持约束。
- 序列最小优化 (SMO) 算法是解决 SVM 对偶问题的核心。它通过每次选择两个 进行优化,巧妙地将 维问题分解为一系列可以解析求解的二维子问题。
- SMO 的高效性在于其解析解和启发式的变量选择策略,使其能够有效地处理大规模数据集。
- KKT 条件在 SMO 算法中扮演了核心角色,它不仅指导了变量的选择(识别违反条件的样本),也用于计算最优的偏置项 。