复现SMO算法:深入探索序列最小优化的分析方法【三、算法原理揭秘-1】

本文主要是介绍复现SMO算法:深入探索序列最小优化的分析方法【三、算法原理揭秘-1】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这篇深入探讨序列最小优化(SMO)算法的第一部分中,我们专注于算法核心的第一个组成部分——求解两个拉格朗日乘数的分析方法。我们将逐步展开详细的数学推导,明确如何从约束的确定到乘数的优化更新,直至找到最优解。在介绍这一复杂的过程时,我们将特别注意保持逻辑的清晰性和步骤的精确性,确保即使是初学者也能跟随每一个推导步骤。

一、求解两个拉格朗日乘数的分析方法

SMO算法的一个关键创新是将大型二次规划(QP)问题分解为只涉及两个拉格朗日乘数的最小可能QP问题。每一步中,算法选择两个拉格朗日乘数进行 联合优化 ,并且通过 分析方法 直接求解这两个乘数的最优值。

对于这两个乘数,首先需要确定它们的约束条件。这些约束包括:

  • 边界约束:由于拉格朗日乘数必须非负,且受到参数 C C C 的限制,即 0 ≤ α i ≤ C 0 \leq \alpha_i \leq C 0αiC
  • 等式约束:由于分类问题的目标函数约束,两个乘数必须满足 α 1 y 1 + α 2 y 2 = 常数 \alpha_1 y_1 + \alpha_2 y_2 = \text{常数} α1y1+α2y2=常数

在确定约束后,SMO利用核函数 K ( x i , x j ) K(x_i, x_j) K(xi,xj) 计算二次项的导数,通过设置导数为零求解最优化问题。求解过程中,如果 α 2 \alpha_2 α2 的更新超出了其界限,需要对其进行剪辑处理,以确保其仍然在允许的范围内。这种剪辑后的 α 2 \alpha_2 α2 值和相应的 α 1 \alpha_1 α1 值将决定当前的最优解。


让我们从头开始逐步推导出求解两个拉格朗日乘数的分析方法。

推导目标原始函数

我们的最初优化问题是:

min ⁡ w 1 2 ∣ ∣ w ∣ ∣ 2 \min_{\mathbf{w}} \frac{1}{2} ||\mathbf{w}||^2 wmin21∣∣w2

这是在最小化权重向量 w \mathbf{w} w 的欧几里得长度的平方,也可以被看作是最小化 w \mathbf{w} w 的L2范数。这样的形式化问题有助于找到最大间隔超平面。约束条件是:

y i ( w T x i + b ) ≥ 1 , ∀ i ∈ { 1 , . . . , m } y_i (\mathbf{w}^T \mathbf{x}_i + b) \geq 1, \quad \forall i \in \{1, ..., m\} yi(wTxi+b)1,i{1,...,m}

其中 y i y_i yi 是第 ( i ) 个训练样本的标签, x i \mathbf{x}_i xi 是第 ( i ) 个训练样本,( b ) 是偏置项, m m m 是训练样本的数量。

接着我们引入拉格朗日乘数 α i \alpha_i αi 来构造拉格朗日函数 L ( w , b , α ) L(\mathbf{w}, b, \alpha) L(w,b,α) ,这个函数将原始问题转化为其对偶问题,从而可以通过最优化拉格朗日乘数而非 w \mathbf{w} w 和 ( b ) 来求解。拉格朗日函数为:

L ( w , b , α ) = 1 2 ∣ ∣ w ∣ ∣ 2 + ∑ i = 1 m α i ( 1 − y i ( w T x i + b ) ) L(\mathbf{w}, b, \alpha) = \frac{1}{2} ||\mathbf{w}||^2 + \sum_{i=1}^{m} \alpha_i \left(1 - y_i (\mathbf{w}^T \mathbf{x}_i + b)\right) L(w,b,α)=21∣∣w2+i=1mαi(1yi(wTxi+b))

目标是最大化 L L L 关于 α \alpha α 的值,同时满足对于所有 α i \alpha_i αi ,都有 α i ≥ 0 \alpha_i \geq 0 αi0

拉格朗日函数 L L L 的偏导数分别对 w \mathbf{w} w b b b 为零时,给出了以下两个等式:

w = ∑ i = 1 m α i y i x i \mathbf{w} = \sum_{i=1}^{m} \alpha_i y_i \mathbf{x}_i w=i=1mαiyixi

0 = ∑ i = 1 m α i y i 0 = \sum_{i=1}^{m} \alpha_i y_i 0=i=1mαiyi

w \mathbf{w} w 表达式代入拉格朗日函数 L L L ,并且考虑到 ∑ α i y i = 0 \sum \alpha_i y_i = 0 αiyi=0 ,我们得到 L L L 关于 α \alpha α 的新表达式,这就是对偶问题的目标函数,我们只需要最大化这个目标函数就可以找到最优解。

我们将上面我们得到的 w \mathbf{w} w 0 = ∑ i = 1 m α i y i 0 = \sum_{i=1}^{m} \alpha_i y_i 0=i=1mαiyi带入原方程后得到:

w \mathbf{w} w ∑ α i y i = 0 \sum \alpha_i y_i = 0 αiyi=0 带入原拉格朗日函数 L ( w , b , α ) L(\mathbf{w}, b, \alpha) L(w,b,α) 中,我们可以得到仅依赖于 α \alpha α 的表达式:

L ( α ) = ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j ( x i T x j ) L(\alpha) = \sum_{i=1}^{m} \alpha_i - \frac{1}{2} \sum_{i=1}^{m} \sum_{j=1}^{m} \alpha_i \alpha_j y_i y_j (\mathbf{x}_i^T \mathbf{x}_j) L(α)=i=1mαi21i=1mj=1mαiαjyiyj(xiTxj)

这里,内积 x i T x j \mathbf{x}_i^T \mathbf{x}_j xiTxj 可以被核函数 K ( x i , x j ) K(\mathbf{x}_i, \mathbf{x}_j) K(xi,xj) 替代,这允许我们在特征空间中实现非线性映射。于是,目标函数成为:

