本文主要是介绍复现SMO算法:深入探索序列最小优化的分析方法【三、算法原理揭秘-1】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在这篇深入探讨序列最小优化(SMO)算法的第一部分中,我们专注于算法核心的第一个组成部分——求解两个拉格朗日乘数的分析方法。我们将逐步展开详细的数学推导,明确如何从约束的确定到乘数的优化更新,直至找到最优解。在介绍这一复杂的过程时,我们将特别注意保持逻辑的清晰性和步骤的精确性,确保即使是初学者也能跟随每一个推导步骤。
一、求解两个拉格朗日乘数的分析方法
SMO算法的一个关键创新是将大型二次规划(QP)问题分解为只涉及两个拉格朗日乘数
的最小可能QP问题。每一步中,算法选择两个拉格朗日乘数进行 联合优化 ,并且通过 分析方法 直接求解这两个乘数的最优值。
对于这两个乘数,首先需要确定它们的约束条件。这些约束包括:
- 边界约束:由于拉格朗日乘数必须非负,且受到参数 C C C 的限制,即 0 ≤ α i ≤ C 0 \leq \alpha_i \leq C 0≤αi≤C。
- 等式约束:由于分类问题的目标函数约束,两个乘数必须满足 α 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∣∣w∣∣2
这是在最小化权重向量 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∣∣w∣∣2+i=1∑mαi(1−yi(wTxi+b))
目标是最大化 L L L 关于 α \alpha α 的值,同时满足对于所有 α i \alpha_i αi ,都有 α i ≥ 0 \alpha_i \geq 0 αi≥0
拉格朗日函数 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=1∑mαiyixi
0 = ∑ i = 1 m α i y i 0 = \sum_{i=1}^{m} \alpha_i y_i 0=i=1∑mα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=1∑mαi−21i=1∑mj=1∑mα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=1∑mαi−21i=1∑mj=1∑mαiαjyiyjK(xi,xj))
0 = ∑ i = 1 m α i y i 0 = \sum_{i=1}^{m} \alpha_i y_i 0=i=1∑mα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=3∑mαiyi=0
具体的解析步骤包括
- 计算 α 2 \alpha_2 α2 的最优解的
未剪辑版本
- 如果需要,将这个解剪辑到其
可能的区间
[ L , H ] [L, H] [L,H],其中 L L L 和 H H H 是由不等式约束决定的上下界。 - α 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,j≥3 】
首先,我们有
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=1∑mαi−21i=1∑mj=1∑mα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=1∑mαi=(α1+α2+i=3∑mα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=1∑mj=1∑mα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,j≥3]+
[ α 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,j≥3]+
[ ∑ 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 i≥3,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 i≥3,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=3m∑j=3mαiyiαjyjκijfor i≥3,j≥3]
最终,我们合并同类项(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=1∑mj=1∑mαiαjyiyjK(xi,xj)=α1y1α1y1κ11+2α1y1α2y2κ12+2j=3∑mα1y1αjyjκ1j+α2y2α2y2κ22+2j=3∑mα2y2αjyjκ2j+i=3∑mj=3∑mαiyiαjyjκij
因为我们的思想是将>=3的都固定下来,所以对应的 i ≥ 3 i \ge 3 i≥3和 j ≥ 3 j \ge 3 j≥3都是常数,在后面的式子计算中,我们可以省略( ∑ 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=3m∑j=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+α2−21(α12y12K11+2α1y1α2y2K12+2j=3∑mα1y1αjyjκ1j+α22y22K22++2j=3∑mα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=3∑mαiyi=0
因为固定了 i ≥ 3 i \ge 3 i≥3后面的值,所以 ∑ 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)+α2−21[(C−α2y2)2K11+2y1(C−α2y2)y1α2y2K12+2j=3∑my1(C−α2y2)y1αjyjκ1j+α22y22K22++2j=3∑mα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)+α2−21[(C−α2y2)2K11+2(C−α2y2)α2y2K12+2j=3∑m(C−α2y2)αjyjK1j+α22y22K22++2j=3∑mα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} ] ∂α2∂L′=−y1y2−21[2(C−α2)(−y2)K11+2Cy2K12−4α2K12+2α2K22−2i=3∑my2αiyiK1i+2i=3∑my2α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 ∂α2∂L′=1−y1y2+Cy2K11−α2K11−Cy2K12+2α2K12−α2K22+i=3∑my2αiyiK1i−i=3∑my2α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(K11−2K12+K22)=1−y1y2+Cy2K11−Cy2K12+i=3∑my2αiyiK1i−i=3∑my2α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(K11−2K12+K22)=y2(y2−y1+CK11−CK12+i=3∑mαiyiK1i−i=3∑mα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(K11−2K12+K22)=y2[y2−y1+(α1oldy1+α2oldy2)K11−(α1oldy1+α2oldy2)K12+i=3∑mαiyiK1i−i=3∑mα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=1∑mα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=3∑mα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=3∑mαiyiK1i=f(x1)−α1y1K11−α2y2K12−b
同样的,
∑ 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=3∑mαiyiK2i=f(x2)−α1y1K12−α2y2K22−b
带入后得到
α 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(K11−2K12+K22)=y2[y2−y1+α1oldy1K11+α2oldy2K11−α1oldy1K12−α2oldy2K12+f(x1)−α1oldy1K11−α2oldy2K22−f(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(K11−2K12+K22)=y2[y2−y1+α2oldy2K11−2α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(K11−2K12+K22)=y2[f(x1)−y1−(f(x2)−y2)+α2oldy2(K11−K12+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} η=K11−K12+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(E1−E2+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(E1−E2+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(E1−E2)
对应的, α 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(C−a2newy2)
理解了,我们将直观语言与数学推导结合,以确保即使是对这些数学原理不熟悉的读者也能理解。
SMO算法中的剪辑边界理解与推导
在序列最小优化(SMO)算法的执行过程中,重要的一步是确定拉格朗日乘数的剪辑边界。这个步骤确保乘数值在优化过程中保持有效并遵守SVM的约束条件。
约束条件
每个拉格朗日乘数 α i \alpha_i αi 必须满足两个基本约束条件:
- 它们的取值范围在0和某个上限 C C C 之间,这里的 C C C 是一个预设的正则化参数,用以控制模型的复杂度。
- 所有样本的 α 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≤α2≤C,我们可以得出:
- 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+α2old−C),避免在 α 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=ui−yi 为模型对第 (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(E1−E2)
其中 η \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,unc≤Hif α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=yi−wTxi
其中 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=nSV1i∈SV∑(yi−j=1∑mα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=ui−yi=(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=1∑mα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=1∑mαjyjxjT)xi+b=j=1∑mα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=1∑mα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 \alpha_1 α1: 选择违反KKT条件最严重的乘数。
- 选择 α 2 \alpha_2 α2: 在非边界乘数中选择使 ∣ E 1 − E 2 ∣ |E_1 - E_2| ∣E1−E2∣ 最大的 α 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 对所有支持向量都有效:
- 如果 0 < α 2 n e w < C 0 < \alpha_2^{new} < C 0<α2new<C,那么 x 2 x_2 x2 是一个
支持向量
,可以直接用上述 b b b 的更新公式。 - 如果 α 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+bnew−yi
这篇关于复现SMO算法:深入探索序列最小优化的分析方法【三、算法原理揭秘-1】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!