SMO(Sequential Minimal Optimization)算法的数学原理

SMO算法的数学原理

  • 前言
  • SVM问题回顾
  • SMO算法
    • 两个朗格朗日乘子的解析解
    • 选择哪两个乘子需要被优化的启发式方法
    • 计算阈值
    • 线性SVM的一个优化
    • 代码细节

前言

紧跟着SVM数学原理之后,又拿出一点时间读了Platt的关于SMO的论文:
Sequential Minimal Optimization:A Fast Algorithm for Training Support Vector Machines
本文致力于用简洁的语言将SMO的数学原理描述清楚。

SVM问题回顾

在SVM的数学原理一文中,我们在不可完全分离的case中最终推导得出了对偶优化问题(5.33),将其最大化目标函数转换为最小化目标函数的形式,并引入核函数,如下式所示:
SMO(Sequential Minimal Optimization)算法的数学原理_第1张图片
SMO算法致力于求解式子(11)描述的QP问题,为了使这个QP问题是正定的,核函数K必须要满足Mercer条件。
上述QP问题的KKT条件很简单,当对所有的i都满足:
SMO(Sequential Minimal Optimization)算法的数学原理_第2张图片
其中ui是SVM在第i个训练样本上的输出。
式子(12)的物理意义并不难理解:在SVM的数学原理一文中可以看到:
当αi = 0时,向量xi被理想正确分类,落在两个边界超平面之外,此时必定满足yiui >= 1
当0 < αi < C时,向量xi恰好落在两个边界超平面上,此时必定满足yiui = 1
当αi = C时,向量xi落在两个边界超平面之间,此时必定满足yiui <= 1

SMO算法

SMO算法将整个QP问题分解成QP子问题,使用Osuna’s theorem确保收敛。Osuna’s theorem简单的意思就是每次将QP问题分解成QP子问题迭代执行,当每次迭代求解的QP子问题中至少包含一个不满足KKT条件的example的时候,这个算法最终会收敛。

SMO算法在每一步迭代中都选择可能存在的最小规模的QP子问题,对标准SVM的QP来讲,由于拉格朗日乘子必须要满足式子(11)中的线性等式约束:
在这里插入图片描述
因此,可能存在的最小规模的QP子问题要包括两个拉格朗日乘子
SMO算法在每一步迭代中都选择两个拉格朗日乘子来进行联合优化,以找到这些乘子的最优值,并且更新SVM以反映出新的优化值。

SMO的优势基于这样的事实,对两个拉格朗日乘子的解是存在解析解的,低效率的数值QP优化问题可以被完全避免。尽管在SMO算法过程中要求解更多的优化子问题,但每个子问题都很快,因此整个QP问题得以快速求解。

SMO算法包含两部分的内容:解两个拉格朗日乘子的解析方法,选择两个乘子的启发式方法

两个朗格朗日乘子的解析解

为了解这两个拉格朗日乘子,SMO首先计算在这些乘子上的约束,然后解约束最小。因为只有两个拉格朗日乘子,等式约束很容易在二维上展示出来,如下图所示:
SMO(Sequential Minimal Optimization)算法的数学原理_第3张图片
式子(11)中边界约束0 <= α <= C决定了拉格朗日乘子必须在一个box中取值,线性等式约束又决定了其必须落在一条对角线上,因此,目标函数的约束最小值必须位于对角线段上。这个约束同时也解释了为什么原QP问题的可能的最小子问题至少包含两个拉格朗日乘子:如果SMO只优化了一个乘子,则它不能在每一步都满足线性等式约束。

对角线段的端点可以非常容易的表示,不失一般性,算法首先计算第二个拉格朗日乘子α2,并以α2计算对角线段的端点。计算出来的α2不一定满足边界约束,需要对其进行裁剪,这需要确定α2的上下界,有两种情况需要考虑:

情况1:y1 != y2的情况下,有α1 - α2 = k,where k is a constant
SMO(Sequential Minimal Optimization)算法的数学原理_第4张图片
α2的上下界为:
L = max(0,-k) = max(0,α2 - α1)
H = min(C,C-k) = min(C,C + α2 - α1)

