六、序列最小最优化方法

  1. 支持向量机的学习问题可以形式化为求解凸二次规划问题。这样的凸二次规划问题具有全局最优解,并且有多种算法可以用于这一问题的求解。

    当训练样本容量非常大时,这些算法往往非常低效。而序列最小最优化(sequential minimal optimization:SMO)算法可以高效求解。

  2. SMO算法的思路:

    • 若所有变量都满足条件,则最优化问题的解就得到了。

    • 否则,选择两个变量的同时固定其他所有变量,针对这两个变量构建一个二次规划子问题。

      • 这个二次规划子问题关于这两个变量的解应该更接近原始二次规划问题的解,因为这会使得原始二次规划问题的目标函数值变得更小。

      • 更重要的是,这个二次规划子问题可以通过解析的方法求解。

      • 此时子问题有两个变量,至少存在一个变量不满足约束条件(否则就是所有变量满足条件了)。

        假设其中一个是违反约束最严重的那个,另一个由约束等式自动确定:六、序列最小最优化方法 - 图1

  3. SMO 算法将原始问题不断地分解为子问题并且对子问题求解,进而达到求解原问题的目的。

    整个 SMO 算法包括两部分:

    • 求解两个变量二次规划的解析方法。
    • 选择变量的启发式方法。

6.1 子问题的求解

  1. 假设选择的两个变量是 六、序列最小最优化方法 - 图2, 其他变量 六、序列最小最优化方法 - 图3 是固定的。

    于是 SMO 的最优化问题的子问题为:

    六、序列最小最优化方法 - 图4

    其中 六、序列最小最优化方法 - 图5 为常数, 且目标函数式中省略了不含 六、序列最小最优化方法 - 图6 的常数项。

6.1.1 取值范围约束

  1. 六、序列最小最优化方法 - 图7 的约束条件为:

    • 六、序列最小最优化方法 - 图8 异号时,六、序列最小最优化方法 - 图9 位于直线 六、序列最小最优化方法 - 图10 ,且在矩形范围内。矩形的长为 六、序列最小最优化方法 - 图11,宽为 六、序列最小最优化方法 - 图12, 起始点坐标为(0,0)smo_1 此时 六、序列最小最优化方法 - 图14六、序列最小最优化方法 - 图15 的取值范围为:

      • 六、序列最小最优化方法 - 图16 时(上面那条线):

        六、序列最小最优化方法 - 图17

      • 六、序列最小最优化方法 - 图18 时(下面那条线):

        六、序列最小最优化方法 - 图19

    • 六、序列最小最优化方法 - 图20 同号时,六、序列最小最优化方法 - 图21 位于直线 六、序列最小最优化方法 - 图22 ,且在矩形范围内。矩形的长为 六、序列最小最优化方法 - 图23,宽为 六、序列最小最优化方法 - 图24, 起始点坐标为(0,0)smo2

      此时 六、序列最小最优化方法 - 图26 取值范围为:

      • 六、序列最小最优化方法 - 图27 时:(上面那条线)

      六、序列最小最优化方法 - 图28

      • 六、序列最小最优化方法 - 图29 时:(下面那条线)

        六、序列最小最优化方法 - 图30

  2. 假设 六、序列最小最优化方法 - 图31 的最优解为 六、序列最小最优化方法 - 图32,其初始可行解为 六、序列最小最优化方法 - 图33六、序列最小最优化方法 - 图34 的初始可行解为 六、序列最小最优化方法 - 图35

    • 既然是初始可行解,则需要满足约束条件。因此有

      六、序列最小最优化方法 - 图36

    • 假设 六、序列最小最优化方法 - 图37 的取值范围为 六、序列最小最优化方法 - 图38 ,则有:

      • 六、序列最小最优化方法 - 图39时:

        六、序列最小最优化方法 - 图40 ,则 六、序列最小最优化方法 - 图41 ;若 六、序列最小最优化方法 - 图42 ,则 六、序列最小最优化方法 - 图43

        根据:

        六、序列最小最优化方法 - 图44

        则有:六、序列最小最优化方法 - 图45

      • 六、序列最小最优化方法 - 图46 时:

        六、序列最小最优化方法 - 图47 ,则 六、序列最小最优化方法 - 图48 ;若六、序列最小最优化方法 - 图49, 则 六、序列最小最优化方法 - 图50

        根据 六、序列最小最优化方法 - 图51,则有:六、序列最小最优化方法 - 图52

6.1.2 解析解

  1. 六、序列最小最优化方法 - 图53 。它表示解得 六、序列最小最优化方法 - 图54 参数之后,对 六、序列最小最优化方法 - 图55 的预测值。预测值的正负代表了分类的结果。

    六、序列最小最优化方法 - 图56

    • 六、序列最小最优化方法 - 图57 表示 六、序列最小最优化方法 - 图58 的预测值与真实输出 六、序列最小最优化方法 - 图59 之差。
    • 六、序列最小最优化方法 - 图60 表示 六、序列最小最优化方法 - 图61 的预测值与真实输出 六、序列最小最优化方法 - 图62 之差。
  2. 根据 六、序列最小最优化方法 - 图63 ,将 六、序列最小最优化方法 - 图64 代入 六、序列最小最优化方法 - 图65 中。

    求解 六、序列最小最优化方法 - 图66 ,即可得到 六、序列最小最优化方法 - 图67 的最优解(不考虑约束条件):

    六、序列最小最优化方法 - 图68

    其中:

    • 六、序列最小最优化方法 - 图69

    • 六、序列最小最优化方法 - 图70 中的 六、序列最小最优化方法 - 图71 分别为 六、序列最小最优化方法 - 图72 (它们表示初始的可行解,用于消掉 六、序列最小最优化方法 - 图73 )。

  3. 六、序列最小最优化方法 - 图74 截断,则得到 六、序列最小最优化方法 - 图75 的解析解为:

    六、序列最小最优化方法 - 图76

    其中 六、序列最小最优化方法 - 图77 为初始可行解, 六、序列最小最优化方法 - 图78 为最终解。

  4. 根据 六、序列最小最优化方法 - 图79 ,以及 六、序列最小最优化方法 - 图80 ,得到 六、序列最小最优化方法 - 图81

    六、序列最小最优化方法 - 图82

    其中 六、序列最小最优化方法 - 图83 为初始可行解, 六、序列最小最优化方法 - 图84 为最终解。

