这章内容主要是对支持向量机中拉格朗日函数、对偶问题和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∗,α∗,β∗)
事实上,在绝大多数情况下,原始问题和对偶问题的最优值相等,这里的相关证明不详细叙述,有兴趣的可以阅读《最优化理论与算法》这本书。
我们已经得出了在支持向量机中下面的式子恒成立:
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世纪初成为最热门的机器学习算法之一。