L ( α ) = max ⁡ ( ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j K ( x i , x j ) ) L(\alpha) = \max (\sum_{i=1}^{m} \alpha_i - \frac{1}{2} \sum_{i=1}^{m} \sum_{j=1}^{m} \alpha_i \alpha_j y_i y_j K(\mathbf{x}_i, \mathbf{x}_j)) L(α)=max(i=1mαi21i=1mj=1mαiαjyiyjK(xi,xj))
0 = ∑ i = 1 m α i y i 0 = \sum_{i=1}^{m} \alpha_i y_i 0=i=1mαiyi

接下来,在存在约束条件下,求得最大值。

SMO算法优化

SMO每次选择两个乘数 α 1 \alpha_1 α1 α 2 \alpha_2 α2固定其他的乘数,对它们进行优化。SMO算法会计算这两个乘数的最优值,同时保持它们和的恒定不变(因为 ∑ α i y i = 0 \sum \alpha_i y_i = 0 αiyi=0 必须一直满足)。

将原本 L ( α 1 . . . α m ) L(\alpha_1...\alpha_m) L(α1...αm)化简为 L ( α 1 α 2 ) L(\alpha_1\alpha_2) L(α1α2);现在我们尝试将 ∑ α i y i = 0 \sum \alpha_i y_i = 0 αiyi=0 展开

α 1 y 1 + α 2 y 2 + ∑ i = 3 m α i y i = 0 \alpha_1 y_1+\alpha_2 y_2 + \sum_{i=3}^{m} \alpha_iy_i = 0 α1y1+α2y2+i=3mαiyi=0

具体的解析步骤包括

  1. 计算 α 2 \alpha_2 α2 的最优解的未剪辑版本
  2. 如果需要,将这个解剪辑到其可能的区间 [ L , H ] [L, H] [L,H],其中 L L L H H H 是由不等式约束决定的上下界。
  3. α 1 \alpha_1 α1 随后可以根据 α 2 \alpha_2 α2等式约束 α 1 y 1 + α 2 y 2 = constant \alpha_1 y_1 + \alpha_2 y_2 = \text{constant} α1y1+α2y2=constant 直接计算出来。

完成上述步骤后,我们就可以更新这两个乘数的值,并继续迭代过程,直到所有 ( \alpha ) 满足KKT条件或达到某个收敛标准。

数学化简过程【固定 i , j ≥ 3 i,j \ge 3 i,j3

首先,我们有
L ( α ) = max ⁡ ( ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j K ( x i , x j ) ) L(\alpha) = \max (\sum_{i=1}^{m} \alpha_i - \frac{1}{2} \sum_{i=1}^{m} \sum_{j=1}^{m} \alpha_i \alpha_j y_i y_j K(\mathbf{x}_i, \mathbf{x}_j)) L(α)=max(i=1mαi21i=1mj=1mαiαjyiyjK(xi,xj))

然后因为前面按照SMO算法的启发式思想,我们可以转换成以下式子
max ⁡ ∑ i = 1 m α i = ( α 1 + α 2 + ∑ i = 3 m α i ) \max \sum_{i=1}^{m} \alpha_i= (\alpha_1+\alpha_2+ \sum_{i=3}^{m} \alpha_i) maxi=1mαi=(α1+α2+i=3mαi)

当然,你想要将条件拆分出来,可以这样写:

∑ i = 1 m ∑ j = 1 m α i α j y i y j K ( x i , x j ) = \sum_{i=1}^{m} \sum_{j=1}^{m} \alpha_i \alpha_j y_i y_j K(\mathbf{x}_i, \mathbf{x}_j) = i=1mj=1mαiαjyiyjK(xi,xj)=

[ α 1 y 1 α 1 y 1 κ 11 for  i = 1 , j = 1 ] + \begin{bmatrix} \alpha_1 y_1 \alpha_1 y_1 \kappa_{11} & \text{for } i=1, j=1 \end{bmatrix} + [α1y1α1y1κ11for i=1,j=1]+

[ α 1 y 1 α 2 y 2 κ 12 for  i = 1 , j = 2 ] + \begin{bmatrix} \alpha_1 y_1 \alpha_2 y_2 \kappa_{12} & \text{for } i=1, j=2 \end{bmatrix} + [α1y1α2y2κ12for i=1,j=2]+

[ ∑ j = 3 m α 1 y 1 α j y j κ 1 j for  i = 1 , j ≥ 3 ] + \begin{bmatrix} \sum_{j=3}^{m} \alpha_1 y_1 \alpha_j y_j \kappa_{1j} & \text{for } i=1, j \geq 3 \end{bmatrix} + [j=3mα1y1αjyjκ1jfor i=1,j3]+

[ α 2 y 2 α 1 y 1 κ 12 for  i = 2 , j = 1 ] + \begin{bmatrix} \alpha_2 y_2 \alpha_1 y_1 \kappa_{12} & \text{for } i=2, j=1 \end{bmatrix} + [α2y2α1y1κ12for i=2,j=1]+

[ α 2 y 2 α 2 y 2 κ 22 for  i = 2 , j = 2 ] \begin{bmatrix} \alpha_2 y_2 \alpha_2 y_2 \kappa_{22} & \text{for } i=2, j=2 \end{bmatrix} [α2y2α2y2κ22for i=2,j=2]

[ ∑ j = 3 m α 2 y 2 α j y j κ 2 j for  i = 2 , j ≥ 3 ] + \begin{bmatrix} \sum_{j=3}^{m} \alpha_2 y_2 \alpha_j y_j \kappa_{2j} & \text{for } i=2, j \geq 3 \end{bmatrix} + [j=3mα2y2αjyjκ2jfor i=2,j3]+