6.2 变量选择

  1. SMO 算法在每个子问题中选择两个变量进行优化,其中至少一个变量是违反约束条件的。如果都不违反约束条件,则说明已经求解了。

6.2.1 外层循环

  1. 第一个变量的选择过程称为外层循环。

  2. 外层循环在训练样本中选择违反约束条件最严重的样本点,并将对应的变量作为第一个变量。

    具体来讲,就是检验训练样本点 六、序列最小最优化方法 - 图85 是否满足约束条件(KKT条件):

    六、序列最小最优化方法 - 图86

    其中, 六、序列最小最优化方法 - 图87

  3. 检验时:

    • 外层循环首先遍历所有满足条件 六、序列最小最优化方法 - 图88 的样本点,即间隔边界上的支持向量点。
    • 如果这些样本点都满足条件,再遍历整个训练集,检验是否满足条件。

6.2.2 内存循环

  1. 第二个变量的选择过程称为内层循环。

  2. 假设已经在外层循环中找到第一个变量 六、序列最小最优化方法 - 图89, 现在要在内层循环中找到第二个变量 六、序列最小最优化方法 - 图90。第二个变量选择标准是希望能够使得 六、序列最小最优化方法 - 图91 有足够大的变化。

  3. 由前面式子可知, 六、序列最小最优化方法 - 图92 依赖于 六、序列最小最优化方法 - 图93 。一种简单的做法是选择 六、序列最小最优化方法 - 图94 ,使得对应的 六、序列最小最优化方法 - 图95 最大。因为 六、序列最小最优化方法 - 图96 已经确定, 六、序列最小最优化方法 - 图97 也已经确定。

    • 如果 六、序列最小最优化方法 - 图98 为正数,则选择最小的 六、序列最小最优化方法 - 图99 作为 六、序列最小最优化方法 - 图100
    • 如果 六、序列最小最优化方法 - 图101 为负数,则选择最大的 六、序列最小最优化方法 - 图102 作为 六、序列最小最优化方法 - 图103

    为了节省计算时间,可以将所有 六、序列最小最优化方法 - 图104 值保存在一个列表中。

  4. 特殊情况下,若内层循环找到的 六、序列最小最优化方法 - 图105 不能使得目标函数有足够的下降,则采用以下的启发式规则继续选择 六、序列最小最优化方法 - 图106

    • 遍历在间隔边界上的支持向量点,依次将其对应的变量作为 六、序列最小最优化方法 - 图107 试用,直到目标函数有足够的下降。
    • 若还是找不到合适的 六、序列最小最优化方法 - 图108 ,则遍历训练数据集寻找。
    • 若还是找不到合适的 六、序列最小最优化方法 - 图109 ,则放弃找到的 六、序列最小最优化方法 - 图110,再通过外层循环寻求另外的 六、序列最小最优化方法 - 图111

6.2.3 参数更新

  1. 每次完成两个变量的优化后,都要重新计算 六、序列最小最优化方法 - 图112。根据约束条件有:

    • 六、序列最小最优化方法 - 图113 时:六、序列最小最优化方法 - 图114

      代入 六、序列最小最优化方法 - 图115 的定义式有:六、序列最小最优化方法 - 图116

    • 同样,当 六、序列最小最优化方法 - 图117 时有:六、序列最小最优化方法 - 图118

    • 如果 六、序列最小最优化方法 - 图119 同时满足 六、序列最小最优化方法 - 图120 ,则有: 六、序列最小最优化方法 - 图121

    • 如果 六、序列最小最优化方法 - 图122 或者为 0,或者为 六、序列最小最优化方法 - 图123,则 六、序列最小最优化方法 - 图124 区间内的数都可以作为 六、序列最小最优化方法 - 图125。此时一个选择是:

      六、序列最小最优化方法 - 图126

  2. 每次完成两个变量的优化后,需要更新对应的 六、序列最小最优化方法 - 图127 值。 六、序列最小最优化方法 - 图128 的更新要用到 六、序列最小最优化方法 - 图129 以及所有支持向量对应的 六、序列最小最优化方法 - 图130

6.3 SMO算法

  1. SMO 算法:

    • 输入:

      • 训练数据集 六、序列最小最优化方法 - 图131 ,其中 六、序列最小最优化方法 - 图132
      • 精度 六、序列最小最优化方法 - 图133
    • 输出:近似解 六、序列最小最优化方法 - 图134

    • 算法步骤:

      • 取初值 六、序列最小最优化方法 - 图135六、序列最小最优化方法 - 图136

      • 选取优化变量 六、序列最小最优化方法 - 图137,解析求解两个变量的最优化问题,求得最优解 六、序列最小最优化方法 - 图138,更新 六、序列最小最优化方法 - 图139六、序列最小最优化方法 - 图140

      • 若在精度 六、序列最小最优化方法 - 图141 范围内满足停机条件:

        六、序列最小最优化方法 - 图142

        则退出迭代并令 六、序列最小最优化方法 - 图143;否则令 六、序列最小最优化方法 - 图144 ,继续迭代。

        其中 六、序列最小最优化方法 - 图145