情况2:y1 = y2的情况下,有α1 + α2 = k,where k is a constant
SMO(Sequential Minimal Optimization)算法的数学原理_第5张图片
α2的上下界为:
L = max(0,k - C) = max(0,α1 + α2 - C)
H = min(C,k) = min(C, α1 + α2)

接下来,我们推导用于更新α的解析迭代式:
我们首先计算α2的迭代式,每次更新只考虑两个乘子α1和α2,式子(11)中的目标函数可以写为:
SMO(Sequential Minimal Optimization)算法的数学原理_第6张图片
注意在该公式推导中,用到yiyi=1
在SVM的数学原理中,已经求得:
在这里插入图片描述
那么,SVM在第i个样本上的输出为:
在这里插入图片描述
并设:
在这里插入图片描述
最终,目标函数变为:
在这里插入图片描述
要推出α2的更新迭代式,应该把目标函数中的α1想办法用α2表示,再对α2求导,令其导数等于0,这样就可以求出α2的更新迭代式了。
根据线性等式约束条件:
在这里插入图片描述
可以写出:
在这里插入图片描述
其中C为常数,在这个等式两边同乘y1
SMO(Sequential Minimal Optimization)算法的数学原理_第7张图片

在这里插入图片描述
那么,
在这里插入图片描述
目标函数变为:
SMO(Sequential Minimal Optimization)算法的数学原理_第8张图片
目标函数对α2求导:
SMO(Sequential Minimal Optimization)算法的数学原理_第9张图片
使导数等于0:
在这里插入图片描述
SMO(Sequential Minimal Optimization)算法的数学原理_第10张图片
沿对角线的目标函数的二阶导数可表示为:
在这里插入图片描述
在正常情况下,目标函数是正定的,因此沿线性等式约束的方向存在最小值,并且η必将大于零。 在这种情况下,SMO在约束方向计算最小值:
在这里插入图片描述
其中,Ei=ui-yi,是第i个训练样本的误差。
下一步,通过将无约束最小值剪切到线段的末端来找到约束最小值:
SMO(Sequential Minimal Optimization)算法的数学原理_第11张图片
现在,,α1可以用α2new,clipped被更新:
因为
在这里插入图片描述
两式相减,得到:
在这里插入图片描述
在特殊情况下,η将不是正的。
如果核函数K不遵守Mercer条件,则会出现负η,这可能导致目标函数变得非正定。
如果多个训练示例具有相同的输入向量x,即使使用正确的核函数,也可能出现零η。
无论如何,即使η不是正的,SMO也会工作,在这种情况下,应该在线段的每一端评估目标函数Ψ:
SMO(Sequential Minimal Optimization)算法的数学原理_第12张图片
SMO将拉格朗日乘子移动到具有目标函数最低值的端点。 如果目标函数在两端都是相同的(或者有一个小的误差)并且核函数满足Mercer条件,则联合最小化不能取得进展。

选择哪两个乘子需要被优化的启发式方法