[ ∑ i = 3 m α i y i α 1 y 1 κ 1 i for  i ≥ 3 , j = 1 ] + \begin{bmatrix} \sum_{i=3}^{m}\alpha_i y_i \alpha_1 y_1 \kappa_{1i} & \text{for } i\geq3, j=1 \end{bmatrix} + [i=3mαiyiα1y1κ1ifor i3,j=1]+

[ ∑ i = 3 m α i y i α 2 y 2 κ 2 i for  i ≥ 3 , j = 2 ] + \begin{bmatrix} \sum_{i=3}^{m}\alpha_i y_i \alpha_2 y_2 \kappa_{2i} & \text{for } i\geq3, j=2 \end{bmatrix} + [i=3mαiyiα2y2κ2ifor i3,j=2]+

[ ∑ i = 3 m ∑ j = 3 m α i y i α j y j κ i j for  i ≥ 3 , j ≥ 3 ] \begin{bmatrix} \sum_{i=3}^{m}\sum_{j=3}^{m}\alpha_i y_i \alpha_j y_j \kappa_{ij} & \text{for } i \geq3, j \geq 3 \end{bmatrix} [i=3mj=3mαiyiαjyjκijfor i3,j3]

最终,我们合并同类项(1,2)和(2,1)是一样的;同理,(1,3)和(3,1)也一样。
得到结果

∑ i = 1 m ∑ j = 1 m α i α j y i y j K ( x i , x j ) = α 1 y 1 α 1 y 1 κ 11 + 2 α 1 y 1 α 2 y 2 κ 12 + 2 ∑ j = 3 m α 1 y 1 α j y j κ 1 j + α 2 y 2 α 2 y 2 κ 22 + 2 ∑ j = 3 m α 2 y 2 α j y j κ 2 j + ∑ i = 3 m ∑ j = 3 m α i y i α j y j κ i j \sum_{i=1}^{m} \sum_{j=1}^{m} \alpha_i \alpha_j y_i y_j K(\mathbf{x}_i, \mathbf{x}_j) = \alpha_1 y_1 \alpha_1 y_1 \kappa_{11} + 2\alpha_1 y_1 \alpha_2 y_2 \kappa_{12} + 2\sum_{j=3}^{m} \alpha_1 y_1 \alpha_j y_j \kappa_{1j} + \alpha_2 y_2 \alpha_2 y_2 \kappa_{22} + 2 \sum_{j=3}^{m} \alpha_2 y_2 \alpha_j y_j \kappa_{2j} + \sum_{i=3}^{m}\sum_{j=3}^{m}\alpha_i y_i \alpha_j y_j \kappa_{ij} i=1mj=1mαiαjyiyjK(xi,xj)=α1y1α1y1κ11+2α1y1α2y2κ12+2j=3mα1y1αjyjκ1j+α2y2α2y2κ22+2j=3mα2y2αjyjκ2j+i=3mj=3mαiyiαjyjκij

