理解支持向量机拉格朗日函数+对偶问题+KKT条件
这章内容主要是对支持向量机中拉格朗日函数、对偶问题和KKT条件进行一个说明,虽然我们成功推导出支持向量机的对偶形式,也知道如何进行求解最优参数,但是具体为什么这样做,我们还是不得而知。为此,我觉得需要更加深入了解一下什么是KKT条件、为什么要构造拉格朗日函数,以及对偶问题又是什么?
在深入了解之前,先分清楚对偶问题、拉格朗日函数、KKT条件,这三个概念其实都不一样,只是在支持向量机中将他们三个都使用了。
首先来看拉格朗日函数,拉格朗日函数其实是由于引进了拉格朗日乘子而构造出来的。我们如果想搞清楚支持向量机的推导,就必须逐一了解其中的概念,从最开始的原始问题出发:
min w , b 1 2 ∥ w ∥ 2 s . t . y i ( w ⋅ x i + b ) − 1 ≥ 0 , i = 1 , 2 , ⋯ , N \min\limits_{w,b}{\frac{1}{2}\left\|{w}\right\|^2}\\ s.t.\,\,\,\,\,y_i(w\cdot x_i+b)-1\ge0,\,\,\,\,\,i=1,2,\cdots,N w,bmin21∥w∥2s.t.yi(w⋅xi+b)−1≥0,i=1,2,⋯,N
在原始问题中,我们需要求解的是最优的参数 w w w和 b b b,而原始问题是一个二次规问题,且存在不等式约束条件。针对这样一个优化问题,我们肯定就想找到最好最快的方法来求解此类问题,于是就用到了拉格朗日乘数法。
拉格朗日乘数法
假设有如下的约束最优化问题:
min
x
∈
R
n
f
(
x
)
s
.
t
.
c
i
(
x
)
≤
0
,
i
=
1
,
2
,
⋯
,
k
h
j
(
x
)
=
0
,
j
=
1
,
2
,
⋯
,
l
\min\limits_{x\in R^n}\,\,\,\,\,f(x)\\ s.t.\,\,\,\,\,c_i(x)\le0,\,\,\,\,\,i=1,2,\cdots,k\\ h_j(x)=0,\,\,\,\,j=1,2,\cdots,l
x∈Rnminf(x)s.t.ci(x)≤0,i=1,2,⋯,khj(x)=0,j=1,2,⋯,l
称此约束问题为最优化问题的原始最优化问题,或者也叫原始问题,我们需要引进拉格朗日乘子用来构建拉格朗日函数:
L
(
x
,
α
,
β
)
=
f
(
x
)
+
∑
i
=
1
k
α
i
c
i
(
x
)
+
∑
j
=
1
l
β
j
h
j
(
x
)
L(x,\alpha,\beta)=f(x)+ \sum\limits_{i=1}^k{\alpha_ic_i(x)}+\sum\limits_{j=1}^l{\beta_jh_j(x)}
L(x,α,β)=f(x)+i=1∑kαici(x)+j=1∑lβjhj(x)
这就是广义拉格朗日函数,其中
α
i
,
β
j
\alpha_i,\beta_j
αi,βj是拉格朗日乘子,且
α
i
≥
0
\alpha_i\ge0
αi≥0,至于为什么要这样定义,我们的目的就是把有约束问题转换为无约束问题。而上述定义的拉格朗日函数还不能表示原始问题,我们需要对上述的拉格朗日函数求极大值,这里应该是很多人最难以理解的地方,为什么一定要对拉格朗日函数求极大值呢?
首先设原始问题为
ϕ
p
(
x
)
\phi_p(x)
ϕp(x),那么就有下面的等式成立:
ϕ
p
(
x
)
=
max
α
,
β
:
α
i
≥
0
L
(
x
,
α
,
β
)
\phi_p(x)=\max\limits_{\alpha,\beta:\alpha_i\ge0} \,\,\,\,\,L(x,\alpha,\beta)
ϕp(x)=α,β:αi≥0maxL(x,α,β)
下面再来看在
∑
i
=
1
k
α
i
c
i
(
x
)
\sum\limits_{i=1}^k{\alpha_ic_i(x)}
i=1∑kαici(x)部分中,我们的
α
i
\alpha_i
αi是乘子,而
c
i
(
x
)
≤
0
c_i(x)\le0
ci(x)≤0是约束条件,假设,存在一个解
x
i
x_i
xi是不满足
c
i
(
x
)
≤
0
c_i(x)\le0
ci(x)≤0的,这个时候就会出现
c
i
(
x
)
>
0
c_i(x)>0
ci(x)>0的情况,而我们的原始问题是对拉格朗日函数求极大值,此时的极大值就变成了
+
∞
+\infty
+∞ ,也就是说当有解是不满足约束条件时,我们的原始问题就不成立了,所以该解就不能要。
同样的对
∑
j
=
1
l
β
j
h
j
(
x
)
\sum\limits_{j=1}^l{\beta_jh_j(x)}
j=1∑lβjhj(x)也是一样,当存在一个解不满足
h
i
(
x
)
=
0
h_i(x)=0
hi(x)=0这个约束条件,那么我们的求极大的结果就仍然是
+
∞
+\infty
+∞,所以对拉格朗日函数求极大值,其实就是为了保证我们的约束条件是成立的,因为我们要求的是极大值,所以所有
c
i
(
x
)
<
0
c_i(x)<0
ci(x)<0的
i
i
i都会成为我们极大的障碍,所以这些
i
i
i的
α
i
\alpha_i
αi都是等于0的。其次
h
j
(
x
)
h_j(x)
hj(x)也是如此。这样就可以保证我们找到的解肯定是满足约束条件的解,即必定满足下面的式子:
ϕ
P
(
x
)
=
{
f
(
x
)
x
满
足
原
始
约
束
条
件
+
∞
其
他
{\phi _P}(x)=\left\{ \begin{array}{l} f(x)\,\,\,\,\,\,\,x满足原始约束条件\\ +\infty\,\,\,\,\,\,\,其他 \end{array} \right.
ϕP(x)={f(x)x满足原始约束条件+∞其他
到这里已经明白了为什么对拉格朗日函数求极大就等于原始问题了。
在原始的最优化问题中,我们是求极小值,所以我们要对拉格朗日函数先求极大值再求极小值,就出现了下面的式子:
min
x
ϕ
P
(
x
)
=
min
x
max
α
,
β
:
α
i
≥
0
L
(
x
,
α
,
β
)
\min\limits_{x}\phi_P(x)=\min\limits_{x}\max\limits_{\alpha,\beta:\alpha_i\ge0}L(x,\alpha,\beta)
xminϕP(x)=xminα,β:αi≥0maxL(x,α,β)
它是与原始最优化问题是等价的,即求解上述函数的解就是原始问题的解,所以后面求解只需要针对拉格朗日函数来求解。
如果在支持向量机(指线性可分支持向量机)中,与此时对应的部分应该是:
min
w
,
b
max
α
L
(
w
,
b
,
α
)
\min\limits_{w,b}\max\limits_{\alpha}L(w,b,\alpha)
w,bminαmaxL(w,b,α)
对偶问题
在将原始问题转换为对拉格朗日函数
L
L
L的先求极大再求极小问题,此时我们只需要关心如何求解这个极小极大问题即可。
此时就需要再引入一个新方法,叫对偶方法,下面来看:
优化问题延续上面定义的拉格朗日函数,接着定义:
ϕ
D
(
α
,
β
)
=
min
x
L
(
x
,
α
,
β
)
\phi_D(\alpha,\beta)=\min\limits_{x}L(x,\alpha,\beta)
ϕD(α,β)=xminL(x,α,β)
接着再考虑极大化
ϕ
D
(
α
,
β
)
\phi_D(\alpha,\beta)
ϕD(α,β),即得到:
max
α
,
β
:
α
i
≥
0
ϕ
D
(
α
,
β
)
=
max
α
,
β
:
α
i
≥
0
min
x
L
(
x
,
α
,
β
)
\max\limits_{\alpha,\beta:\alpha_i\ge0}\phi_D(\alpha,\beta)=\max\limits_{\alpha,\beta:\alpha_i\ge0}\min\limits_{x}L(x,\alpha,\beta)
α,β:αi≥0maxϕD(α,β)=α,β:αi≥0maxxminL(x,α,β)
我们把上述问题称为拉格朗日函数的极大极小问题。在上面我们给出了一个极小极大问题,这里又定义了一个极大极小问题,很明显,我们后续要证明的内容就是极大极小问题等于极小极大问题。
假设设极小极大问题和极大极小问题的最优值分别为:
p
∗
p^*
p∗和
d
∗
d^*
d∗。则有:
d
∗
=
max
α
,
β
:
α
i
≥
0
min
x
L
(
x
,
α
,
β
)
p
∗
=
min
x
max
α
,
β
:
α
i
≥
0
L
(
x
,
α
,
β
)
d^*=\max\limits_{\alpha,\beta:\alpha_i\ge0}\min\limits_{x}L(x,\alpha,\beta)\\ p^*=\min\limits_{x}\max\limits_{\alpha,\beta:\alpha_i\ge0}L(x,\alpha,\beta)
d∗=α,β:αi≥0maxxminL(x,α,β)p∗=xminα,β:αi≥0maxL(x,α,β)
因为拉格朗日函数的形式是一样的,所以如果我们先对拉格朗日函数求极大再求极小,求解的解肯定要比先对其求极小再求极大要大,即下面的式子恒成立:
d
∗
=
max
α
,
β
:
α
i
≥
0
min
x
L
(
x
,
α
,
β
)
≤
min
x
max
α
,
β
:
α
i
≥
0
L
(
x
,
α
,
β
)
=
p
∗
d^*=\max\limits_{\alpha,\beta:\alpha_i\ge0}\min\limits_{x}L(x,\alpha,\beta)\le \min\limits_{x}\max\limits_{\alpha,\beta:\alpha_i\ge0}L(x,\alpha,\beta)=p^*
d∗=α,β:αi≥0maxxminL(x,α,β)≤xminα,β:αi≥0maxL(x,α,β)=p∗
我们需要找到上述式子等式成立的情况,因为只有这种情况才是我们需要的。
下面给出定理:
对于对偶问题和原始问题,假设 f ( x ) f(x) f(x)和 c i ( x ) c_i(x) ci(x)是凸函数, h j ( x ) h_j(x) hj(x)是仿射函数,并且不等式约束 c i ( x ) c_i(x) ci(x)是严格执行的;即存在 x x x,对有所的 i i i都有 c i ( x ) < 0 c_i(x)<0 ci(x)<0,则存在 x ∗ , α ∗ , β ∗ x^*,\alpha^*,\beta^* x∗,α∗,β∗,使得 x ∗ x^* x∗是原始问题的最优解, α ∗ , β ∗ \alpha^*,\beta^* α∗,β∗是对偶问题的最优解,并且:
d ∗ = p ∗ = L ( x ∗ , α ∗ , β ∗ ) d^*=p^*=L(x^*,\alpha^*,\beta^*) d∗=p∗=L(x∗,α∗,β∗)
事实上,在绝大多数情况下,原始问题和对偶问题的最优值相等,这里的相关证明不详细叙述,有兴趣的可以阅读《最优化理论与算法》这本书。
KKT条件
我们已经得出了在支持向量机中下面的式子恒成立:
max
α
min
w
,
b
L
(
w
,
b
,
α
)
=
min
w
,
b
max
α
L
(
w
,
b
,
α
)
\max\limits_{\alpha}\min\limits_{w,b}L(w,b,\alpha)=\min\limits_{w,b}\max\limits_{\alpha}L(w,b,\alpha)
αmaxw,bminL(w,b,α)=w,bminαmaxL(w,b,α)
从最开始的原始问题到先求拉格朗日函数对
α
\alpha
α的极大问题再到拉格朗日函数对
w
,
b
w,b
w,b的极小问题,变换到这一步,我们终于能开心的进行求解了,计算最小值,而且是无不等式和等式约束的最小值,那么直接简单求偏导令其等于0即可,求完偏导之后得到的
w
w
w和
b
b
b的表达式是成立的,带入拉格朗日函数中得到最后支持向量机的对偶形式,此时的对偶形式表达式中应该只包含
α
\alpha
α。再后续就是对对偶形式进行求解,此时要用到SMO算法,假设求解得到的最优解为
α
∗
=
(
α
1
∗
,
α
2
∗
,
⋯
,
α
l
∗
)
\alpha^*=(\alpha^*_1,\alpha_2^*,\cdots,\alpha_l^*)
α∗=(α1∗,α2∗,⋯,αl∗)是对偶最优化问题的解,如果存在下标
α
j
∗
>
0
\alpha_j^*>0
αj∗>0这时就可以使用下面的式子求得最原始的最优化问题。在这里我们可能会有一个疑问,为什么对偶问题的解就可以认为是原始问题的最优解呢?这就需要用到KKT条件了。
有定理:
假设有原始问题 min x ∈ R n f ( x ) s . t . c i ( x ) ≤ 0 , i = 1 , 2 , ⋯ , k h j ( x ) = 0 , j = 1 , 2 , ⋯ , l \min\limits_{x\in R^n}\,\,\,\,\,f(x)\\ s.t.\,\,\,\,\,c_i(x)\le0,\,\,\,\,\,i=1,2,\cdots,k\\ h_j(x)=0,\,\,\,\,j=1,2,\cdots,l x∈Rnminf(x)s.t.ci(x)≤0,i=1,2,⋯,khj(x)=0,j=1,2,⋯,l 引进拉格朗日乘数和对偶变换后变成如下的对偶问题:
max α , β : α i ≥ 0 min x L ( x , α , β ) s . t . α i ≥ 0 , i = 1 , 2 , ⋯ , k \max\limits_{\alpha,\beta:\alpha_i\ge0}\min\limits_{x}L(x,\alpha,\beta)\\ s.t.\,\,\,\,\,\alpha_i\ge0,\,\,\,\,i=1,2,\cdots,k α,β:αi≥0maxxminL(x,α,β)s.t.αi≥0,i=1,2,⋯,k
假设对偶问题和原始问题如上所述,其中 f ( x ) f(x) f(x)和 c i ( x ) c_i(x) ci(x)是凸函数, h j ( x ) h_j(x) hj(x)是仿射函数,并且不等式约束 c i ( x ) c_i(x) ci(x)是严格执行的,则 x ∗ x^* x∗和 α ∗ , β ∗ \alpha^*,\beta^* α∗,β∗分别是原始问题和对偶问题解的充分必要条件是 x ∗ , α ∗ , β ∗ x^*,\alpha^*,\beta^* x∗,α∗,β∗满足下面的KKT条件:
∇ x L ( x ∗ , α ∗ , β ∗ ) = 0 α i ∗ c i ( x ∗ ) = 0 , i = 1 , 2 , ⋯ , k c i ( x ∗ ) ≤ 0 , i = 1 , 2 , ⋯ , k α i ∗ ≥ 0 , i = 1 , 2 , ⋯ , k h j ( x ∗ ) = 0 , i = 1 , 2 , ⋯ , l \nabla_xL(x^*,\alpha^*,\beta^*)=0\\ \alpha_i^*c_i(x^*)=0,\,\,\,\,\,\,i=1,2,\cdots,k\\ c_i(x^*)\le0,\,\,\,\,\,\,i=1,2,\cdots,k\\ \alpha_i^*\ge0,\,\,\,\,\,\,i=1,2,\cdots,k\\ h_j(x^*)=0,\,\,\,\,\,\,i=1,2,\cdots,l ∇xL(x∗,α∗,β∗)=0αi∗ci(x∗)=0,i=1,2,⋯,kci(x∗)≤0,i=1,2,⋯,kαi∗≥0,i=1,2,⋯,khj(x∗)=0,i=1,2,⋯,l
这就是KKT条件的内容,根据定理,KKT条件在支持向量机中是显然成立的。于是在支持向量机中对偶问题为:
min
α
1
2
∑
i
=
1
N
∑
j
=
1
N
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
−
∑
i
=
1
N
α
i
s
.
t
.
∑
i
=
1
N
α
i
y
i
=
0
α
i
≥
0
i
=
1
,
2
,
⋯
,
N
\min\limits_{\alpha}\,\,\,\,\,\frac{1}{2}\sum\limits_{i=1}^N\sum\limits_{j=1}^N{\alpha_i\alpha_jy_iy_j(x_i\cdot x_j)}-\sum\limits_{i=1}^N{\alpha_i}\\ s.t.\,\,\,\,\sum\limits_{i=1}^N{\alpha_iy_i=0}\\ \alpha_i\ge0\,\,\,\,i=1,2,\cdots,N
αmin21i=1∑Nj=1∑Nαiαjyiyj(xi⋅xj)−i=1∑Nαis.t.i=1∑Nαiyi=0αi≥0i=1,2,⋯,N
套用KKT条件得到:
支持向量机的KKT条件
∇ w L ( w ∗ , b ∗ , α ∗ ) = w ∗ − ∑ i = 1 N α i ∗ y i x i = 0 ∇ b L ( w ∗ , b ∗ , α ∗ ) = − ∑ i = 1 N α i ∗ y i = 0 α i ∗ ( y i ( w ∗ ⋅ x i + b ∗ ) − 1 ) = 0 , i = 1 , 2 ⋯ , N y i ( w ∗ ⋅ x i + b ∗ ) − 1 ≥ 0 , i = 1 , 2 ⋯ , N α i ∗ ≥ 0 , i = 1 , 2 ⋯ , N \nabla_wL(w^*,b^*,\alpha^*)=w^*-\sum\limits_{i=1}^N{\alpha_i^*y_ix_i=0}\\ \nabla_bL(w^*,b^*,\alpha^*)=-\sum_{i=1}^N{\alpha_i^*y_i=0}\\ \alpha_i^*(y_i(w^*\cdot x_i+b^*)-1)=0,\,\,\,\,\,\,i=1,2\cdots,N\\ y_i(w^*\cdot x_i+b^*)-1\ge 0,\,\,\,\,\,\,i=1,2\cdots,N\\ \alpha_i^*\ge0,\,\,\,\,\,\,i=1,2\cdots,N ∇wL(w∗,b∗,α∗)=w∗−i=1∑Nαi∗yixi=0∇bL(w∗,b∗,α∗)=−i=1∑Nαi∗yi=0αi∗(yi(w∗⋅xi+b∗)−1)=0,i=1,2⋯,Nyi(w∗⋅xi+b∗)−1≥0,i=1,2⋯,Nαi∗≥0,i=1,2⋯,N
于是可以解出
w
∗
w^*
w∗的值:
w
∗
=
∑
i
=
1
N
α
i
∗
y
i
x
i
w^*=\sum\limits_{i=1}^N{\alpha_i^*y_ix_i}
w∗=i=1∑Nαi∗yixi
并且此时
α
\alpha
α中必定会有至少一个
α
j
>
0
\alpha_j>0
αj>0,因为如果没有
α
j
\alpha_j
αj是大于0的,那么所有的
α
j
\alpha_j
αj都是等于0,导致
w
∗
=
0
w^*=0
w∗=0,此时
w
∗
w^*
w∗无解,产生矛盾,因此必定有
α
j
>
0
\alpha_j>0
αj>0成立。接着我们就可以利用这个
j
j
j来求解
b
b
b的值了,我们将
w
∗
w^*
w∗的解带入下面的表达式中:
y
i
(
w
∗
⋅
x
j
+
b
∗
)
−
1
=
0
y_i(w^*\cdot x_j+b^*)-1=0
yi(w∗⋅xj+b∗)−1=0
再次化简得到:
b
∗
=
y
j
−
∑
i
=
1
N
α
i
∗
y
i
(
x
i
⋅
x
j
)
b^*=y_j-\sum\limits_{i=1}^N\alpha_i^*y_i(x_i\cdot x_j)
b∗=yj−i=1∑Nαi∗yi(xi⋅xj)
这样支持向量机中的
w
w
w和
b
b
b就全部求解出来,并且原始问题和对偶问题也就弄清楚了。
总结
到这里接触支持向量机已经是第二次了,第一次的时候只能大概看明白支持向量机的工作原理,对其背后的数学思想是非常模糊的,在这次重新学习的过程中,我深入了解到一些支持向量机背后的数学思想,所有的结果背后都有着非常严谨的证明推理,正是这样才让支持向量机在20世纪初成为最热门的机器学习算法之一。