拉格朗日乘子法
在学习对偶算法之前,首先我们需要了解一点数学知识——拉格朗日乘子法。它和高数中的拉格朗日乘数法很类似,都用于最优化的求解。不同的点是乘数法用于限制条件为等式的情况,而乘子法用于限制条件为不等式的情况。下面我们介绍一下两种方法,侧重点放在乘子法上面。
1、拉格朗日乘数法——等式约束
下面简单介绍下拉格朗日乘数法。
设给定二元函数z=ƒ(x,y)和附加条件φ(x,y)=0,为寻找z=ƒ(x,y)在附加条件下的极值点。
1. 先做拉格朗日函数F(x,y,λ)=f(x,y)+λφ(x,y) ,其中λ为参数。
2. 令F(x,y,λ)对x和y和λ的一阶偏导数等于零,得到
F
x
′
=
ƒ
x
′
(
x
,
y
)
+
λ
φ
x
′
(
x
,
y
)
=
0
F'_x=ƒ'_x(x,y)+λφ'_x(x,y)=0
Fx′=ƒx′(x,y)+λφx′(x,y)=0
F
y
′
=
ƒ
y
′
(
x
,
y
)
+
λ
φ
y
′
(
x
,
y
)
=
0
F'_y=ƒ'_y(x,y)+λφ'_y(x,y)=0
Fy′=ƒy′(x,y)+λφy′(x,y)=0
F
λ
′
=
φ
(
x
,
y
)
=
0
F'_λ=φ(x,y)=0
Fλ′=φ(x,y)=0
3. 由上述方程组解出x,y及λ,如此求得的(x,y),就是函数z=ƒ(x,y)在附加条件φ(x,y)=0下的可能极值点。若这样的点只有一个,由实际问题可直接确定此即所求的点。
2、拉格朗日乘子法——不等式约束
目标函数f(x),不等式约束g(x),有的教程会添加上等式约束条件h(x)=0。
此时最优化问题描述如下:
m
i
n
f
(
x
)
s
.
t
.
g
i
(
x
)
⩽
0
;
h
i
(
x
)
=
0
(2.1)
\tag{2.1}min\ \ f(x) \\ s.t. \ \ \ g_i(x)\leqslant0 \ ; \ h_i(x)=0
min f(x)s.t. gi(x)⩽0 ; hi(x)=0(2.1)
定义不等式约束下的拉格朗日函数L:
L
(
x
,
λ
,
μ
)
=
f
(
x
)
+
∑
1
p
λ
i
g
i
(
x
)
+
∑
1
q
μ
j
h
j
(
x
)
(2.2)
L(x,λ,μ)=f(x)+\sum\limits_{1}\limits^{p}λ_ig_i(x)+\sum\limits_{1}\limits^{q}μ_jh_j(x) \tag{2.2}
L(x,λ,μ)=f(x)+1∑pλigi(x)+1∑qμjhj(x)(2.2)
其中λ和μ叫做乘子,也是分别是g(x)和h(x)的约束系数。
学习的对偶算法
为了求解线性可分支持向量机的最优化问题,将它作为原始的最优化问题,应用拉格朗日对偶性,通过求解对偶问题(dual problem)得到原始问题的最优解,这就是线性可分支持向量机的对偶算法(dual algorithm)。
网页链接:拉格朗日对偶性
首先,我们来回顾一下原始的最优化问题,即原始问题:
min
w
,
b
1
2
∣
∣
w
∣
∣
2
s
.
t
.
y
i
(
w
T
x
i
+
b
)
⩾
1
,
i
=
1
,
2
,
…
…
,
m
(2.3)
\min\limits_{w,b} \frac{1}{2}||w||^2 \\s.t. \ \ \ y_i(w^Tx_i+b) \geqslant 1,i=1,2,……,m \tag{2.3}
w,bmin21∣∣w∣∣2s.t. yi(wTxi+b)⩾1,i=1,2,……,m(2.3)
根据上面的拉格朗日乘子法介绍来看,我们需要的约束函数是
g
(
x
)
⩽
0
g(x)\leqslant0
g(x)⩽0,因此我们将原始问题的约束条件改为
s
.
t
.
1
−
y
i
(
w
T
x
i
+
b
)
⩽
0
s.t. \ \ \ 1-y_i(w^Tx_i+b)\leqslant0
s.t. 1−yi(wTxi+b)⩽0。然后,对上式中的约束添加拉格朗日乘子
α
i
⩾
0
α_i\geqslant0
αi⩾0我们可以得到不等式约束条件下的拉格朗日函数L:
L
(
w
,
b
,
α
)
=
1
2
∣
∣
w
∣
∣
2
+
∑
i
=
1
m
α
i
[
1
−
y
i
(
w
T
x
i
+
b
)
]
(2.4)
L(w,b,α) = \frac{1}{2}||w||^2 + \sum\limits_{i=1}^{m}α_i[1-y_i(w^Tx_i+b)] \tag{2.4}
L(w,b,α)=21∣∣w∣∣2+i=1∑mαi[1−yi(wTxi+b)](2.4)
因为
α
i
⩾
0
α_i\geqslant0
αi⩾0,且
1
−
y
i
(
w
T
x
i
+
b
)
⩽
0
1-y_i(w^Tx_i+b)\leqslant0
1−yi(wTxi+b)⩽0。显然有:
max
α
L
(
w
,
b
,
α
)
=
1
2
∣
∣
w
∣
∣
2
(2.5)
\max\limits_{α} \ \ L(w,b,α) = \frac{1}{2}||w||^2 \tag{2.5}
αmax L(w,b,α)=21∣∣w∣∣2(2.5)
因此原始问题
min
w
,
b
1
2
∣
∣
w
∣
∣
2
\min\limits_{w,b}\frac{1}{2}||w||^2
w,bmin21∣∣w∣∣2可以写成:
min
w
,
b
max
α
L
(
w
,
b
,
α
)
=
=
>
max
α
min
w
,
b
L
(
w
,
b
,
α
)
(2.6)
\min\limits_{w,b} \ \max\limits_{α} \ L(w,b,α) ==> \max\limits_{α} \min\limits_{w,b} \ L(w,b,α) \tag{2.6}
w,bmin αmax L(w,b,α)==>αmaxw,bmin L(w,b,α)(2.6)此时我们就得到了原始问题的对偶问题
max
α
min
w
,
b
L
(
w
,
b
,
α
)
\max\limits_{α} \min\limits_{w,b} \ L(w,b,α)
αmaxw,bmin L(w,b,α)。
对偶问题的求解
首先,我们先看内层的最优化问题,即
min
w
,
b
L
(
w
,
b
,
α
)
\min\limits_{w,b} \ L(w,b,α)
w,bmin L(w,b,α)。
用L(w,b,α)分别对w,b进行求导,令=0,得到下面两个式子:
w
=
∑
i
=
1
m
α
i
y
i
x
i
w = \sum\limits_{i=1}^{m}α_iy_ix_i
w=i=1∑mαiyixi
0
=
∑
i
=
1
m
α
i
y
i
0 = \sum\limits_{i=1}^{m}α_iy_i
0=i=1∑mαiyi
将上面两个公式带入
max
α
min
w
,
b
L
(
w
,
b
,
α
)
\max\limits_{α} \min\limits_{w,b} \ L(w,b,α)
αmaxw,bmin L(w,b,α)中,可以消去w和b(具体过程省略,可自行推导,较简单),得到下面的公式:
max
α
∑
i
=
1
m
α
i
−
1
2
∑
i
=
1
m
∑
j
=
1
m
α
i
α
j
y
i
y
j
x
i
T
x
j
s
.
t
.
∑
i
=
1
m
α
i
y
i
=
0
;
i
⩾
0
,
i
=
1
,
2
,
…
,
m
(2.7)
\max\limits_{α}\ \ \sum\limits_ {i=1}^{m}α_i - \frac{1}{2}\sum\limits_{i=1}^{m}\sum\limits_{j=1}^{m}α_iα_jy_iy_jx_i^Tx_j \tag{2.7} s.t. \ \ \ \sum\limits_{i=1}^{m}α_iy_i = 0;\ \ \ _i\geqslant 0,i = 1,2,…,m
αmax i=1∑mαi−21i=1∑mj=1∑mαiαjyiyjxiTxjs.t. i=1∑mαiyi=0; i⩾0,i=1,2,…,m(2.7)
通过上面的式子可以解出α,然后求出w和b,然后就能得到最终的模型
f
(
x
)
=
w
T
x
i
+
b
f(x) = w^Tx_i + b
f(x)=wTxi+b。
具体的求解方法SMO看下一小节。
SMO
SMO(Sequential Minimal Optimization),顺序最小优化算法。其基本思想是先固定
α
i
α_i
αi之外的所有参数,然后求
α
i
α_i
αi上的极值。因为存在
∑
i
=
1
m
α
i
y
i
=
0
\sum\limits_{i=1}^{m}α_iy_i = 0
i=1∑mαiyi=0的限制,所以固定
α
i
α_i
αi之外的其他变量,则
α
i
α_i
αi可以由其他变量表示。
具体过程:
SMO每次选择两个变量 α i α_i αi和 α j α_j αj,并固定其他的参数。这样在参数初始化后,SMO不断执行以下的两个步骤直至收敛:
- 选取一对需更新的变量 α i α_i αi和 α j α_j αj
- 固定 α i α_i αi和 α j α_j αj之外的参数,求解 max α ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j x i T x j \max\limits_{α}\ \ \sum\limits_ {i=1}^{m}α_i - \frac{1}{2}\sum\limits_{i=1}^{m}\sum\limits_{j=1}^{m}α_iα_jy_iy_jx_i^Tx_j αmax i=1∑mαi−21i=1∑mj=1∑mαiαjyiyjxiTxj获取更新后的 α i α_i αi和 α j α_j αj
SMO算法之所以很高效,恰恰在于在固定其他参数后,仅优化剩下两个参数的过程能非常高效。因为
α
i
α_i
αi和
α
j
α_j
αj之间的约束可重写为:
α
i
y
i
+
α
j
y
j
=
c
,
α
i
⩾
0
,
α
j
⩾
0
(2.8)
α_iy_i + α_jy_j = c,α_i\geqslant0 ,α_j\geqslant0 \tag{2.8}
αiyi+αjyj=c,αi⩾0,αj⩾0(2.8)
将
α
i
y
i
+
α
j
y
j
=
c
α_iy_i + α_jy_j = c
αiyi+αjyj=c进行变形,变为
α
j
=
c
−
α
i
y
i
y
j
(2.9)
α_j = \frac{c-α_iy_i}{y_j} \tag{2.9}
αj=yjc−αiyi(2.9)
将(2.9)带入到(2.7),可以消去式中的 α j α_j αj。然后(2.7)就变成了有关单变量 α i α_i αi的二次规划问题,很简单就可以求解出 α i α_i αi的最优解。随后用同样的方法求解出 α j α_j αj。
那么参数b怎么确定呢?我们注意到任意的支持向量
(
x
s
,
y
s
)
(x_s,y_s)
(xs,ys)都有
y
s
⋅
f
(
x
s
)
=
1
y_s·f(x_s)=1
ys⋅f(xs)=1即:
y
s
(
∑
i
∈
s
α
i
y
i
x
i
T
x
s
+
b
)
=
1
(2.10)
y_s(\sum\limits_{i∈s}α_iy_ix_i^Tx_s+b)=1 \tag{2.10}
ys(i∈s∑αiyixiTxs+b)=1(2.10)
即可获取参数b。虽然任何的支持向量都可以(2.10)获取b,但是现实中通常采用一种更鲁棒的做法,使用所有支持向量求解的平均值:
b
=
1
∣
s
∣
∑
s
∈
S
(
1
y
s
−
∑
i
∈
S
α
i
y
i
x
i
T
x
s
)
b = \frac{1}{|s|}\sum\limits_{s∈S} (\frac{1}{y_s}-\sum\limits_{i∈S}α_iy_ix_i^Tx_s)
b=∣s∣1s∈S∑(ys1−i∈S∑αiyixiTxs)
最后w和b都求解出来后,结束。机器学习,学习的就是w和b这两个参数。