18[NLP训练营]拉格朗日乘子法、对偶、KTT


公式输入请参考: 在线Latex公式

前言

一般情况下,最优化问题分为三类
一、 无约束条件下的最优化问题
这种最优化问题比较简单,直接求导为0就可以得到。
二、 等式约束下的最优化问题
即除了目标函数之外,还有一些约束条件。假设目标函数为 f ( x ) f(x) ,约束条件为 g i ( x ) g_i(x) ,这里的有 R R 个约束条件
{ M i n i m i z e f ( x ) s . t .   g i ( x ) = 0   i = 1 , 2 , . . . , R \begin{cases} & Minimizef(x)\\ &s.t.\space g_i(x)=0 \space i=1,2,...,R\\ \end{cases}
求这样的最优化问题有两种方法:
一种是使用消元法来解,但是这种方法有的时候很难求解,甚至无解。
另一种方法便是使用拉格朗日乘子法,其求解步骤分为三步:
构造拉格朗日函数
求解变量的偏导方程
代入目标函数
说人话就是像下图一样:把等式约束通过拉格朗日去掉,转换到目标函数中,使其变成第一种优化问题。
在这里插入图片描述
三、 既有等式约束,又有不等式约束的情况
{ M i n i m i z e f ( x ) s . t .   h i ( x ) = 0 ,   i = 1 , 2 , . . . , k c j ( x ) 0 ,   j = 1 , 2 , . . . , l \begin{cases} & Minimizef(x)\\ &s.t.\space h_i(x)=0 ,\space i=1,2,...,k\\ &c_j(x)\leq0,\space j=1,2,...,l\\ \end{cases}
这个要用KTT的方式来解。
下面结合SVM来看。

Lagrangian:Equality Constraint

例子

根据上图来一个例子:
{ M i n i m i z e   ( x 1 2 + x 2 2 ) s . t .   x 2 x 1 = 1 \begin{cases} & Minimize\space (x_1^2+x_2^2)\\ &s.t.\space x_2-x_1=-1\\ \end{cases}
根据拉格朗日,变成:
L ( λ , x ) = ( x 1 2 + x 2 2 ) + λ ( x 2 x 1 + 1 ) L(\lambda,x)= (x_1^2+x_2^2)+\lambda(x_2-x_1+1)
求最小值可以求偏导并等于0即可。
{ L x 1 = 2 x 1 λ = 0 L x 2 = 2 x 2 λ = 0 L λ = x 2 x 1 + 1 = 0 \begin{cases} & \cfrac{\partial L}{\partial{x_1}}=2x_1-\lambda=0\\ &\cfrac{\partial L}{\partial{x_2}}=2x_2-\lambda=0\\ &\cfrac{\partial L}{\partial{\lambda}}=x_2-x_1+1=0\\ \end{cases}
解上面的方程组就可以得到最优解。
现在来看看,为什么可以把等式约束加上一个系数 λ \lambda 后,并入目标函数?
从几何上面看:
在这里插入图片描述
最优解 x x^* 有什么特点?就是这点上目标函数的梯度和直线的梯度是平行的。
x f ( x ) x g ( x ) \triangledown_xf(x)\parallel \triangledown_xg(x)
两个向量平行,如果要变成相等就是要乘上一个系数:
x f ( x ) = ± λ x g ( x ) x f ( x ) λ x g ( x ) = 0 x ( f ( x ) λ g ( x ) ) = 0 x ( f ( x ) + λ g ( x ) ) = 0 \triangledown_xf(x)=\pm \lambda\triangledown_xg(x)\\ \triangledown_xf(x)\mp \lambda\triangledown_xg(x)=0\\ \triangledown_x(f(x)\mp\lambda g(x))=0\to \triangledown_x(f(x)+\lambda g(x))=0
这个实际上就是转换后的目标函数对x的偏导:
f ( x ) + λ g ( x ) x = 0 \cfrac{\partial{f(x)+\lambda g(x)}}{\partial{x}}=0
另外目标函数对 λ \lambda 的偏导:
f ( x ) + λ g ( x ) λ = g ( x ) = 0 \cfrac{\partial{f(x)+\lambda g(x)}}{\partial{\lambda}}=g(x)=0
这个和约束一样。因此从几何上推导出来变形后的目标函数和原来带约束的目标函数是等价的。

Multiple Equalities

在简介里面中的带等式优化的问题中,等式约束条件是有多个的。因此我们把上面只带一个等式约束的情况进行已给泛化:
{ M i n i m i z e   f ( x ) s . t .   g i ( x ) = 0   i = 1 , 2 , . . . , R \begin{cases} & Minimize\space f(x)\\ &s.t.\space g_i(x)=0 \space i=1,2,...,R\\ \end{cases}
经过拉格朗日处理后:
M i n i m i z e   f ( x ) + i = 1 R λ i g i ( x ) Minimize\space f(x)+\sum_{i=1}^R\lambda_ig_i(x)
然后就是分别求偏导后等于0:

{ L x 1 = 0 L x 2 = 0 L λ = 0 \begin{cases} & \cfrac{\partial L}{\partial{x_1}}=0\\ &\cfrac{\partial L}{\partial{x_2}}=0\\ &\quad\vdots\\ &\cfrac{\partial L}{\partial{\lambda}}=0\\ \end{cases}
下面来看不等式约束的优化:

Lagrangian:Inequality Constraint

{ M i n i m i z e   f ( x ) s . t .   h ( x ) 0 \begin{cases} & Minimize \space f(x)\\ &s.t.\space h(x)\leq0 \\ \end{cases}
这里只有小于等于0的情况,因为即使是大于等于0的不等式也可以两边 同时除以-1,不等号反向来转换为小于等于0的情况。
然后看如何把约束条件转入目标函数?下面分两种情况讨论:
1、没有加限制条件的目标函数的最优解刚好也满足约束条件。
第一步:求出没有加限制条件的目标函数的最优解 x x^*
第二步:验证 x x^* 满足约束条件。
这个时候:
λ = 0 , h ( x ) 0 \lambda=0,h(x)\leq0
2、没有加限制条件的目标函数的最优解不满足约束条件。
在这里插入图片描述
可以看到,最优解应该是绿色的 x x^{*'} ,刚好在 h ( x ) = 0 h(x)=0 上,且 λ > 0 \lambda>0 。因此如果 λ = 0 \lambda=0 就变成第一种情况了。
现在把两种情况进行合并:
{ λ = 0 , h ( x ) 0 λ > 0 , h ( x ) = 0   λ h ( x ) = 0 \begin{cases} & \lambda=0,h(x)\leq0\\ &\lambda>0,h(x)=0\ \end{cases}\to \lambda h(x)=0
最后把不等式约束加入目标函数结果:
{ M i n i m i z e   f ( x ) + λ h ( x ) s . t . λ h ( x ) = 0 , h ( x ) 0 \begin{cases} & Minimize\space f(x)+\lambda h(x)\\ &s.t.\quad \lambda h(x)=0,h(x)\leq0\\ \end{cases}

KTT conditions

现在根据上面的结论,来看看如果优化问题中既含有等式约束又含有不等式约束应该如何解决:
{ M i n i m i z e   f ( x ) s . t .   g i ( x ) = 0 ,   i = 1 , 2 , . . . , R h j ( x ) 0 ,   j = 1 , 2 , . . . , R \begin{cases} & Minimize\space f(x)\\ &s.t.\space g_i(x)=0 ,\space i=1,2,...,R\\ &h_j(x)\leq0,\space j=1,2,...,R'\\ \end{cases}
将条件加入目标函数后变成:
{ M i n i m i z e   f ( x ) + i = 1 R λ i g i ( x ) + j = 1 R μ j h j ( x ) s . t .   i , j ,   λ i , μ j 0 j , μ j h j ( x ) = 0 j , h j ( x ) 0 \begin{cases} & Minimize\space f(x)+\sum_{i=1}^R\lambda_ig_i(x)+\sum_{j=1}^{R'}\mu_jh_j(x)\\ &s.t. \space \forall i,j,\space \lambda_i,\mu_j\ge0\\ &\quad\quad\forall j,\mu_jh_j(x)=0\\ &\quad\quad\forall j,h_j(x)\leq0\\ \end{cases}
上面的三个约束称为 KKT条件。

KKT Condition of SVM

先回顾SVM的硬间隔表达:
{ M i n i m i z e 1 2 w 2 s . t .     ( w T x i + b ) y i 1 0 , i = 1 , 2 , . . , n \begin{cases} & Minimize \cfrac{1}{2}||w||^2 \\ &s.t. \space \space \space (w^T\cdot x_i+b)y_i-1\geq 0, i=1,2,..,n\\ \end{cases}
这里注意,约束条件先可以不等号变向转换为小于等于0的情况
经过拉格朗日套路:
{ M i n i m i z e 1 2 w 2 + i = 1 n λ i [ 1 y i ( w T x i + b ) ] s . t .   i ,   λ i 0 i , λ i [ 1 y i ( w T x i + b ) ] = 0 1 y i ( w T x i + b ) 0 \begin{cases} & Minimize \cfrac{1}{2}||w||^2 +\sum_{i=1}^n\lambda_i[1-y_i(w^T\cdot x_i+b)]\\ &s.t. \space \forall i,\space \lambda_i\ge0\\ &\quad\quad\forall i,\lambda_i[1-y_i(w^T\cdot x_i+b)]=0\\ &\quad\quad1-y_i(w^T\cdot x_i+b)\leq0\\ \end{cases}
以上就是SVM版本的KKT条件。

Primal-Dual Problem

1、Primal问题有可能很难解决。
2、在Dual问题上可能会发现一些有趣的insight。
我们希望Primal的结果等于Dual问题的结果,但是Primal问题一般是全局解(optimal),Dual问题一般是子目标解(sub-optimal)。
我们把全局解(optimal)和子目标解(sub-optimal)的差距叫gap,理想上gap是0。

Dual Derivation of SVM

先把SVM的目标函数搬下来:
{ L = 1 2 w 2 + i = 1 n λ i [ 1 y i ( w T x i + b ) ] s . t .   i ,   λ i 0 i , λ i [ 1 y i ( w T x i + b ) ] = 0 1 y i ( w T x i + b ) 0 \begin{cases} & L= \cfrac{1}{2}||w||^2 +\sum_{i=1}^n\lambda_i[1-y_i(w^T\cdot x_i+b)]\\ &s.t. \space \forall i,\space \lambda_i\ge0\\ &\quad\quad\forall i,\lambda_i[1-y_i(w^T\cdot x_i+b)]=0\\ &\quad\quad1-y_i(w^T\cdot x_i+b)\leq0\\ \end{cases}
分别对参数进行求偏导:
L w = 0 w + i = 1 n λ i ( y i x i ) w = i = 1 n λ i x i y i \cfrac{\partial L}{\partial{w}}=0\to w+\sum_{i=1}^n\lambda_i(-y_ix_i)\to w=\sum_{i=1}^n\lambda_ix_iy_i
L w = 0 i = 1 n λ i ( y i ) = 0 i = 1 n λ i y i = 0 \cfrac{\partial L}{\partial{w}}=0\to \sum_{i=1}^n\lambda_i(-y_i)=0\to \sum_{i=1}^n\lambda_iy_i=0
代入目标函数,先看第一项:
1 2 w 2 = 1 2 w T w = 1 2 ( i = 1 n λ i x i y i ) T ( j = 1 n λ j x j y j ) = 1 2 i = 1 n j = 1 n λ i λ j x i T x j y i y j \cfrac{1}{2}||w||^2 =\cfrac{1}{2}w^Tw=\cfrac{1}{2}(\sum_{i=1}^n\lambda_ix_iy_i)^T(\sum_{j=1}^n\lambda_jx_jy_j)\\ =\cfrac{1}{2}\sum_{i=1}^n\sum_{j=1}^n\lambda_i\lambda_jx_i^T\cdot x_jy_iy_j
再看第二项:
i = 1 n λ i [ 1 y i ( w T x i + b ) ] = i = 1 n λ i i = 1 n λ i y i ( w T x i + b ) = i = 1 n λ i i = 1 n λ i y i w T x i i = 1 n λ i y i b \sum_{i=1}^n\lambda_i[1-y_i(w^T\cdot x_i+b)]=\sum_{i=1}^n\lambda_i-\sum_{i=1}^n\lambda_iy_i(w^T\cdot x_i+b)\\ =\sum_{i=1}^n\lambda_i-\sum_{i=1}^n\lambda_iy_iw^Tx_i-\sum_{i=1}^n\lambda_iy_ib
其中: i = 1 n λ i y i = 0 \sum_{i=1}^n\lambda_iy_i=0 ,并把w代入,所以上式变为:
i = 1 n λ i i = 1 n λ i y i ( i = 1 n λ i x i y i ) T x i = i = 1 n λ i i = 1 n j = 1 n λ i λ j x i T x j y i y j \sum_{i=1}^n\lambda_i-\sum_{i=1}^n\lambda_iy_i(\sum_{i=1}^n\lambda_ix_iy_i)^T\cdot x_i\\ =\sum_{i=1}^n\lambda_i-\sum_{i=1}^n\sum_{j=1}^n\lambda_i\lambda_jx_i^T\cdot x_jy_iy_j
第一项加第二项得到对偶空间上的目标函数:
L = i = 1 n λ i 1 2 i = 1 n j = 1 n λ i λ j x i T x j y i y j L=\sum_{i=1}^n\lambda_i-\cfrac{1}{2}\sum_{i=1}^n\sum_{j=1}^n\lambda_i\lambda_jx_i^T\cdot x_jy_iy_j
具体写出来:

{ M i n i m i z e   1 2 i = 1 n j = 1 n λ i λ j x i T x j y i y j + i = 1 n λ i s . t .   i ,   λ i 0 i , i = 1 n λ i y i = 0 , w = i = 1 n λ i x i y i i , λ i [ 1 y i ( w T x i + b ) ] = 0 \begin{cases} & Minimize\space -\cfrac{1}{2}\sum_{i=1}^n\sum_{j=1}^n\lambda_i\lambda_jx_i^T\cdot x_jy_iy_j+\sum_{i=1}^n\lambda_i\\ &s.t. \space \forall i,\space \lambda_i\ge0\\ &\quad\quad\forall i,\sum_{i=1}^n\lambda_iy_i=0,w=\sum_{i=1}^n\lambda_ix_iy_i\\ &\quad\quad\forall i,\lambda_i[1-y_i(w^T\cdot x_i+b)]=0\\ \end{cases}
可以看到,这里只有 λ \lambda 一个未知参数。这里最重要的一个地方就是 x i T x j x_i^T\cdot x_j ,核函数也和这个东西有关。
下面大概讲讲核函数咋回事,没有具体的推导,估计后面再补充。

Kernel Trick

核函数为什么work?

这里先贴出之前将低维特征向量映射到高维特征向量会有什么问题:
在这里插入图片描述
就是时间复杂度变大了。
下面来看一个小例子,假设我们有两个二维的特征向量:
x = { x 1 , x 2 } , z = { z 1 , z 2 } x=\{x_1,x_2\},z=\{z_1,z_2\}
可以看到,如果要计算:
x T z = ( x 1 z 1 + x 2 z 2 ) x^T\cdot z=(x_1z_1+x_2z_2)
接下来我们通过函数 ϕ \phi 来进行高维映射,变成:
ϕ ( x ) = { x 1 2 , x 2 2 , 2 x 1 x 2 } , ϕ ( z ) = { z 1 2 , z 2 2 , 2 z 1 z 2 } \phi(x)=\{x_1^2,x_2^2,\sqrt2x_1x_2\},\phi(z)=\{z_1^2,z_2^2,\sqrt2z_1z_2\}
高维映射后做同样的操作:
ϕ ( x ) T ϕ ( z ) = x 1 2 z 1 2 + x 2 2 z 2 2 + 2 x 1 x 2 z 1 z 2 = ( x 1 z 1 + x 2 z 2 ) 2 = ( x T z ) 2 \phi(x)^T\phi(z)=x_1^2z_1^2+x_2^2z_2^2+2x_1x_2z_1z_2=(x_1z_1+x_2z_2)^2=(x^T\cdot z)^2
由上面的推导操作我们可以看到,虽然维度变成更高维的了,但是某些特定的操作时间复杂度居然没有增加(不是随便哪个操作都不增加),所以,如何选择映射的方式就是核函数了。
刚好这个例子,就是针对上面的操作 x i T x j x_i^T\cdot x_j 的。

Kernel Trick

SVM的 x i T x j x_i^T\cdot x_j 就变成要设计一个 ϕ \phi 高维函数,使得这个 ϕ ( x i ) T ϕ ( x j ) \phi(x_i)^T\cdot \phi(x_j) 内积计算的时间复杂度等同于 x i T x j x_i^T\cdot x_j ,这个 ϕ \phi 就是SVM的Kernel trick。
注意:Kernel trick不仅仅针对SVM,其他的一些算法也可以用,如:K-means。
核函数是有分类的:
我们现在用到的是Linear Kernel,对应的是Linearn SVM。
k ( x , y ) = x T y k(x,y)=x^T\cdot y
还有其他的核函数,多项式核函数,Polygonal Kernel
k ( x , y ) = ( 1 + x T y ) d k(x,y)=(1+x^T\cdot y)^d
Gaussian Kernel:
k ( x , y ) = e x p ( x y 2 2 σ 2 ) k(x,y)=exp(\cfrac{-||x-y||^2}{2\sigma^2})
关于如何设计核函数可以百度:mercer’s theorem。

发布了172 篇原创文章 · 获赞 40 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/oldmao_2001/article/details/104697037