SVM(支持向量机)是一种强大的机器学习算法,被广泛用于分类和回归问题。本系列将简要介绍SVM的推导过程和基本应用。考虑到SVM涉及到繁杂的数学推导,第一篇先介绍下前置的数学知识。
一、感知机
感知机是SVM的基础,也蕴含了早期神经网络NN的思想。
感知机是一种用于求解二分类的判别式线性模型,其假设输入数据
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
(
x
i
,
y
i
)
.
.
.
(
x
N
,
y
N
)
}
\{(x_1,y_1),(x_2,y_2),...(x_i,y_i)...(x_N,y_N)\}
{(x1,y1),(x2,y2),...(xi,yi)...(xN,yN)}为正、负
{
−
1
,
1
}
\{-1, 1\}
{−1,1}两类,通过判断
f
(
w
,
b
)
=
s
i
g
n
(
w
x
i
+
b
)
f(w,b)=sign(wx_i+b)
f(w,b)=sign(wxi+b)给出判别类型。
如何定义这种模型的损失函数呢?一种显而易见的方案是判别错误的样本数量
∑
f
(
x
i
;
w
,
b
)
≠
y
i
1
\sum\limits_{f(x_i;w,b)\neq y_i}1
f(xi;w,b)=yi∑1,但其求解属于NP-hard问题。所以,一种替代方案方式是错误样本到分割直线的距离之和最短,即损失函数取:
−
∑
i
∈
M
1
∣
∣
w
∣
∣
(
y
i
(
w
x
i
+
b
)
)
-\sum\limits_{i\in M}\frac{1}{||w||}(y_i(wx_i+b))
−i∈M∑∣∣w∣∣1(yi(wxi+b))
其中
M
M
M为判断错误的点集合。对于某个分割面而言,
w
w
w和
b
b
b同时放大和缩小若干倍,平面并不变化,也不影响距离计算结果。为方便计算,默认
∣
∣
w
∣
∣
=
1
||w||=1
∣∣w∣∣=1(实际迭代过程中,并不需要归一化,并不影响最终结果),即最终选取的损失函数为:
−
∑
i
∈
M
y
i
(
w
x
i
+
b
)
-\sum\limits_{i\in M}y_i(wx_i+b)
−i∈M∑yi(wxi+b)
在迭代过程中,采用随机梯度下降策略,即迭代公式为:
w
←
w
+
μ
x
i
y
i
b
←
b
+
μ
y
i
\begin{aligned}& w\leftarrow w+\mu x_iy_i\\& b\leftarrow b+\mu y_i\end{aligned}
w←w+μxiyib←b+μyi
整个感知机的迭代过程可概括为:
- 选取初始 w 0 w_0 w0, b 0 b_0 b0
- 选择某个训练点 ( x i , y i ) (x_i,y_i) (xi,yi)
- 判断是否为当前模型误分点,即 y i ( w x i + b ) < 0 y_i(wx_i+b)<0 yi(wxi+b)<0。如果是,则不断更新模型参数,直至该点不被误分: w ← w + μ x i y i b ← b + μ y i \begin{aligned}& w\leftarrow w+\mu x_iy_i\\& b\leftarrow b+\mu y_i\end{aligned} w←w+μxiyib←b+μyi
- 转到步骤2,直至整个训练集中无误分点,或达到预设的迭代终止条件。
注意到在上述整个迭代公式中,
w
w
w和
b
b
b的更新分别为对各错误点
x
i
y
i
x_iy_i
xiyi和
y
i
y_i
yi的迭加。因此,
w
w
w和
b
b
b可表示为:
w
=
∑
i
α
i
x
i
y
i
b
=
∑
i
α
i
y
i
\begin{aligned}&w=\sum_i\alpha_ix_iy_i\\&b=\sum_i\alpha_iy_i\end{aligned}
w=i∑αixiyib=i∑αiyi
其中
α
i
=
n
i
μ
\alpha_i=n_i\mu
αi=niμ,即为各点总共被误分次数与学习率
μ
\mu
μ的积。
这也就是对偶形式算法的基本思想。其迭代过程可整理为:
- 选取初始 α = [ α 1 , . . . α i , . . . , α N ] \boldsymbol \alpha=[\alpha_1,...\alpha_i,...,\alpha_N] α=[α1,...αi,...,αN]
- 选择某个训练点 ( x i , y i ) (x_i,y_i) (xi,yi)
- 判断是否为当前模型误分点,即 y i ( ∑ j α j y j ( x j ∗ x i ) + ∑ j α j y j ) < 0 y_i(\sum\limits_j\alpha_jy_j(x_j*x_i)+\sum\limits_j\alpha_jy_j)<0 yi(j∑αjyj(xj∗xi)+j∑αjyj)<0。如果是,则不断更新模型参数,直至该点不被误分: α i ← α i + μ \alpha_i\leftarrow \alpha_i+\mu αi←αi+μ
- 转到步骤2,直至整个训练集中无误分点,或达到预设的迭代终止条件。
相较于原始算法,对偶形式算法可以通过保存内积矩阵
[
x
i
,
x
j
]
[x_i,x_j]
[xi,xj](即Gram矩阵)以进行更迭,特别适用于样本特征数高的情况。
也就是说:当数据特征过高时,可通过对偶形式保存样本内积,加速迭代;而当数据量过高时,可直接使用原始形式进行迭代。
二、拉格朗日对偶性
考虑带约束的最优化问题:
min
x
f
(
x
)
s
.
t
.
c
i
(
x
)
<
=
0
,
i
=
1
,
2...
,
k
h
j
(
x
)
=
0
,
j
=
1
,
2...
,
l
\begin{aligned} &\min\limits_xf(x) \\ s.t. \space\space &c_i(x)<=0,i=1,2...,k\\&h_j(x)=0,j=1,2...,l\end{aligned}
s.t. xminf(x)ci(x)<=0,i=1,2...,khj(x)=0,j=1,2...,l
其中
f
(
x
)
,
c
(
x
)
,
h
(
x
)
f(x),c(x),h(x)
f(x),c(x),h(x)均为连续可微函数。
对应的广义拉格朗日函数为:
L
(
x
,
α
,
β
)
=
f
(
x
)
+
∑
i
=
1
k
α
i
c
i
(
x
)
+
∑
i
=
1
k
β
i
h
i
(
x
)
L(x,\alpha,\beta)=f(x)+\sum\limits_{i=1}^k\alpha_ic_i(x)+\sum\limits_{i=1}^k\beta_ih_i(x)
L(x,α,β)=f(x)+i=1∑kαici(x)+i=1∑kβihi(x)
其中
α
i
\alpha_i
αi,
β
i
\beta_i
βi为拉格朗日算子,且
α
i
≥
0
\alpha_i\ge0
αi≥0
2.1 广义拉格朗日的极大极小问题
广义拉格朗日的极大极小问题可写成:
min
x
max
α
≥
0
,
β
L
(
x
,
α
,
β
)
\min\limits_x\max\limits_{\alpha\ge0,\beta}L(x,\alpha, \beta)
xminα≥0,βmaxL(x,α,β)
首先观察内部的极大问题:
θ
p
(
x
)
=
max
α
≥
0
,
β
L
(
x
,
α
,
β
)
\theta_p(x)=\max\limits_{\alpha\ge0,\beta}L(x,\alpha, \beta)
θp(x)=α≥0,βmaxL(x,α,β)
注意到若
c
(
x
)
c(x)
c(x)或
h
(
x
)
h(x)
h(x)不严格满足最优化条件中的约束条件,则存在
α
i
→
+
∞
\alpha_i\rightarrow +\infin
αi→+∞或
β
i
h
i
(
x
)
→
+
∞
\beta_ih_i(x)\rightarrow +\infin
βihi(x)→+∞,使得
θ
p
(
x
)
=
+
∞
\theta_p(x)=+\infin
θp(x)=+∞。若
c
(
x
)
c(x)
c(x)或
h
(
x
)
h(x)
h(x)严格满足最优化条件中的约束条件,则
θ
p
(
x
)
=
f
(
x
)
\theta_p(x)=f(x)
θp(x)=f(x)。所以,
min
θ
p
(
x
)
\min\theta_p(x)
minθp(x)和原最优化目标等效。
也就是说,广义拉格朗日的极大极小问题等效于原始最优化问题。
原问题的最优解可写成
p
∗
=
min
θ
p
(
x
)
p^*=\min\theta_p(x)
p∗=minθp(x)。
2.2 广义拉格朗日的极小极大问题
广义拉格朗日的极小极大问题可写成:
max
α
≥
0
,
β
min
x
L
(
x
,
α
,
β
)
\max\limits_{\alpha\ge0,\beta}\min\limits_xL(x,\alpha, \beta)
α≥0,βmaxxminL(x,α,β)
首先观察内部的极小问题:
θ
D
(
α
,
β
)
=
min
x
L
(
x
,
α
,
β
)
\theta_D(\alpha, \beta)=\min\limits_{x}L(x,\alpha, \beta)
θD(α,β)=xminL(x,α,β)
此时
α
,
β
\alpha,\beta
α,β为超参数,仅
x
x
x为变量,便于求解。在求出对应的
x
x
x后再求解最佳的
α
\alpha
α和
β
\beta
β,从而简化原始问题。
广义拉格朗日的极小极大问题亦称为原始问题的对偶问题。对偶问题的解可写作:
d
∗
=
max
α
≥
0
,
β
θ
D
(
α
,
β
)
d^*=\max\limits_{\alpha\ge0,\beta}\theta_D(\alpha, \beta)
d∗=α≥0,βmaxθD(α,β)
2.3 原始问题和对偶问题的关系
θ
D
(
α
,
β
)
=
min
x
L
(
x
,
α
,
β
)
≤
L
(
x
,
α
,
β
)
≤
θ
p
(
x
)
≤
max
α
≥
0
,
β
L
(
x
,
α
,
β
)
=
θ
p
(
x
)
\theta_D(\alpha, \beta)=\min\limits_{x}L(x,\alpha, \beta)\le L(x,\alpha,\beta)\le\theta_p(x)\le\max\limits_{\alpha\ge0,\beta}L(x,\alpha, \beta)=\theta_p(x)
θD(α,β)=xminL(x,α,β)≤L(x,α,β)≤θp(x)≤α≥0,βmaxL(x,α,β)=θp(x)
可知:
d
∗
≤
p
∗
d^*\le p^*
d∗≤p∗,即对偶问题的解不大于原始问题的解
2.4 Slater条件和KKT条件
通过增强条件,可使得
d
∗
=
p
∗
d^*= p^*
d∗=p∗,即存在
x
∗
,
α
∗
,
β
∗
x^*,\alpha^*,\beta^*
x∗,α∗,β∗同时为原始问题和对偶问题的解,也称强对偶。这些条件包括:
1)目标函数
f
(
x
)
f(x)
f(x)为凸函数
2) 约束条件
h
j
(
x
)
h_j(x)
hj(x)和
c
(
x
)
c(x)
c(x)所构成的可行域为凸集
3)
c
(
x
)
c(x)
c(x)是严格可行的,即存在
x
x
x,对于所有的
i
i
i,有
c
i
(
x
)
<
0
c_i(x)<0
ci(x)<0
这也称为Slater条件。Slater条件是强对偶的充分非必要条件,常用来判断强对偶的满足与否,从而将原始问题转化为对偶问题。
那又如何求满足强对偶的解呢?这就是KKT条件要求解的问题。
若满足强对偶条件,则原问题和对偶问题的共同解,可通过如下KKT条件求解:
∇
x
L
(
x
∗
,
α
∗
,
β
∗
)
=
0
α
i
∗
c
i
(
x
)
=
0
α
i
∗
≥
0
c
i
(
x
)
≤
0
h
j
(
x
)
=
0
\begin{aligned} &\nabla_xL(x^*,\alpha^*,\beta^*)=0\\& \alpha^*_ic_i(x)=0\\&\alpha^*_i\ge0\\&c_i(x)\le0\\&h_j(x)=0\end{aligned}
∇xL(x∗,α∗,β∗)=0αi∗ci(x)=0αi∗≥0ci(x)≤0hj(x)=0对比原始问题和KKT条件,不满发现唯一的变化在于多了如下条件:
α
i
∗
c
i
(
x
)
=
0
\alpha_i^*c_i(x)=0
αi∗ci(x)=0即
α
i
∗
\alpha_i^*
αi∗和
c
i
(
x
)
c_i(x)
ci(x)中至少有一个为0。
2.5 利用拉格朗日对偶性的一般步骤
通过拉格朗日对偶性求解最优化问题采用了一种变量分离的策略,即通过分别求解不同的自变量求得最终的优化问题。
总结下利用拉格朗日对偶性简化问题的一般步骤:
1)定义原始问题的最优化目标和约束条件,并明确是否满足凸函数的基本定义,判断是否为强对偶问题;
2)将原始问题转对偶问题;
3)利用KKT条件,求解对偶问题;
4)满足上述各条件的解,即为原始条件的解。