只要SMO在每一步都总是优化并改变两个拉格朗日乘子,并且其中至少有一个拉格朗日乘子在优化之前违反了KKT条件,那么根据Osuna定理,每次迭代都会降低目标函数的值,收敛性可以得到保证。为了加快收敛,SMO采用启发式方法选择两个拉格朗日乘子进行联合优化。
两个单独的选择启发式:一个启发式用于选择第一个拉格朗日乘子,另一个启发式用于选择第二个拉格朗日乘子。
**第一种启发式的选择用于SMO算法的外部循环。**外循环首先遍历整个训练集,确定每个example是否违反KKT条件(12),如果一个example违反了KKT条件,则它是可以进行优化的。在一次遍历整个训练集之后,外部循环遍历所有其拉格朗日乘数既不是0也不是C的example(非约束example)。同样,根据KKT条件检查每个example,违反KKT条件的example可以进行优化。外部循环重复遍历非边界example,直到所有的非边界example在一个容忍误差ε内都满足KKT条件。然后外循环返回并遍历整个训练集。外循环环在整个训练集上的单次通过和在非边界子集上的多次通过之间保持交替,直到整个训练集服从ε内的KKT条件,于是算法终止。
外部循环遍历示意图如下:
SMO(Sequential Minimal Optimization)算法的数学原理_第13张图片
第一种选择启发式将CPU时间集中在最有可能违反KKT条件的example上:非边界子集。
随着SMO算法的迭代进行,位于边界的example大部分会继续保持在边界,而不在边界的example将随着其他example的优化而移动。因此,SMO算法将迭代非边界子集,直到该子集是自洽(该子集内所有example都在一定误差内满足KKT条件)的,然后SMO将扫描整个数据集以搜索由于优化非边界子集而已违反KKT条件的任何边界example。
注意一点,我们是在容忍误差ε范围内检查是否满足KKT条件的。 通常,ε设定为10-3。 一般识别系统通常不需要满足高精确度的KKT条件:正间隔的example可以在0.999和1.001之间输出。 如果需要产生非常高精度的输出,则SMO算法(和其他SVM算法)将不会快速收敛。
一旦选择了第一个拉格朗日乘子,SMO的第二种启发式就会选择第二个拉格朗日乘子来最大化联合优化期间所采取步长。
不过,评估核函数K是耗时的,因此SMO通过等式(16)中分子的绝对值来近似步长:|E1 - E2|.
SMO为训练集中的每个非边界example保留缓存的误差值E,然后选择一个误差以使步长近似最大化。如果E1是正值,SMO会选择具有最小误差E2的example;如果E1是负值,SMO则会选择具有最大误差E2的example。
**在特殊情况下,SMO无法使用上述第二选择启发式方法取得积极进展。**例如,如果第一和第二训练example具有相同的输入向量x,则不能进行有有效的积极的进展,这导致目标函数变为半正定的。在这种情况下,SMO使用第二选择启发式的层次结构,直到找到一对可以取得有效积极进展的拉格朗日乘子。通过在两个拉格朗日乘数的联合优化时产生非零步长,可以确定积极进展。第二选择启发式的层次结构包括以下内容。 如果上述启发式没有取得积极进展,那么SMO开始迭代非边界example,搜索可以取得积极进展的第二个example。 如果没有任何非边界example取得积极进展,则SMO开始迭代整个训练集,直到找到一个取得积极进展的example。 通过非边界example的迭代和通过整个训练集的迭代都在随机位置开始,以便不将SMO偏向训练集开始处的example。 在非常极端bad的情况下,没有一个example能够成为第二个example。 发生这种情况时,跳过第一个example,SMO继续使用第一种启发式选择另外一个第一个example。

计算阈值

在每个迭代之后都需要重新计算阈值b,从而满足两个优化example的KKT条件。
当新的α1不在边界上时,以下阈值b1有效,因为当输入为x1时,它强制SVM的输出为y1:
SMO(Sequential Minimal Optimization)算法的数学原理_第14张图片
SMO(Sequential Minimal Optimization)算法的数学原理_第15张图片
在这里插入图片描述
在这里插入图片描述
当新α2不在边界上时,以下阈值b2有效,因为当输入为x2时,它强制SVM的输出为y2:
在这里插入图片描述
在这里插入图片描述
注意:这个地方,论文中的公式(20)(21)与我自己推导出来的表达形式不同,我把论文中的公式贴出来,并保留自己的意见
当b1和b2都有效时,它们是相等的。 当两个新的拉格朗日乘子都处于边界并且L不等于H时,则位于b1和b2之间的值都是与KKT条件一致的阈值,可以任意选择。 SMO选择阈值在b1和b2中间一半的位置,此时b=0.5(b1+b2)。
SMO(Sequential Minimal Optimization)算法的数学原理_第16张图片

线性SVM的一个优化

为了计算线性SVM,仅需要存储单个权重向量w,而不是对应于非零拉格朗日乘子的所有训练example。 如果联合优化成功,则需要更新存储的权重向量以反映新的拉格朗日乘子的值。 由于SVM的线性性质,权重向量更新很容易:
在这里插入图片描述

代码细节

下面的伪代码描述了整个SMO算法:
SMO(Sequential Minimal Optimization)算法的数学原理_第17张图片
SMO(Sequential Minimal Optimization)算法的数学原理_第18张图片

SMO(Sequential Minimal Optimization)算法的数学原理_第19张图片
SMO(Sequential Minimal Optimization)算法的数学原理_第20张图片
SMO(Sequential Minimal Optimization)算法的数学原理_第21张图片

你可能感兴趣的:(数学与算法,SMO算法,序列最小化,数学原理)