学习July博文总结——支持向量机(SVM)的深入理解(下)

接上篇博文《学习July博文总结——支持向量机(SVM)的深入理解(上) 》

三、证明SVM

凡是涉及到要证明的内容和理论,一般都不是怎么好惹的东西。绝大部分时候,看懂一个东西不难,但证明一个东西则需要点数学功底;进一步,证明一个东西也不是特别难,难的是从零开始发明创造这个东西的时候,则显艰难。因为任何时代,大部分人的研究所得都不过是基于前人的研究成果,前人所做的是开创性工作,而这往往是最艰难最有价值的,他们被称为真正的先驱。牛顿也曾说过,他不过是站在巨人的肩上。你,我则更是如此。正如陈希孺院士在他的著作《数理统计学简史》的第4章、最小二乘法中所讲:在科研上诸多观念的革新和突破是有着很多的不易的,或许某个定理在某个时期由某个人点破了,现在的我们看来一切都是理所当然,但在一切没有发现之前,可能许许多多的顶级学者毕其功于一役,耗尽一生,努力了几十年最终也是无功而返。
话休絮烦,要证明一个东西先要弄清楚它的根基在哪,就是明白构成它的基础是哪些理论。以下内容基本是上文中未讲到的一些定理的证明,包括其背后的逻辑、来源背景等内容。

1. 线性学习器

感知机算法

感知机算法是1956年提出的,年代久远,依然影响着当今,当然,可以肯定的是,此算法亦非最优,后续会有更详尽阐述。
不过有一点必须清楚,这个算法的作用很简单:不断的训练试错,以期寻找一个合适的超平面。
感知机算法的伪代码如下所示:

给定线性可分的数据集 S S S和学习率 η ∈ R + \eta \in \mathbb{R}^+ ηR+
w 0 ← 0 ; b 0 ← 0 ; k ← 0 w_0 \leftarrow 0; b_0 \leftarrow 0; k \leftarrow 0 w00;b00;k0
R ← max ⁡ i ≤ i ≤ l ∥ x i ∥ R \leftarrow \max_{i \leq i \leq l}\Vert x_i \Vert Rmaxiilxi
重复:
$ \qquad for \ i = 1 \ to \ l$
$ \qquad \qquad if \ y_i [(w_k \cdot x_i) + b_k ] \leq 0 \quad then$
$ \qquad \qquad \qquad w_{k+1} \leftarrow w_k + \eta y_i x_i$
$ \qquad \qquad \qquad b_{k+1} \leftarrow b_k + \eta y_i R^2$
$ \qquad \qquad \qquad k \leftarrow k + 1$
$ \qquad \qquad end \ if$
$ \qquad end \ for$
直到在for循环中没有错误发生
返回 ( w k , b k ) (w_k, b_k) (wk,bk),这里k是错误次数

下面举个例子:

图3.1 感知机算法示例
如上图3.1所示,凭我们的直觉可以看出,图中的红线是最优超平面,蓝线则是根据感知机算法在不断的训练中,最终,若蓝线能通过不断的训练移动到红线位置上,则代表训练成功。

既然需要通过不断的训练以让蓝线最终成为最优分类超平面,那么,到底需要训练多少次呢?这个问题可以用Novikoff定理解释。

Novikoff定理:如果分类超平面存在, 仅需在序列 S S S上迭代几次,在界为 ( 2 R γ ) 2 (\frac{2R}{\gamma})^2 (γ2R)2的错误次数下就可以找到分类超平面,算法停止。

  • R = max ⁡ 1 ≤ i ≤ l ∥ x i ∥ R = \max_{1 \leq i \leq l} \Vert x_i \Vert R=max1ilxi
  • γ \gamma γ :扩充间隔(即前文第一章中提到的最大分类间隔;根据误分次数公式可知,迭代次数与对应于扩充(包括偏置)权重的训练集的间隔有关)

Novikoff定理告诉我们当间隔是正的时候感知机算法会在有限次数的迭代中收敛,也就是说Novikoff定理证明了感知机算法的收敛性,即能得到一个界,不至于无穷循环下去。
后续怎么推导出最大分类间隔请回到本文第一、二章,此处不重复。

同时有一点得注意:感知机算法虽然可以通过简单迭代对线性可分数据生成正确分类的超平面,但不是最优效果,那怎样才能得到最优效果呢,就是上文中第一部分所讲的寻找最大分类间隔超平面。此外,Novikoff定理的证明请见这里

2. 非线性学习器

Mercer定理

Mercer定理:如果函数K是 R n × R n → R \mathbb{R}^n \times \mathbb{R}^n \rightarrow \mathbb{R} Rn×RnR上的映射(也就是从两个n维向量映射到实数域)。
那么如果K是一个有效核函数(也称为Mercer核函数),那么当且仅当对于训练样例 { x 1 , x 2 , . . . , x m } \{x_1, x_2, ..., x_m\} {x1,x2,...,xm},其相应的核函数矩阵是对称半正定的。 要理解Mercer定理,先要了解什么是半正定矩阵;要了解半正定矩阵,需要了解什么是正定矩阵。
关于正定与半正定矩阵,内容基本上是大学矩阵论中的内容,可以重新复习一下。下面给出一些正定矩阵和半正定矩阵的简单介绍。

正定矩阵:设 M M M n n n阶方阵,如果对任何非零向量 z z z,都有 z T M z > 0 z^T M z > 0 zTMz>0,其中 z T z^T zT表示 z z z的转置,就称 M M M正定矩阵。