因为我们的思想是将>=3的都固定下来,所以对应的 i ≥ 3 i \ge 3 i3 j ≥ 3 j \ge 3 j3都是常数,在后面的式子计算中,我们可以省略( ∑ i = 3 m ∑ j = 3 m α i y i α j y j κ i j \sum_{i=3}^{m}\sum_{j=3}^{m}\alpha_i y_i \alpha_j y_j \kappa_{ij} i=3mj=3mαiyiαjyjκij ∑ i = 3 m α i \sum_{i=3}^{m} \alpha_i i=3mαi

因为我们可以通过左右同时 减去常数构造一个新的函数

因此可得
L ′ ( α 1 α 2 ) = α 1 + α 2 − 1 2 ( α 1 2 y 1 2 K 11 + 2 α 1 y 1 α 2 y 2 K 12 + 2 ∑ j = 3 m α 1 y 1 α j y j κ 1 j + α 2 2 y 2 2 K 22 + + 2 ∑ j = 3 m α 2 y 2 α j y j K 2 j ) L'(\alpha_1\alpha_2) = \alpha_1+\alpha_2 - \frac{1}{2} (\alpha_1^2 y_1^2 K_{11} + 2\alpha_1 y_1 \alpha_2 y_2 K_{12} + 2\sum_{j=3}^{m} \alpha_1 y_1 \alpha_j y_j \kappa_{1j} + \alpha_2^2 y_2^2 K_{22} + + 2 \sum_{j=3}^{m} \alpha_2 y_2 \alpha_j y_j K_{2j} ) L(α1α2)=α1+α221(α12y12K11+2α1y1α2y2K12+2j=3mα1y1αjyjκ1j+α22y22K22++2j=3mα2y2αjyjK2j)

所以现在的问题转换为求 L ′ ( α 1 α 2 ) L'(\alpha_1\alpha_2) L(α1α2)极值,但是这里是两个参数,所以这里我们需要转换为一个参数

计算 α 2 \alpha_2 α2 的最优解的未剪辑版本

当我们知道了 α 1 \alpha_1 α1或者 α 2 \alpha_2 α2,另外的就可以通过解析解求得

注意我们之前 α 1 \alpha_1 α1 α 2 \alpha_2 α2针对展开后的结果
α 1 y 1 + α 2 y 2 + ∑ i = 3 m α i y i = 0 \alpha_1 y_1+\alpha_2 y_2 + \sum_{i=3}^{m} \alpha_iy_i = 0 α1y1+α2y2+i=3mαiyi=0

因为固定了 i ≥ 3 i \ge 3 i3后面的值,所以 ∑ i = 3 m α i y i \sum_{i=3}^{m} \alpha_iy_i i=3mαiyi这一块就是一个常数!

因此我们可以得到
α 1 y 1 + α 2 y 2 = C (常数) \alpha_1 y_1+\alpha_2 y_2 = C(常数) α1y1+α2y2=C(常数)

同乘 y 1 y_1 y1后,得到 α 1 \alpha_1 α1

因为 y i y_i yi只能取值 +1或-1,所以其平方就是1

α 1 = y 1 ( C − α 2 y 2 ) \alpha_1 = y_1(C - \alpha_2 y_2) α1=y1(Cα2y2)

现在我们需要将 α 1 \alpha_1 α1带入到前面的 L ′ ( α 1 α 2 ) L'(\alpha_1\alpha_2) L(α1α2)函数中,得到单变量的函数 L ′ ( α 2 ) L'(\alpha_2) L(α2)

L ′ ( α 2 ) = y 1 ( C − α 2 y 2 ) + α 2 − 1 2 [ ( C − α 2 y 2 ) 2 K 11 + 2 y 1 ( C − α 2 y 2 ) y 1 α 2 y 2 K 12 + 2 ∑ j = 3 m y 1 ( C − α 2 y 2 ) y 1 α j y j κ 1 j + α 2 2 y 2 2 K 22 + + 2 ∑ j = 3 m α 2 y 2 α j y j K 2 j ] L'(\alpha_2) = y_1(C - \alpha_2 y_2) + \alpha_2 -\frac{1}{2}[(C - \alpha_2 y_2)^2 K_{11} + 2y_1(C - \alpha_2 y_2) y_1 \alpha_2 y_2 K_{12} + 2\sum_{j=3}^{m} y_1(C - \alpha_2 y_2) y_1 \alpha_j y_j \kappa_{1j} + \alpha_2^2 y_2^2 K_{22} + + 2 \sum_{j=3}^{m} \alpha_2 y_2 \alpha_j y_j K_{2j}] L(α2)=y1(Cα2y2)+α221[(Cα2y2)2K11+2y1(Cα2y2)y1α2y2K12+2j=3my1(Cα2y2)y1αjyjκ1j+α22y22K22++2j=3mα2y2αjyjK2j]

化简后得到
L ′ ( α 2 ) = y 1 ( C − α 2 y 2 ) + α 2 − 1 2 [ ( C − α 2 y 2 ) 2 K 11 + 2 ( C − α 2 y 2 ) α 2 y 2 K 12 + 2 ∑ j = 3 m ( C − α 2 y 2 ) α j y j K 1 j + α 2 2 y 2 2 K 22 + + 2 ∑ j = 3 m α 2 y 2 α j y j K 2 j ] L'(\alpha_2) = y_1(C - \alpha_2 y_2) + \alpha_2 -\frac{1}{2}[(C - \alpha_2 y_2)^2 K_{11} + 2(C - \alpha_2 y_2) \alpha_2 y_2 K_{12} + 2\sum_{j=3}^{m} (C - \alpha_2 y_2) \alpha_j y_j K_{1j} + \alpha_2^2 y_2^2 K_{22} + + 2 \sum_{j=3}^{m} \alpha_2 y_2 \alpha_j y_j K_{2j}] L(α2)=y1(Cα2y2)+α221[(Cα2y2)2K11+2(Cα2y2)α2y2K12+2j=3m(Cα2y2)αjyjK1j+α22y22K22++2j=3mα2y2αjyjK2j]

现在我们对 α 2 \alpha_2 α2偏导数——求取极值
∂ L ′ ∂ α 2 = − y 1 y 2 − 1 2 [ 2 ( C − α 2 ) ( − y 2 ) K 11 + 2 C y 2 K 12 − 4 α 2 K 12 + 2 α 2 K 22 − 2 ∑ i = 3 m y 2 α i y i K 1 i + 2 ∑ i = 3 m y 2 α i y i K 2 i ] \frac{\partial L'}{\partial \alpha_2} = -y_1y_2 - \frac{1}{2}[ 2(C - \alpha_2)( - y_2)K_{11} + 2Cy_2K_{12} - 4\alpha_2K_{12}+2\alpha_2K_{22} - 2\sum_{i=3}^{m} y_2 \alpha_iy_iK_{1i} + 2\sum_{i=3}^{m} y_2 \alpha_i y_i K_{2i} ] α2L=y1y221[2(Cα2)(y2)K11+2Cy2K124α2K12+2α2K222i=3my2αiyiK1i+2i=3my2αiyiK2i]

我们将其化简一下,并另偏导为0
∂ L ′ ∂ α 2 = 1 − y 1 y 2 + C y 2 K 11 − α 2 K 11 − C y 2 K 12 + 2 α 2 K 12 − α 2 K 22 + ∑ i = 3 m y 2 α i y i K 1 i − ∑ i = 3 m y 2 α i y i K 2 i = 0 \frac{\partial L'}{\partial \alpha_2} = 1 - y_1y_2 + Cy_2K_{11}- \alpha_2K_{11} - Cy_2K_{12} + 2\alpha_2K_{12} - \alpha_2K_{22}+ \sum_{i=3}^{m} y_2 \alpha_iy_iK_{1i} - \sum_{i=3}^{m} y_2 \alpha_i y_i K_{2i} = 0 α2L=1y1y2+Cy2K11α2K11Cy2K12+2α2K12α2K22+i=3my2αiyiK1ii=3my2αiyiK2i=0

我们寻找一下带有 α 2 \alpha_2 α2的式子:

  • − α 2 K 11 - \alpha_2K_{11} α2K11
  • 2 α 2 K 12 2\alpha_2K_{12} 2α2K12
  • − α 2 K 22 - \alpha_2K_{22} α2K22

所以我们将 α 2 \alpha_2 α2移动到等式一边
α 2 ( K 11 − 2 K 12 + K 22 ) = 1 − y 1 y 2 + C y 2 K 11 − C y 2 K 12 + ∑ i = 3 m y 2 α i y i K 1 i − ∑ i = 3 m y 2 α i y i K 2 i \alpha_2(K_{11} - 2K_{12} + K_{22}) = 1 - y_1y_2 + Cy_2K_{11} - Cy_2K_{12} + \sum_{i=3}^{m} y_2 \alpha_iy_iK_{1i} - \sum_{i=3}^{m} y_2 \alpha_i y_i K_{2i} α2(K112K12+K22)=1y1y2+Cy2K11Cy2K12+i=3my2αiyiK1ii=3my2αiyiK2i

我们进一步进行化简

  • C是一个常数
  • 提取 y 2 y_2 y2
    α 2 n e w ( K 11 − 2 K 12 + K 22 ) = y 2 ( y 2 − y 1 + C K 11 − C K 12 + ∑ i = 3 m α i y i K 1 i − ∑ i = 3 m α i y i K 2 i ) \alpha_2^{new}(K_{11} - 2K_{12} + K_{22}) = y_2 (y_2 - y_1 + CK_{11} - CK_{12} + \sum_{i=3}^{m} \alpha_iy_iK_{1i} - \sum_{i=3}^{m} \alpha_i y_i K_{2i} ) α2new(K112K12+K22)=y2(y2y1+CK11CK12+i=3mαiyiK1ii=3mαiyiK2i)

因为这里我们是一个迭代的值,然后结合前面我们固定了其他的值,因此我们可以得到
α 1 o l d y 1 + α 2 o l d y 2 = C = α 1 n e w y 1 + α 2 n e w y 2 \alpha_1^{old} y_1+\alpha_2^{old} y_2 = C =\alpha_1^{new} y_1+\alpha_2^{new} y_2 α1oldy1+α2oldy2=C=α1newy1+α2newy2

然后替换进去之后得到
α 2 n e w ( K 11 − 2 K 12 + K 22 ) = y 2 [ y 2 − y 1 + ( α 1 o l d y 1 + α 2 o l d y 2 ) K 11 − ( α 1 o l d y 1 + α 2 o l d y 2 ) K 12 + ∑ i = 3 m α i y i K 1 i − ∑ i = 3 m α i y i K 2 i ] \alpha_2^{new}(K_{11} - 2K_{12} + K_{22}) = y_2 [y_2 - y_1 + (\alpha_1^{old} y_1+\alpha_2^{old} y_2)K_{11} - (\alpha_1^{old} y_1+\alpha_2^{old} y_2)K_{12} + \sum_{i=3}^{m} \alpha_iy_iK_{1i} - \sum_{i=3}^{m} \alpha_i y_i K_{2i} ] α2new(K112K12+K22)=y2[y2y1+(α1oldy1+α2oldy2)K11(α1oldy1+α2oldy2)K12+i=3mαiyiK1ii=3mαiyiK2i]

我们发现这个 ∑ i = 3 m \sum_{i=3}^{m} i=3m有点难以消除,我们重新审视一下我们求的目标函数
f ( x ) = w T x + b f(x) = \mathbf{w}^T\mathbf{x} + b f(x)=wTx+b
w = ∑ i = 1 m α i y i x i \mathbf{w} = \sum_{i=1}^{m} \alpha_i y_i \mathbf{x}_i w=i=1mαiyixi
同样的,我们尝试将除了 α 1 \alpha_1 α1 α 2 \alpha_2 α2之外的值都固定下来
f ( x ) = α 1 y 1 K 11 + α 2 y 2 K 22 + ∑ i = 3 m α i y i x i + b f(x) = \alpha_1 y_1 K_{11} + \alpha_2 y_2 K_{22} + \sum_{i=3}^{m} \alpha_i y_i \mathbf{x}_i + b f(x)=α1y1K11+α2y2K22+i=3mαiyixi+b

所以,我们可以得到关于 ∑ i = 3 m α i y i x i \sum_{i=3}^{m} \alpha_i y_i \mathbf{x}_i i=3mαiyixi
∑ i = 3 m α i y i K 1 i = f ( x 1 ) − α 1 y 1 K 11 − α 2 y 2 K 12 − b \sum_{i=3}^{m} \alpha_i y_iK_{1i} = f(x_1) - \alpha_1 y_1 K_{11} - \alpha_2 y_2 K_{12} - b i=3mαiyiK1i=f(x1)α1y1K11α2y2K12b

同样的,
∑ i = 3 m α i y i K 2 i = f ( x 2 ) − α 1 y 1 K 12 − α 2 y 2 K 22 − b \sum_{i=3}^{m} \alpha_i y_i K_{2i}= f(x_2) - \alpha_1 y_1 K_{12} - \alpha_2 y_2 K_{22} - b i=3mαiyiK2i=f(x2)α1y1K12α2y2K22b

带入后得到
α 2 n e w ( K 11 − 2 K 12 + K 22 ) = y 2 [ y 2 − y 1 + α 1 o l d y 1 K 11 + α 2 o l d y 2 K 11 − α 1 o l d y 1 K 12 − α 2 o l d y 2 K 12 + f ( x 1 ) − α 1 o l d y 1 K 11 − α 2 o l d y 2 K 22 − f ( x 2 ) + α 1 o l d y 1 K 12 + α 2 o l d y 2 K 22 ] \alpha_2^{new}(K_{11} - 2K_{12} + K_{22}) = y_2 [y_2 - y_1 + \alpha_1^{old} y_1K_{11}+\alpha_2^{old} y_2K_{11} - \alpha_1^{old} y_1K_{12} - \alpha_2^{old} y_2K_{12} + f(x_1) - \alpha_1^{old} y_1 K_{11} - \alpha_2^{old} y_2 K_{22} - f(x_2) + \alpha_1^{old} y_1 K_{12} + \alpha_2^{old} y_2 K_{22} ] α2new(K112K12+K22)=y2[y2y1+α1oldy1K11+α2oldy2K11α1oldy1K12α2oldy2K12+f(x1)α1oldy1K11α2oldy2K22f(x2)+α1oldy1K12+α2oldy2K22]

继续化简!
α 2 n e w ( K 11 − 2 K 12 + K 22 ) = y 2 [ y 2 − y 1 + α 2 o l d y 2 K 11 − 2 α 1 o l d y 1 K 12 + f ( x 1 ) − f ( x 2 ) + α 2 o l d y 2 K 22 ] \alpha_2^{new}(K_{11} - 2K_{12} + K_{22}) = y_2 [y_2 - y_1 +\alpha_2^{old} y_2K_{11} - 2\alpha_1^{old} y_1K_{12} + f(x_1) - f(x_2) + \alpha_2^{old} y_2 K_{22} ] α2new(K112K12+K22)=y2[y2y1+α2oldy2K112α1oldy1K12+f(x1)f(x2)+α2oldy2K22]

我们整理一下得到
α 2 n e w ( K 11 − 2 K 12 + K 22 ) = y 2 [ f ( x 1 ) − y 1 − ( f ( x 2 ) − y 2 ) + α 2 o l d y 2 ( K 11 − K 12 + K 22 ) ] \alpha_2^{new}(K_{11} - 2K_{12} + K_{22}) = y_2 [f(x_1) - y_1 -( f(x_2) - y_2) +\alpha_2^{old} y_2(K_{11} - K_{12}+ K_{22} )] α2new(K112K12+K22)=y2[f(x1)y1(f(x2)y2)+α2oldy2(K11K12+K22)]

这个时候另 E = f ( x ) − y E = f(x) - y E=f(x)y η = K 11 − K 12 + K 22 \eta = K_{11} - K_{12}+ K_{22} η=K11K12+K22,因此可以得到
α 2 n e w η = y 2 ( E 1 − E 2 + a 2 o l d y 2 η ) \alpha_2^{new} \eta = y_2(E1 - E2 + a_2^{old}y_2 \eta) α2newη=y2(E1E2+a2oldy2η)

因此,得到 α 2 \alpha_2 α2
α 2 = y 2 ( E 1 − E 2 + a 2 o l d y 2 η ) η \alpha_2 = \frac{y_2(E1 - E2 + a_2^{old}y_2 \eta)}{\eta} α2=ηy2(E1E2+a2oldy2η)

化简得到最终式子
α 2 = a 2 o l d + y 2 ( E 1 − E 2 ) η \alpha_2 = a_2^{old} + \frac{y_2(E1 - E2)}{\eta} α2=a2old+ηy2(E1E2)
对应的, α 1 \alpha_1 α1等于

α 1 = y 1 ( C − a 2 n e w y 2 ) \alpha_1 = y_1(C - a_2^{new}y_2) α1=y1(Ca2newy2)

理解了,我们将直观语言与数学推导结合,以确保即使是对这些数学原理不熟悉的读者也能理解。

SMO算法中的剪辑边界理解与推导

在序列最小优化(SMO)算法的执行过程中,重要的一步是确定拉格朗日乘数的剪辑边界。这个步骤确保乘数值在优化过程中保持有效并遵守SVM的约束条件。

约束条件

每个拉格朗日乘数 α i \alpha_i αi 必须满足两个基本约束条件:

  1. 它们的取值范围在0和某个上限 C C C 之间,这里的 C C C 是一个预设的正则化参数,用以控制模型的复杂度。
  2. 所有样本的 α i y i \alpha_i y_i αiyi 乘积之和必须等于0,以满足SVM的约束条件。

当优化 α 1 \alpha_1 α1 α 2 \alpha_2 α2 时,由于所有其他的乘数都保持不变,这两个乘数的加权和也必须保持不变。这一和在优化前已知,记为 ζ \zeta ζ,即:

α 1 o l d y 1 + α 2 o l d y 2 = ζ \alpha_1^{old} y_1 + \alpha_2^{old} y_2 = \zeta α1oldy1+α2oldy2=ζ

剪辑边界的数学推导

剪辑边界 L L L H H H 的推导取决于 y 1 y_1 y1 y 2 y_2 y2 的值。这两个标签值表示样本所属的类别,且只能是1或-1。以下是两种情况的具体推导:

情况一:$y_1 \neq y_2)

y 1 y_1 y1 y 2 y_2 y2 有不同的符号时(比如 y 1 = 1 y_1 = 1 y1=1 y 2 = − 1 y_2 = -1 y2=1),我们有:

α 2 = α 1 − ζ (因为  y 2 = − 1 ) \alpha_2 = \alpha_1 - \zeta \quad \text{(因为 $y_2 = -1$)} α2=α1ζ(因为 y2=1)

由于 0 ≤ α 2 ≤ C 0 \leq \alpha_2 \leq C 0α2C,我们可以得出:

  • L = max ⁡ ( 0 , α 2 o l d − α 1 o l d ) L = \max(0, \alpha_2^{old} - \alpha_1^{old}) L=max(0,α2oldα1old),确保在 α 1 \alpha_1 α1 增加时, α 2 \alpha_2 α2 不会变为负值。
  • H = min ⁡ ( C , C + α 2 o l d − α 1 o l d ) H = \min(C, C + \alpha_2^{old} - \alpha_1^{old}) H=min(C,C+α2oldα1old),确保在 α 1 \alpha_1 α1 减少时, α 2 \alpha_2 α2 不会超过上限 C C C
情况二: y 1 = y 2 y_1 = y_2 y1=y2

y 1 y_1 y1 y 2 y_2 y2 有相同的符号时(假设都为1),我们有:

α 2 = ζ − α 1 \alpha_2 = \zeta - \alpha_1 α2=ζα1

由此可推导出:

  • L = max ⁡ ( 0 , α 1 o l d + α 2 o l d − C ) L = \max(0, \alpha_1^{old} + \alpha_2^{old} - C) L=max(0,α1old+α2oldC),避免在 α 1 \alpha_1 α1 α 2 \alpha_2 α2 同时增加时超出 C C C
  • H = min ⁡ ( C , α 1 o l d + α 2 o l d ) H = \min(C, \alpha_1^{old} + \alpha_2^{old}) H=min(C,α1old+α2old),防止在 α 1 \alpha_1 α1 α 2 \alpha_2 α2 同时减少时出现负值。

计算 α 1 \alpha_1 α1 α 2 \alpha_2 α2

接下来,我们需要计算 α 2 \alpha_2 α2 的新值。这可以通过目标函数 L L L 的偏导数来实现,前面我们已经求过了,这里就直接给出结果

E i = u i − y i E_i = u_i - y_i Ei=uiyi 为模型对第 (i) 个样本的预测误差, u i u_i ui 是模型的预测输出,那么我们可以通过求导得到:

α 2 n e w , u n c = α 2 o l d + y 2 ( E 1 − E 2 ) η \alpha_2^{new,unc} = \alpha_2^{old} + \frac{y_2(E_1 - E_2)}{\eta} α2new,unc=α2old+ηy2(E1E2)

其中 η \eta η K ( x 1 , x 1 ) + K ( x 2 , x 2 ) − 2 K ( x 1 , x 2 ) K(\mathbf{x}_1, \mathbf{x}_1) + K(\mathbf{x}_2, \mathbf{x}_2) - 2K(\mathbf{x}_1, \mathbf{x}_2) K(x1,x1)+K(x2,x2)2K(x1,x2),它是目标函数的二次项系数。

最后,我们必须对 α 2 n e w , u n c \alpha_2^{new,unc} α2new,unc 进行剪辑,以确保它在 L L L H H H 的范围内:

α 2 n e w = { H if  α 2 n e w , u n c > H α 2 n e w , u n c if  L ≤ α 2 n e w , u n c ≤ H L if  α 2 n e w , u n c < L \alpha_2^{new} = \begin{cases} H & \text{if } \alpha_2^{new,unc} > H \\ \alpha_2^{new,unc} & \text{if } L \leq \alpha_2^{new,unc} \leq H \\ L & \text{if } \alpha_2^{new,unc} < L \end{cases} α2new= Hα2new,uncLif α2new,unc>Hif Lα2new,uncHif α2new,unc<L

一旦有了 α 2 n e w \alpha_2^{new} α2new,我们就可以直接计算 α 1 n e w \alpha_1^{new} α1new 以满足等式约束:

α 1 n e w = α 1 o l d + y 1 y 2 ( α 2 o l d − α 2 n e w ) \alpha_1^{new} = \alpha_1^{old} + y_1 y_2 (\alpha_2^{old} - \alpha_2^{new}) α1new=α1old+y1y2(α2oldα2new)

这样,我们就得到了一对新的拉格朗日乘数 α 1 n e w \alpha_1^{new} α1new α 2 n e w \alpha_2^{new} α2new,它们满足原始问题的约束条件,同时最大化了对偶问题的目标函数。通过迭代这个过程,SMO算法可以高效地求解出所有的拉格朗日乘数,最终得到SVM的解。

偏置 ( b ) 和误差 ( E ) 的推导

在序列最小优化(SMO)算法中,不仅需要优化拉格朗日乘数 α \alpha α,还必须计算出偏置 b b b 和误差 E E E 来构建完整的支持向量机模型。偏置 b b b 对于确定最优超平面的位置至关重要,而误差 E E E 用于评估分类的准确性和进行进一步的优化。

计算偏置 b b b

偏置 b b b 的计算基于那些处于边界上的支持向量,即满足 0 < α i < C 0 < \alpha_i < C 0<αi<C 的样本。这些样本严格遵守:

y i ( w T x i + b ) = 1 y_i (\mathbf{w}^T \mathbf{x}_i + b) = 1 yi(wTxi+b)=1

重新整理这个等式,我们可以解出 b b b

b = y i − w T x i b = y_i - \mathbf{w}^T \mathbf{x}_i b=yiwTxi

其中 w \mathbf{w} w w = ∑ i = 1 m α i y i x i \mathbf{w} = \sum_{i=1}^{m} \alpha_i y_i \mathbf{x}_i w=i=1mαiyixi 计算得到。为了提高计算的稳定性和减少随机误差,通常采用所有支持向量得到的 b b b 值的平均值

b = 1 n S V ∑ i ∈ S V ( y i − ∑ j = 1 m α j y j x j T x i ) b = \frac{1}{n_{SV}} \sum_{i \in SV} (y_i - \sum_{j=1}^{m} \alpha_j y_j \mathbf{x}_j^T \mathbf{x}_i) b=nSV1iSV(yij=1mαjyjxjTxi)

这里 S V SV SV 表示所有支持向量的索引集合, n S V n_{SV} nSV 是支持向量的数量。

确实,这段内容简要地描述了误差 ( E_i ) 的定义,但没有提供详细的计算或推导过程。让我们详细说明 ( E_i ) 的计算过程,以及它如何用于SMO算法中选择乘数进行优化。

误差 E i E_i Ei 的详细计算和推导

定义误差 E i E_i Ei

在SVM中,误差 E i E_i Ei 表示模型对第 i i i 个样本的预测输出 u i u_i ui 和实际标签 y i y_i yi 之间的差异。它的计算公式是:

E i = u i − y i = ( w T x i + b ) − y i E_i = u_i - y_i = (\mathbf{w}^T \mathbf{x}_i + b) - y_i Ei=uiyi=(wTxi+b)yi

推导模型输出 u i u_i ui

模型的预测输出 u i u_i ui 由决策函数确定:

u i = w T x i + b u_i = \mathbf{w}^T \mathbf{x}_i + b ui=wTxi+b

其中,权重向量 w \mathbf{w} w 是由所有支持向量的拉格朗日乘数和对应的训练样本的特征向量的乘积的和表示:

w = ∑ j = 1 m α j y j x j \mathbf{w} = \sum_{j=1}^m \alpha_j y_j \mathbf{x}_j w=j=1mαjyjxj

w \mathbf{w} w 代入 u i u_i ui 的表达式中,我们得到:

u i = ( ∑ j = 1 m α j y j x j T ) x i + b = ∑ j = 1 m α j y j x j T x i + b u_i = \left( \sum_{j=1}^m \alpha_j y_j \mathbf{x}_j^T \right) \mathbf{x}_i + b = \sum_{j=1}^m \alpha_j y_j \mathbf{x}_j^T \mathbf{x}_i + b ui=(j=1mαjyjxjT)xi+b=j=1mαjyjxjTxi+b

更新和计算 E i E_i Ei

因此, E i E_i Ei 可以重写为:

E i = ( ∑ j = 1 m α j y j x j T x i + b ) − y i E_i = \left( \sum_{j=1}^m \alpha_j y_j \mathbf{x}_j^T \mathbf{x}_i + b \right) - y_i Ei=(j=1mαjyjxjTxi+b)yi

这表明 E i E_i Ei 是由当前所有拉格朗日乘数 α j \alpha_j αj、对应的类标签 y j y_j yj、训练数据的内积以及偏置 b b b 共同决定的。

E i E_i Ei 在SMO中的应用

在SMO算法中, E i E_i Ei 用于决定哪两个乘数需要被优化。算法通常选取两个乘数:一个是最大化目标函数的梯度违反程度的乘数(通常选择 E i E_i Ei 最大或最小的样本),另一个则是与其成对优化的乘数。选择这两个乘数是为了尝试最大程度地减少目标函数,即减少误差 E E E

选择标准
  1. 选择 α 1 \alpha_1 α1: 选择违反KKT条件最严重的乘数。
  2. 选择 α 2 \alpha_2 α2: 在非边界乘数中选择使 ∣ E 1 − E 2 ∣ |E_1 - E_2| E1E2 最大的 α 2 \alpha_2 α2。这是基于启发式的,目的是选择有助于最快收敛的乘数。

通过这种方式,SMO算法有效地使用 E_i$ 来引导搜索过程,确保每一步都朝着减少整体分类误差的方向前进。

整合 b b b E E E 的更新过程

在优化 α 1 \alpha_1 α1 α 2 \alpha_2 α2 后,我们需要重新计算 b b b E E E。假设 α 2 \alpha_2 α2 更新后的值为 α 2 n e w \alpha_2^{new} α2new,我们计算 b b b 的新值,考虑两种情况,以使得新的 b b b 对所有支持向量都有效:

  1. 如果 0 < α 2 n e w < C 0 < \alpha_2^{new} < C 0<α2new<C,那么 x 2 x_2 x2 是一个支持向量,可以直接用上述 b b b 的更新公式。
  2. 如果 α 2 n e w \alpha_2^{new} α2new 达到边界 0 或 C C C ,则需要通过其他支持向量来平均计算 b b b

每次更新 α \alpha α 后,都需要更新所有样本的 E E E 值,以便下一次迭代使用:

E i n e w = w T x i + b n e w − y i E_i^{new} = \mathbf{w}^T \mathbf{x}_i + b^{new} - y_i Einew=wTxi+bnewyi

这篇关于复现SMO算法:深入探索序列最小优化的分析方法【三、算法原理揭秘-1】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/949588

相关文章

pip install jupyterlab失败的原因问题及探索

《pipinstalljupyterlab失败的原因问题及探索》在学习Yolo模型时,尝试安装JupyterLab但遇到错误,错误提示缺少Rust和Cargo编译环境,因为pywinpty包需要它... 目录背景问题解决方案总结背景最近在学习Yolo模型,然后其中要下载jupyter(有点LSVmu像一个

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

关于最长递增子序列问题概述

《关于最长递增子序列问题概述》本文详细介绍了最长递增子序列问题的定义及两种优化解法:贪心+二分查找和动态规划+状态压缩,贪心+二分查找时间复杂度为O(nlogn),通过维护一个有序的“尾巴”数组来高效... 一、最长递增子序列问题概述1. 问题定义给定一个整数序列,例如 nums = [10, 9, 2

Deepseek使用指南与提问优化策略方式

《Deepseek使用指南与提问优化策略方式》本文介绍了DeepSeek语义搜索引擎的核心功能、集成方法及优化提问策略,通过自然语言处理和机器学习提供精准搜索结果,适用于智能客服、知识库检索等领域... 目录序言1. DeepSeek 概述2. DeepSeek 的集成与使用2.1 DeepSeek API

Tomcat高效部署与性能优化方式

《Tomcat高效部署与性能优化方式》本文介绍了如何高效部署Tomcat并进行性能优化,以确保Web应用的稳定运行和高效响应,高效部署包括环境准备、安装Tomcat、配置Tomcat、部署应用和启动T... 目录Tomcat高效部署与性能优化一、引言二、Tomcat高效部署三、Tomcat性能优化总结Tom

MySQL中的MVCC底层原理解读

《MySQL中的MVCC底层原理解读》本文详细介绍了MySQL中的多版本并发控制(MVCC)机制,包括版本链、ReadView以及在不同事务隔离级别下MVCC的工作原理,通过一个具体的示例演示了在可重... 目录简介ReadView版本链演示过程总结简介MVCC(Multi-Version Concurr

深入解析Spring TransactionTemplate 高级用法(示例代码)

《深入解析SpringTransactionTemplate高级用法(示例代码)》TransactionTemplate是Spring框架中一个强大的工具,它允许开发者以编程方式控制事务,通过... 目录1. TransactionTemplate 的核心概念2. 核心接口和类3. TransactionT

解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)

《解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)》该文章介绍了使用Redis的阻塞队列和Stream流的消息队列来优化秒杀系统的方案,通过将秒杀流程拆分为两条流水线,使用Redi... 目录Redis秒杀优化方案(阻塞队列+Stream流的消息队列)什么是消息队列?消费者组的工作方式每

深入理解Apache Airflow 调度器(最新推荐)

《深入理解ApacheAirflow调度器(最新推荐)》ApacheAirflow调度器是数据管道管理系统的关键组件,负责编排dag中任务的执行,通过理解调度器的角色和工作方式,正确配置调度器,并... 目录什么是Airflow 调度器?Airflow 调度器工作机制配置Airflow调度器调优及优化建议最

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI