一:拉格朗日乘子法和KKT条件
拉格朗日乘子法 | KKT条件 | |
用途: | 解决优化(最小化)问题的常用方法 | 解决优化(最小化)问题的常用方法 |
使用场景: | 条件极值:等式约束场景 | 条件极值:不等式约束情景(可看作是拉格朗日乘子法的泛化) |
核心思想: | ||
至于为什么这么做可以求解最优化?维基百科上给出了一个比较好的直观解释。 举个二维最优化的例子: min f(x,y) s.t. g(x,y) = c 这里画出z=f(x,y)的等高线(函数等高线定义见百度百科):
绿线标出的是约束g(x,y)=c的点的轨迹。蓝线是f(x,y)的等高线。箭头表示斜率,和等高线的法线平行。从梯度的方向上来看,显然有d1>d2。绿色的线是约束,也就是说,只要正好落在这条绿线上的点才可能是满足要求的点。如果没有这条约束,f(x,y)的最小值应该会落在最小那圈等高线内部的某一点上。而现在加上了约束,最小值点应该在哪里呢?显然应该是在f(x,y)的等高线正好和约束线相切的位置,因为如果只是相交意味着肯定还存在其它的等高线在该条等高线的内部或者外部,使得新的等高线与目标函数的交点的值更大或者更小,只有到等高线与目标函数的曲线相切的时候,可能取得最优值。 如果我们对约束也求梯度∇g(x,y),则其梯度如图中绿色箭头所示。很容易看出来,要想让目标函数f(x,y)的等高线和约束相切,则他们切点的梯度一定在一条直线上(f和g的斜率平行)。 也即在最优化解的时候:∇f(x,y)=λ(∇g(x,y)-C) (其中∇为梯度算子; 即:f(x)的梯度 = λ* g(x)的梯度,λ是常数,可以是任何非0实数,表示左右两边同向。) 即:▽[f(x,y)+λ(g(x,y)−c)]=0λ≠0 那么拉格朗日函数: F(x,y)=f(x,y)+λ(g(x,y)−c) 在达到极值时与f(x,y)相等,因为F(x,y)达到极值时g(x,y)−c总等于零。 min( F(x,λ) )取得极小值时其导数为0,即▽f(x)+▽∑ni=λihi(x)=0,也就是说f(x)和h(x)的梯度共线。 简单的说,在F(x,λ)取得最优化解的时候,即F(x,λ)取极值(导数为0,▽[f(x,y)+λ(g(x,y)−c)]=0)的时候,f(x)与g(x) 梯度共线,此时就是在条件约束g(x)下,f(x)的最优化解。
| 目标函数: f(x) 约束条件:
将上诉优化问题转化为拉格朗日函数表示: 拉格朗日函数L(x) 其中,.
即有: 我们把称为原问题的的对偶问题,上面表明,当满足一定条件时,原问题、对偶问题以及是相同的,且在最优解处也有。将带入(1)式中得: 由(4)式得: 说明是L(x,u)的极值点。即有 以上就是KKT条件的数学推导。总结一下,KKT条件可以表现为: 注: 1. x,\lambda,u都是向量。 2. 最后的那个偏导为 0表明f(x)在极值点x*处的梯度是各个h(x)和g(x)梯度的线性组合。
| |
步骤小结: | ||
无意看到已经有两位大神把svm原理和所涉及的数学知识讲解的太清楚了,贴此链接
https://blog.csdn.net/v_july_v/article/details/7624837/
https://blog.csdn.net/alwaystry/article/details/60957096
以飨读者,同时向原作者花费大力气整理出的资料表示出由衷感谢。