正定矩阵的判定定理:
  定理1:对称阵 A A A为正定的充分必要条件是: A A A的特征值全为正。
  定理2:对称阵 A A A为正定的充分必要条件是: A A A的各阶顺序主子式都为正。
  定理3:任意阵 A A A为正定的充分必要条件是: A A A合同于单位阵。
正定矩阵的性质:
  性质1:正定矩阵的任一主子矩阵也是正定矩阵。
  性质2:若 A A A n n n阶对称正定矩阵,则存在唯一的主对角线元素都是正数的下三角阵 L L L,使得 A = L L T A = LL^T A=LLT,此分解式称为 正定矩阵的楚列斯基(Cholesky)分解。
  性质3:若 A A A n n n阶正定矩阵,则 A A A n n n阶可逆矩阵。

半正定矩阵的概念与正定矩阵比较相似:

半正定矩阵:一个 n × n n× n n×n的埃尔米特矩阵 M M M是正定的,当且仅当对于每个非零的复向量 z z z,都有 z T M z > 0 z^TMz > 0 zTMz>0,则称 M M M为正定矩阵,其中 z T z^T zT表示 z z z的转置矩阵。当 z T M z > 0 z^T Mz > 0 zTMz>0弱化为 z T M ≥ 0 z^T M \geq 0 zTM0时,称 M M M是半正定矩阵;

半正定矩阵的判定:若矩阵 A A A的特征值大于等于0,则半正定。否则矩阵 A A A为非正定。

Mercer定理的证明在下面的网址中可以查询:
http://ftp136343.host106.web522.com/a/biancheng/matlab/2013/0120/648.html

3. 损失函数

支持向量机(SVM)是90年代中期发展起来的基于统计学习理论的一种机器学习方法,通过寻求结构化风险最小来提高学习机泛化能力,实现经验风险和置信范围的最小化,从而达到在统计样本量较少的情况下,亦能获得良好统计规律的目的。

可能很多人并不了解结构化风险、经验风险是什么,要了解这两种风险,还得从监督学习说起。
监督学习实际上就是一个经验风险或者结构风险函数的最优化问题。风险函数度量平均意义下模型预测的好坏,模型每一次预测的好坏用损失函数来度量。
监督学习从假设空间 F F F中,选择模型 f f f作为决策函数,对于给定的输入 X X X,由输入 f ( X ) f(X) f(X)给出相应的输出 Y Y Y。参数的具体意义如下:

  • X X X:输入的数据;
  • f ( X ) f(X) f(X):输入数据后,根据模型输出的预测值;
  • Y Y Y:实际的输出数据;

预测值 f ( X ) f(X) f(X)可能与真实值 Y Y Y一致,也可能不一致。预测值与真实值之间的差别成都用一个损失函数来度量。损失函数被记为 L ( Y , f ( X ) ) L(Y, f(X)) L(Y,f(X))

(1) 常用损失函数

  • 0-1损失函数
    • KaTeX parse error: No such environment: align* at position 44: …{matrix} \begin{̲a̲l̲i̲g̲n̲*̲}̲ & 1, Y \neq f(…
  • 平方损失函数
    • L ( Y , f ( X ) ) = ( Y − f ( X ) ) 2 L(Y, f(X)) = (Y - f(X))^2 L(Y,f(X))=(Yf(X))2
  • 绝对损失函数
    • L ( Y , f ( X ) ) = ∣ Y − f ( X ) ∣ L(Y, f(X)) = \vert Y - f(X) \vert L(Y,f(X))=Yf(X)
  • 对数损失函数
    • L ( Y , P ( Y ∣ X ) ) = − log ⁡ P ( Y ∣ X ) L(Y, P(Y \vert X)) = - \log P(Y \vert X) L(Y,P(YX))=logP(YX)

(2) 经验风险与结构风险

如果给定一个训练数据集如下:
T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . ( x i , y i ) . . . , ( x N , y N ) } ( 3.3.1 ) T = \{ (x_1, y_1), (x_2, y_2), ... (x_i, y_i)..., (x_N, y_N) \} \qquad (3.3.1) T={(x1,y1),(x2,y2),...(xi,yi)...,(xN,yN)}(3.3.1)
模型 f ( X ) f(X) f(X)关于训练数据集的平均损失,称为经验风险,公式如下:
R e m p ( f ) = 1 N ∑ i = 1 N L ( y i , f ( x i ) ) ( 3.3.2 ) R_{emp}(f) = \frac{1}{N} \sum_{i=1}^N L(y_i, f(x_i)) \qquad (3.3.2) Remp(f)=N1i=1NL(yi,f(xi))(3.3.2)
关于如何选择模型,监督学习有两种策略:经验风险最小化、结构风险最小化

经验风险最小化的策略认为:经验风险最小的模型就是最优模型,即按照经验风险最小化的标准求取最优模型,就是求解如下最优化问题:
min ⁡ f ∈ F 1 N ∑ i = 1 N L ( y i , f ( x i ) ) ( 3.3.3 ) \min_{f \in F} \frac{1}{N} \sum_{i=1}^N L(y_i, f(x_i)) \qquad (3.3.3) fFminN1i=1NL(yi,f(xi))(3.3.3)
然而当样本容量很小时,经验风险最小化的策略容易产生过拟合现象。

结构风险最小化可以防止过拟合。结构风险实在经验风险的基础上,加上表示模型复杂度的惩罚项,结构风险的定义如下:
R s r m ( f ) = 1 N ∑ i = 1 N L ( y i , f ( x i ) ) + λ J ( f ) ( 3.3.4 ) R_{srm}(f) = \frac{1}{N} \sum_{i=1}^N L(y_i, f(x_i)) + \lambda J(f) \qquad (3.3.4) Rsrm(f)=N1i=1NL(yi,f(xi))+λJ(f)(3.3.4)
式(3.3.4)中参数说明如下:

  • J ( f ) J(f) J(f):模型的复杂度
    • 模型 f f f越复杂, J ( f ) J(f) J(f)越大;模型越简单, J ( f ) J(f) J(f)越小;
    • 也就是说, J ( f ) J(f) J(f)是对复杂模型的惩罚;
  • λ ≥ 0 \lambda \geq 0 λ0:权衡经验风险和模型复杂度的系数

结构风险最小化的策略认为结构风险最小的模型就是最优模型,所以求最优模型就是求解如下所示的最优化问题:
min ⁡ f ∈ F 1 N ∑ i = 1 N L ( y i , f ( x i ) ) + λ J ( f ) ( 3.3.5 ) \min_{f \in F} \frac{1}{N} \sum_{i=1}^N L(y_i, f(x_i)) + \lambda J(f) \qquad (3.3.5) fFminN1i=1NL(yi,f(xi))+λJ(f)(3.3.5)

这样监督学习问题就变成了经验风险或结构风险函数的最优化问题,如式(3.3.4)与(3.3.5)。
于是,SVM也有了第二种理解,即最优化+损失最小。如果从损失函数和优化算法角度看SVM, boosting, LR等算法,可能会有不同收获。

4. 最小二乘法

(1) 最小二乘法的说明

下面引用《正态分布的前世今生》里的内容稍微简单阐述一下最小二乘法。
我们口头中经常说:一般来说,平均来说。如平均来说,不吸烟的健康优于吸烟者,之所以要加“平均”二字,是因为凡事皆有例外,总存在某个特别的人他吸烟但由于经常锻炼所以他的健康状况可能会优于他身边不吸烟的朋友。而最小二乘法的一个最简单的例子便是算术平均。
最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。用函数表示为下式:
min ⁡ x → ∑ i = 1 n ( y m − y i ) 2 ( 3.3.6 ) \min_{\overrightarrow{x}} \sum_{i=1}^{n} (y_m - y_i) ^ 2 \qquad (3.3.6) x mini=1n(ymyi)2(3.3.6)
误差可以被定义为预测值与实际真实值的差量,所以最小二乘法就是使误差平方和达到最小,以寻求估计值的方法。用最小二乘法得到的估计,就叫做最小二乘估计。当然,取平方和作为目标函数只是众多可取的方法之一。
最小二乘法的一般形式,可以表示成下式:
min ⁡ x → ∥ y m → − y → ∥ 2 ( 3.3.7 ) \min_{\overrightarrow{x}} \Vert \overrightarrow{y_m} - \overrightarrow{y} \Vert _ 2 \qquad (3.3.7) x minym y 2(3.3.7)
有效的最小二乘法,基本思想就是认为测量中有误差,所以所有方程的累计误差为:
累 积 误 差 = ∑ ( 观 测 值 − 理 论 值 ) 2 累积误差= \sum (观测值 - 理论值)^2 =()2
我们求解出导致累计误差最小的参数即可:
KaTeX parse error: No such environment: align* at position 7: \begin{̲a̲l̲i̲g̲n̲*̲}̲ & \hat{\beta} …

最小二乘法的优点如下:

  • 最小二乘使得误差平方和最小,并在各个方程的误差之间建立了一种平衡,从而防止某一个极端误差取得支配地位;
  • 计算中只要求偏导后求解线性方程组,计算过程明确便捷;
  • 最小二乘可以导出算术平均值作为估计值;

对于上面的最后一点,从统计学角度来看,是很重要的一个性质。推理如下:
假设真值为 θ \theta θ x 1 , . . . , x n x_1, ..., x_n x1,...,xn是测量值。每次测量的误差为 e i = x i − θ e_i = x_i - \theta ei=xiθ,那么按照最小二乘法,累计误差为:
L ( θ ) = ∑ i = 1 n e i 2 = ∑ i = 1 n ( x i − θ ) 2 ( 3.3.9 ) L(\theta) = \sum_{i=1}^n e_i^2 = \sum_{i=1}^n (x_i - \theta)^2 \qquad (3.3.9) L(θ)=i=1nei2=i=1n(xiθ)2(3.3.9)
求解 θ \theta θ使 L ( θ ) L(\theta) L(θ)最小,结果正好是其算术平均值: x ‾ = ∑ i − 1 n x i n \overline{x} = \frac{\sum_{i-1}^n x_i}{n} x=ni1nxi
由于算术平均是一个历经考验的方法,而以上的推理说明,算术平均是最小二乘的一个特例,所以从另一个角度说明了最小二乘方法的优良性,使我们对最小二乘法更加有信心。
最小二乘法发表之后很快得到了大家的认可接受,并迅速的在数据分析实践中被广泛使用。不过历史上又有人把最小二乘法的发明归功于高斯,这又是怎么一回事呢。高斯在1809年也发表了最小二乘法,并且声称自己已经使用这个方法多年。高斯发明了小行星定位的数学方法,并在数据分析中使用最小二乘方法进行计算,准确的预测了谷神星的位置。
说了这么多,貌似跟本文主题SVM没有关系。后文会将最小二乘法与SVM联系在一起。本质上说,最小二乘法即是一种参数估计方法,说到参数估计,咱们得从一元线性模型说起。

(2) 最小二乘法的解法

什么是一元线性模型呢? 这里引用一元线性模型的一篇博客,来梳理下几个基本概念:
参考地址:《一元线性回归模型与最小二乘法及其C++实现 》

  • 监督学习中,如果预测的变量是**离散的,我们称其为分类**(如决策树,支持向量机等);如果预测的变量是**连续的,我们称其为回归**;
  • 回归分析中,如果只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析;
  • 如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。
  • 对于二维空间线性是一条直线;对于三维空间线性是一个平面,对于多维空间线性是一个超平面;

对于一元线性回归模型,假设从总体中获取了n组观察值 ( X 1 , Y 1 ) , ( X 2 , Y 2 ) , . . . , . . . , ( X n , Y n ) (X_1, Y_1), (X_2, Y_2), ..., ... , (X_n, Y_n) (X1,Y1),(X2,Y2),...,...,(Xn,Yn)。对于平面中的这n个点,可以使用无数条曲线来拟合。要求样本回归函数尽可能好地拟合这组值。综合起来看,这条直线处于样本数据的中心位置最合理。
选择最佳拟合曲线的标准可以确定为:使总的拟合误差(即总残差)达到最小。有以下三个标准可以选择:

  • 用“残差和最小”确定直线位置是一个途径。但很快发现计算“残差和”存在相互抵消的问题;
  • 用“残差绝对值和最小”确定直线位置也是一个途径,但绝对值的计算比较麻烦;
  • 最小二乘法的原则是以“残差平方和最小”确定直线位置,用最小二乘法除了计算比较方便外,得到的估计量还具有优良特性。这种方法对异常值非常敏感。

最常用的是普通最小二乘法(Ordinary Least Square, OLS):所选择的回归模型应该使所有观察值的残差平方和达到最小,即采用平方损失函数。
我们定义样本回归模型为:
Y i = β 0 ^ + β 1 ^ X i + e i Y_i = \hat{\beta_0} + \hat{\beta_1}X_i + e_i Yi=β0^+β1^Xi+ei
转换上式为:
e i = Y i − β 0 ^ − β 1 ^ X i ( 3.3.10 ) e_i = Y_i - \hat{\beta_0} - \hat{\beta_1}X_i \qquad (3.3.10) ei=Yiβ0^β1^Xi(3.3.10)
其中, e i e_i ei为样本 ( X i , Y i ) (X_i, Y_i) (Xi,Yi)的误差。
接着,我们定义平方损失函数Q:
Q = ∑ i = 1 n e i 2 = ∑ i = 1 n ( Y i − Y i ^ ) 2 = ∑ i = 1 n ( Y i − β 0 ^ − β 1 ^ X i ) 2 ( 3.3.11 ) Q = \sum_{i=1}^n e_i^2 = \sum_{i=1}^n (Y_i - \hat{Y_i} ) ^2 = \sum_{i=1}^n (Y_i - \hat{\beta_0} - \hat{\beta_1} X_i) ^ 2 \qquad (3.3.11) Q=i=1nei2=i=1n(YiYi^)2=i=1n(Yiβ0^β1^Xi)2(3.3.11)
则我们通过 Q Q Q最小确定这条直线,就可以确定 β 0 ^ , β 1 ^ \hat{\beta_0}, \hat{\beta_1} β0^,β1^,以 β 0 ^ , β 1 ^ \hat{\beta_0}, \hat{\beta_1} β0^,β1^为变量,把它们看做是 Q Q Q的函数,就变成了一个求极值的问题。 β 0 ^ , β 1 ^ \hat{\beta_0}, \hat{\beta_1} β0^,β1^可以通过求导得到。

Q Q Q β 0 ^ , β 1 ^ \hat{\beta_0}, \hat{\beta_1} β0^,β1^求偏导得到:
KaTeX parse error: No such environment: align* at position 31: …{matrix} \begin{̲a̲l̲i̲g̲n̲*̲}̲ & \frac{\parti…

解得:
KaTeX parse error: No such environment: align* at position 31: …{matrix} \begin{̲a̲l̲i̲g̲n̲*̲}̲ & \frac{\parti…

这就是最小二乘法的解法,求得平方损失函数的极值点。
自此,你看到求解最小二乘法与求解SVM问题何等相似,尤其是定义损失函数,而后通过偏导求得极值。

5. SMO算法

上文中,我们提到了求解对偶问题的序列最小最优化算法SMO算法,但并未提到其具体解法。
首先回到之前没有解决的问题,即式(2.3.5):
KaTeX parse error: No such environment: align* at position 7: \begin{̲a̲l̲i̲g̲n̲*̲}̲ & \max_{\alpha…
实际上,上式最终等价于求解:
KaTeX parse error: No such environment: align* at position 7: \begin{̲a̲l̲i̲g̲n̲*̲}̲ & \min_\alpha …
下面介绍上式(3.5.1)的推导过程。

(1) SMO算法的推导

推导SMO算法之前,我们首先定义特征到结果的输出函数如下:
u = ω → ⋅ x → − b ( 3.5.2 ) u = \overrightarrow{\omega} \cdot \overrightarrow{x} - b \qquad (3.5.2) u=ω x b(3.5.2)
注:其实上式(3.5.2)中的 u u u和我们之前定义的 f ( x ) = ω T x + b f(x) = \omega ^T x + b f(x)=ωTx+b实质是一样的。

接着我们回顾一下在第一章第4节,最大间隔分类器部分设定的原始优化问题。由于函数间隔 γ = 1 \gamma = 1 γ=1,所以改写式(2.1.1)如下式(3.5.3)所示:
KaTeX parse error: No such environment: align* at position 31: …{matrix} \begin{̲a̲l̲i̲g̲n̲*̲}̲ & \min \frac{1…
按照第二章第1节的方法,对上式(3.5.3)的目标函数求拉格朗日函数,并令拉格朗日函数对 ω , α \omega, \alpha ω,α求偏导,得到:
KaTeX parse error: No such environment: align* at position 31: …{matrix} \begin{̲a̲l̲i̲g̲n̲*̲}̲ & \overrightar…
将上式(3.5.4)代入到(3.5.2)中,得到:
u = ∑ i = 1 n y j α j K ( x j → , x → ) − b ( 3.5.5 ) u = \sum_{i=1}^n y_j \alpha_j \mathcal{K} (\overrightarrow{x_j}, \overrightarrow{x}) - b \qquad (3.5.5) u=i=1nyjαjK(xj ,x )b(3.5.5)
回顾前文第二章第2节第(2)小节中的讲解,拉格朗日函数的目标函数可以转化成式(2.2.12),即:
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ & \max_{\alpha…
上式也可以从 max ⁡ \max max函数转化成 min ⁡ \min min函数,变成:
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ & \min \Psi(\o…
按照前文第二章第3节,加入松弛变量后,模型修改成式(2.3.3):
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ & \min \frac{1…
从而,我们的问题最终变为下式:
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ & \min \Psi(\o…

下面,我们要解决的问题是在 α i = { α 1 , α 2 , . . . , α n } \alpha_i = \{ \alpha_1, \alpha_2, ..., \alpha_n \} αi={α1,α2,...,αn}上求取上式(3.5.7)中目标函数的最小值。
为了求解这些乘子,每次从中任意抽取两个乘子 α 1 , α 2 \alpha_1, \alpha_2 α1,α2,然后固定 α 1 , α 2 \alpha_1, \alpha_2 α1,α2和以外的其它乘子 { α 3 , α 4 , . . . , α n } \{ \alpha_3, \alpha_4, ..., \alpha_n \} {α3,α4,...,αn},使得目标函数只是关于和的函数,使得目标函数只是关于 α 1 , α 2 \alpha_1, \alpha_2 α1,α2的函数。这样不断的从一堆乘子中任意抽取两个求解,不断的迭代求解子问题,最终达到求解原问题的目的。

上式(3.5.7)中的 Ψ ( ⋅ ) \Psi(\cdot) Ψ()即为原对偶问题的子问题目标函数,它可以表达为:
Ψ = 1 2 K 11 α 1 2 + 1 2 K 22 α 2 2 + s K 12 α 1 α 2 + y 1 α 1 v 1 + y 2 α 2 v 2 − α 1 − α 2 + Ψ c o n s t a n t ( 3.5.8 ) \Psi = \frac{1}{2} \mathcal{K}_{11} \alpha_1^2 + \frac{1}{2}\mathcal{K}_{22} \alpha_2^2 + s \mathcal{K}_{12} \alpha_1 \alpha_2 + y_1 \alpha_1 v_1 + y_2 \alpha_2 v_2 - \alpha_1 - \alpha_2 + \Psi_{constant} \qquad (3.5.8) Ψ=21K11α12+21K22α22+sK12α1α2+y1α1v1+y2α2v2α1α2+Ψconstant(3.5.8)
上式(3.5.8)的参数含义如下所示:

  • K i j = K ( x i → , x j → ) \mathcal{K}_{ij} = \mathcal{K} (\overrightarrow{x_i}, \overrightarrow{x_j}) Kij=K(xi ,xj )
  • v i → = ∑ j = 3 n y j α j ∗ K i j = u i + b ∗ − y 1 α 1 ∗ K 1 i − y 2 α 2 ∗ K 2 i \overrightarrow{v_i} = \sum_{j=3}^n y_j \alpha_j^* \mathcal{K} _{ij} = u_i + b^* - y_1 \alpha_1^* \mathcal{K}_{1i} - y_2 \alpha_2^* \mathcal{K}_{2i} vi =j=3nyjαjKij=ui+by1α1K1iy2α2K2i
  • s = y 1 ⋅ y 2 s = y_1 \cdot y_2 s=y1y2
    • s s s的值为-1或1,具体由 y 1 , y 2 y_1, y_2 y1,y2共同决定。

为了解决这个子问题,首要问题便是每次如何选取 α 1 , α 2 \alpha_1, \alpha_2 α1,α2
实际上,选取的两个乘子 α 1 , α 2 \alpha_1, \alpha_2 α1,α2中,一个乘子是违反KKT条件最严重的,另外一个乘子由另外一个约束条件选取。

首先选取第一个乘子,即违反KKT条件最严重的乘子。
根据KKT条件,可以得出目标函数中 α i \alpha_i αi取值的含义:
KaTeX parse error: No such environment: align* at position 31: …{matrix} \begin{̲a̲l̲i̲g̲n̲*̲}̲ & \alpha_i = 0…
注:上式(3.5.9)中的 α i \alpha_i αi还是拉格朗日乘子。

对于上式(3.5.9)的解释如下:

  • 第一种情况,表明 α i \alpha_i αi是正常分类,在间隔边界内部(前面第一章中我们讲过正确分类的点有 y i ⋅ f ( x i ) ≥ 0 y_i \cdot f(x_i) \geq 0 yif(xi)0);
  • 第二种情况,表明 α i \alpha_i αi是支持向量,在间隔边界之上;
  • 第三种情况,表明 α i \alpha_i αi在两条间隔边界之间;

而我们求的最优解需要满足KKT条件,也就是说上述三个条件全都要满足。
反过来看,以下几种情况出现时,KKT条件将不能满足:

  • y i u i ≤ 1 ( 原 本 等 价 于 α i = C ) y_i u_i \leq 1(原本等价于\alpha_i = C) yiui1(αi=C),然而实际上 α i &lt; C \alpha_i &lt; C αi<C
  • y i u i ≥ 1 ( 原 本 等 价 于 α i = 0 ) y_i u_i \geq 1(原本等价于\alpha_i = 0) yiui1(αi=0),然而实际上 α i &gt; 0 \alpha_i &gt; 0 αi>0
  • y i u i = 1 ( 原 本 等 价 于 0 &lt; α i &lt; C ) y_i u_i = 1(原本等价于0 &lt; \alpha_i &lt; C) yiui=1(0<αi<C),然而实际上 α i = 0 \alpha_i = 0 αi=0 α i = C \alpha_i = C αi=C

上述三种情况,都不满足KKT条件。对于这些不满足KKT条件的 α i \alpha_i αi,那么就需要对其进行更新。这可以理解成式(3.5.7)的第一个约束条件。

另外更新的同时还需要第二个约束条件,即$ \sum_{i=1}^n \alpha_i y_i = 0 $的限制。

根据$ \sum_{i=1}^n \alpha_i y_i = 0 的 限 制 , 如 果 假 设 选 择 两 个 乘 子 的限制,如果假设选择两个乘子 \alpha_1, \alpha_2 , 并 设 它 们 更 新 之 前 分 别 是 ,并设它们更新之前分别是 \alpha_1^{old}, \alpha_2{old}$,更新之后分别是$\alpha_1{new}, \alpha_2^{new}$,那么更新前后的值需要满足以下等式,才能保证前面和为0的约束条件:
α 1 n e w y 1 + α 2 n e w y 2 = α 1 o l d y 1 + α 2 o l d y 2 = ξ ( 3.5.10 ) \alpha_1^{new} y_1 + \alpha_2^{new} y_2 = \alpha_1^{old} y_1 + \alpha_2^{old} y_2 = \xi \qquad (3.5.10) α1newy1+α2newy2=α1oldy1+α2oldy2=ξ(3.5.10)
上式(3.5.10)中, ξ \xi ξ是常数。

上面两个因子不容易同时求解,所以我们可以先求第二个乘子 α 2 \alpha_2 α2的解( α 2 n e w \alpha_2^{new} α2new),得到 α 2 n e w \alpha_2^{new} α2new之后,然后再用 α 2 n e w \alpha_2^{new} α2new表示 α 1 \alpha_1 α1的解( α 1 n e w \alpha_1^{new} α1new)。为了求解 α 2 n e w \alpha_2^{new} α2new,首先需要确定 α 2 n e w \alpha_2^{new} α2new的取值范围。
假设 α 2 n e w \alpha_2^{new} α2new的上下边界分别为 H , L H, L H,L,那么就有:
L ≤ α 2 n e w ≤ H ( 3.5.11 ) L \leq \alpha_2^{new} \leq H \qquad (3.5.11) Lα2newH(3.5.11)
接下来,我们就可以综合 0 ≤ α i ≤ C 0 \leq \alpha_i \leq C 0αiC, $\alpha_1^{new} y_1 + \alpha_2^{new} y_2 = \alpha_1^{old} y_1 + \alpha_2^{old} y_2 = \xi 这 两 个 约 束 条 件 求 取 这两个约束条件求取 \alpha_2^{new}$的取值范围。

y 1 ≠ y 2 y_1 \neq y_2 y1̸=y2 y 1 , y 2 y_1, y_2 y1,y2异号时,根据$\alpha_1^{new} y_1 + \alpha_2^{new} y_2 = \alpha_1^{old} y_1 + \alpha_2^{old} y_2 = \xi , 可 以 得 到 ,可以得到 \alpha_1^{old} - \alpha_2^{old} = \xi$,所以有:
L = m a x ( 0 , − ξ ) , H = m i n ( C , C − ξ ) ( 3.5.12 ) L = max(0, -\xi), H = min(C, C - \xi) \qquad (3.5.12) L=max(0,ξ),H=min(C,Cξ)(3.5.12)
如下图3.2所示:

图3.2 $y_1 \neq y_2$的上下边界

y 1 = y 2 y_1 = y_2 y1=y2 y 1 , y 2 y_1, y_2 y1,y2同号时,同样根据$\alpha_1^{new} y_1 + \alpha_2^{new} y_2 = \alpha_1^{old} y_1 + \alpha_2^{old} y_2 = \xi , 可 以 得 到 ,可以得到 \alpha_1^{old} + \alpha_2^{old} = \xi$,所以有:
L = m a x ( 0 , ξ − C ) , H = m i n ( C , ξ ) ( 3.5.13 ) L = max(0, \xi - C), H = min(C, \xi) \qquad (3.5.13) L=max(0,ξC),H=min(C,ξ)(3.5.13)
如下图3.3所示:

图3.3 $y_1 = y_2$的上下边界

如此总结,根据 y 1 , y 2 y_1, y_2 y1,y2异号或同号,可以得到 α 2 n e w \alpha_2^{new} α2new的上下界分别为:
KaTeX parse error: No such environment: align* at position 31: …{matrix} \begin{̲a̲l̲i̲g̲n̲*̲}̲ & L = max(0, \…

回顾前面第二个约束条件$ \alpha_1^{new} y_1 + \alpha_2^{new} y_2 = \alpha_1^{old} y_1 + \alpha_2^{old} y_2 = \xi , 令 等 式 两 边 同 时 乘 以 ,令等式两边同时乘以 y_1$,可得到:
α 1 + s α 2 = α 1 ∗ + s α 2 ∗ = w ( 3.5.15 ) \alpha_1 + s \alpha_2 = \alpha_1^* + s \alpha_2^* = w \qquad (3.5.15) α1+sα2=α1+sα2=w(3.5.15)
上式(3.5.15)的参数说明如下:

  • w = − y 1 ∑ i = 3 n y i α i ∗ w = - y_1 \sum_{i = 3}^n y_i \alpha_i ^* w=y1i=3nyiαi
  • s = y 1 ⋅ y 2 s = y_1 \cdot y_2 s=y1y2
    • s s s的值为-1或1,具体由 y 1 , y 2 y_1, y_2 y1,y2共同决定。

所以通过上式,我们可以用 α 2 \alpha_2 α2表示 α 1 \alpha_1 α1:$\alpha_1 = w - s \cdot \alpha_2 $
从而把子问题的目标函数转换为只含 α 2 \alpha_2 α2的问题:
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ & \Psi = \frac…
上式(3.5.16)对 α 2 \alpha_2 α2求导,得到:
d Ψ d α 2 = − s K 11 ( w − s α 2 ) + K 22 α 2 − K 12 α 2 + s K 12 ( w − s α 2 ) − y 1 v 1 + s + y 2 v 2 − 1 = 0 \frac{d \Psi}{d \alpha_2} = - s \mathcal{K}_{11} (w - s \alpha_2) + \mathcal{K}_{22} \alpha_2 - \mathcal{K}_{12} \alpha_2 + s \mathcal{K} _ {12} (w - s \alpha_2) - y_1 v_1 + s + y_2 v_2 - 1 = 0 dα2dΨ=sK11(wsα2)+K22α2K12α2+sK12(wsα2)y1v1+s+y2v21=0
化简上式得到:
α 2 ( K 11 + K 22 − 2 K 12 ) = s ( K 11 − K 12 ) w + y 2 ( v 1 − v 2 ) + 1 − s ( 3.5.17 ) \alpha_2(\mathcal{K}_{11} + \mathcal{K}_{22} - 2 \mathcal{K}_{12}) = s (\mathcal{K}_{11} - \mathcal{K}_{12}) w + y_2 ( v_1 - v_2) + 1 - s \qquad (3.5.17) α2(K11+K222K12)=s(K11K12)w+y2(v1v2)+1s(3.5.17)
然后,将:
KaTeX parse error: No such environment: align* at position 31: …{matrix} \begin{̲a̲l̲i̲g̲n̲*̲}̲ & s = y_1 \cdo…
代入上式(3.5.17),可得到:
α 2 n e w , u n c ( K 11 + K 22 − 2 K 12 ) = α 2 o l d ( K 11 + K 22 − 2 K 12 ) + y 2 ( u 1 − u 2 + y 2 − y 1 ) ( 3.5.18 ) \alpha_2^{new, unc} (\mathcal{K}_{11} + \mathcal{K}_{22} - 2 \mathcal{K}_{12}) = \alpha_2^{old} (\mathcal{K}_{11} + \mathcal{K}_{22} - 2 \mathcal{K}_{12}) + y_2 ( u_1 - u_2 + y_2 - y_1) \qquad (3.5.18) α2new,unc(K11+K222K12)=α2old(K11+K222K12)+y2(u1u2+y2y1)(3.5.18)
注:其中 α 2 n e w , u n c \alpha_2^{new, unc} α2new,unc的unc是指unclipped,意思是未剪辑,后面会有解释。

E i = u i − y i E_i = u_i - y_i Ei=uiyi,表示预测值与真实值之差,再令 η = K ( x 1 → , x 1 → ) + K ( x 2 → , x 2 → ) − 2 K ( x 1 → , x 2 → ) \eta = \mathcal{K}(\overrightarrow{x_1}, \overrightarrow{x_1}) + \mathcal{K}(\overrightarrow{x_2}, \overrightarrow{x_2}) - 2 \mathcal{K}(\overrightarrow{x_1}, \overrightarrow{x_2}) η=K(x1 ,x1 )+K(x2 ,x2 )2K(x1 ,x2 ),然后在上式(3.5.18)两端同时除以 η \eta η,得到一个关于单变量 α 2 \alpha_2 α2的解:
α 2 n e w , u n c = α 2 o l d + y 2 ( E 1 − E 2 ) η ( 3.5.19 ) \alpha_2^{new, unc} = \alpha_2^{old} + \frac{y_2 (E_1 - E_2)}{\eta} \qquad (3.5.19) α2new,unc=α2old+ηy2(E1E2)(3.5.19)
关于 α 2 \alpha_2 α2的这个解,其实没有考虑到其约束条件 0 ≤ α 2 ≤ C 0 \leq \alpha_2 \leq C 0α2C,即此时的解是未经剪辑的解。此时考虑约束条件 0 ≤ α 2 ≤ C 0 \leq \alpha_2 \leq C 0α2C,可得到经过剪辑后的 α 2 n e w \alpha_2^{new} α2new的解析解为:
KaTeX parse error: No such environment: align* at position 47: …{matrix} \begin{̲a̲l̲i̲g̲n̲*̲}̲ & H, \qquad \a…
求出 α 2 n e w \alpha_2^{new} α2new后,便可以根据$ \alpha_1^{new} y_1 + \alpha_2^{new} y_2 = \alpha_1^{old} y_1 + \alpha_2^{old} y_2 求 出 求出 \alpha_1 , 即 ,即 \alpha_1^{new} = \alpha_1^{old} + y_1 y_2 (\alpha_2^{old} - \alpha_2^{new})$。

说到这里,那么具体应该如何选择乘子 α 1 , α 2 \alpha_1, \alpha_2 α1,α2呢?总结如下:

  • 第一个乘子 α 1 \alpha_1 α1,可以通过刚刚说的那三种不满足KKT条件来找;
  • 第二个乘子 α 2 \alpha_2 α2,可以寻找满足条件 m a x ∣ E i − E j ∣ max \vert E_i - E_j \vert maxEiEj的乘子。

b b b在满足下述条件时更新:
KaTeX parse error: No such environment: align* at position 34: …{matrix} \begin{̲a̲l̲i̲g̲n̲*̲}̲ & b_1, \qquad …
更新的 b b b值为:
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ & b_1^{new} = …
且每次更新完两个乘子的优化后,都需要再重新计算 b b b,以及对应的 E i E_i Ei值。
最后更新所有的 α i , y , b \alpha_i, y, b αi,y,b,这样模型就出来了。从而我们就得到最开始提出的分类函数式(2.1.17):
f ( x ) = ∑ i = 1 n α i y i ⟨ x i → , x → ⟩ + b f(x) = \sum_{i=1}^n \alpha_i y_i \langle \overrightarrow{x_i}, \overrightarrow{x} \rangle + b f(x)=i=1nαiyixi ,x +b

(2) SMO算法的步骤

综上,总结SMO的主要步骤:

  1. 选取一对 α i , α j \alpha_i, \alpha_j αi,αj,选取方法使用启发式方法;
  2. 固定除 α i , α j \alpha_i, \alpha_j αi,αj之外的其他参数,确定W极值条件下的 α i \alpha_i αi α i \alpha_i αi α j \alpha_j αj表示。

假设某一次迭代中,需要更新 x 1 , x 2 x_1, x_2 x1,x2对应的拉格朗日乘子 α 1 , α 2 \alpha_1, \alpha_2 α1,α2,那么这个小规模的二次规划问题写为:
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ & L_s = \max_\…

那么每次迭代中,应该如何更新乘子?具体步骤如下:

  1. 计算上下界 H , L H, L H,L
    • $ L = max(0, \alpha_2^{old} - \alpha_1^{old}), H = min(C, C + \alpha_2^{old} - \alpha_1^{old}) , \quad y_1 \neq y_2 $
    • $ L = max(0, \alpha_2^{old} + \alpha_1^{old} - C), H = min(C, \alpha_2^{old} + \alpha_1^{old}) , \quad y_1 = y_2 $
  2. 计算 L s L_s Ls的二阶导数
    • $ \eta = 2 \phi (x_1)^T \phi(x_2) - \phi(x_1)^T \phi(x_1) - \phi(x_2)^T \phi(x_2) $
  3. 更新 L s L_s Ls
    • $ \alpha_2^{new} = \alpha_2^{old} - \frac{y_2(e_1 - e_2)}{\eta} $
    • $ e_i = g^{old}(x_i) - y_i $
  4. 计算变量 α 2 \alpha_2 α2
    • 如式(3.5.20)
  5. 更新 α 1 \alpha_1 α1
    • α 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 \alpha_1 α1,可以通过刚刚说的那三种不满足KKT条件来找;
  • 第二个乘子 α 2 \alpha_2 α2,可以寻找满足条件 m a x ∣ E i − E j ∣ max \vert E_i - E_j \vert maxEiEj的乘子。

最后,每次更新完两个乘子的优化后,都需要再重新计算 b b b,及对应的 E i E_i Ei值。

四、后记

终于把SVM的理论用Markdown写了下来,敲了28000+个字,还要在July大神的内容基础上加入自己的简介,简直费心费力…… 但是总算是把SVM的理论第二遍的顺了下来。
July大神说,SVM的理论至少要看好几遍,才能对整套理论有一个系统的理解。现在虽然笔者第二遍顺了下来,其实离实际运用还有很远,还有待提升。
本文把July大神的文章重头编辑了一遍,一方面加深了笔者自己的理论理解,另一方面,有些地方可能July大神也没有讲的很清楚,笔者对其进行了一定的进一步讲解,也希望自己的见解可以和读者们分享(如果真有人读到这里的话),并对读者们起到一定的作用。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值