在求取有约束条件的优化问题时,拉格朗日乘子法(Lagrange Multiplier) 和KKT条件是很是重要的两个求取方法,对于等式约束的优化问题,能够应用拉格朗日乘子法去求取最优值;若是含有不等式约束,能够应用KKT条件去求取。固然,这两个方法求得的结果只是必要条件,只有当是凸函数的状况下,才能保证是充分必要条件。KKT条件是拉格朗日乘子法的泛化。以前学习的时候,只知道直接应用两个方法,可是殊不知道为何拉格朗日乘子法(Lagrange Multiplier) 和KKT条件可以起做用,为何要这样去求取最优值呢?数组
本文将首先把什么是拉格朗日乘子法(Lagrange Multiplier) 和KKT条件叙述一下;而后开始分别谈谈为何要这样求最优值。函数
一. 拉格朗日乘子法(Lagrange Multiplier) 和KKT条件学习
一般咱们须要求解的最优化问题有以下几类:优化
(i) 无约束优化问题,能够写为:.net
\[min{\rm{ }}f\left( x \right);\]blog
(ii) 有等式约束的优化问题,能够写为:ip
\[\begin{array}{l}
min{\rm{ }}f\left( x \right),\\
s.t.{\rm{ }}{h_{\rm{i}}}\left( x \right){\rm{ }} = {\rm{ }}0;{\rm{ }}i{\rm{ }} = 1,{\rm{ }}...,{\rm{ }}n
\end{array}\]数学
(iii) 有不等式约束的优化问题,能够写为:变量
\[\begin{array}{l}
\min f\left( x \right),\\
s.t.{\rm{ }}{g_i}\left( x \right){\rm{ }} < = {\rm{ }}0;{\rm{ }}i{\rm{ }} = 1,{\rm{ }}...,{\rm{ }}n\\
{h_j}\left( x \right){\rm{ }} = {\rm{ }}0;{\rm{ }}j{\rm{ }} = 1,{\rm{ }}...,{\rm{ }}m
\end{array}\] 方法
对于第(i)类的优化问题,经常使用的方法就是Fermat定理,即便用求取f(x)的导数,而后令其为零,能够求得候选最优值,再在这些候选值中验证;若是是凸函数,能够保证是最优解。
对于第(ii)类的优化问题,经常使用的方法就是拉格朗日乘子法(Lagrange Multiplier) ,即把等式约束h_i(x)用一个系数与f(x)写为一个式子,称为拉格朗日函数,而系数称为拉格朗日乘子。经过拉格朗日函数对各个变量求导,令其为零,能够求得候选值集合,而后验证求得最优值。
对于第(iii)类的优化问题,经常使用的方法就是KKT条件。一样地,咱们把全部的等式、不等式约束与f(x)写为一个式子,也叫拉格朗日函数,系数也称拉格朗日乘子,经过一些条件,能够求出最优值的必要条件,这个条件称为KKT条件。
(a) 拉格朗日乘子法(Lagrange Multiplier)
对于等式约束,咱们能够经过一个拉格朗日系数a 把等式约束和目标函数组合成为一个式子L(a, x) = f(x) + a*h(x), 这里把a和h(x)视为向量形式,a是横向量,h(x)为列向量,之因此这么写,彻底是由于csdn很难写数学公式,只能将就了.....。
而后求取最优值,能够经过对L(a,x)对各个参数求导取零,联立等式进行求取,这个在高等数学里面有讲,可是没有讲为何这么作就能够,在后面,将简要介绍其思想。
(b) KKT条件
对于含有不等式约束的优化问题,如何求取最优值呢?经常使用的方法是KKT条件,一样地,把全部的不等式约束、等式约束和目标函数所有写为一个式子L(a, b, x)= f(x) + a*g(x)+b*h(x),KKT条件是说最优值必须知足如下条件:
1. L(a, b, x)对x求导为零;
2. h(x) =0;
3. a*g(x) = 0;
求取这三个等式以后就能获得候选最优值。其中第三个式子很是有趣,由于g(x)<=0,若是要知足这个等式,必须a=0或者g(x)=0. 这是SVM的不少重要性质的来源,如支持向量的概念。
二. 为何拉格朗日乘子法(Lagrange Multiplier) 和KKT条件可以获得最优值?
为何要这么求能获得最优值?先说拉格朗日乘子法,设想咱们的目标函数z = f(x), x是向量, z取不一样的值,至关于能够投影在x构成的平面(曲面)上,即成为等高线,以下图,目标函数是f(x, y),这里x是标量,虚线是等高线,如今假设咱们的约束g(x)=0,x是向量,在x构成的平面或者曲面上是一条曲线,假设g(x)与等高线相交,交点就是同时知足等式约束条件和目标函数的可行域的值,但确定不是最优值,由于相交意味着确定还存在其它的等高线在该条等高线的内部或者外部,使得新的等高线与目标函数的交点的值更大或者更小,只有到等高线与目标函数的曲线相切的时候,可能取得最优值,以下图所示,即等高线和目标函数的曲线在该点的法向量必须有相同方向,因此最优值必须知足:f(x)的梯度 = a* g(x)的梯度,a是常数,表示左右两边同向。这个等式就是L(a,x)对参数求导的结果。(上述描述,我不知道描述清楚没,若是与我物理位置很近的话,直接找我,我当面讲好理解一些,注:下图来自wiki)。
而KKT条件是知足强对偶条件的优化问题的必要条件,能够这样理解:咱们要求min f(x), L(a, b, x) = f(x) + a*g(x) + b*h(x),a>=0,咱们能够把f(x)写为:max_{a,b} L(a,b,x),为何呢?由于h(x)=0, g(x)<=0,如今是取L(a,b,x)的最大值,a*g(x)是<=0,因此L(a,b,x)只有在a*g(x) = 0的状况下才能取得最大值,不然,就不知足约束条件,所以max_{a,b} L(a,b,x)在知足约束条件的状况下就是f(x),所以咱们的目标函数能够写为 min_x max_{a,b} L(a,b,x)。若是用对偶表达式: max_{a,b} min_x L(a,b,x),因为咱们的优化是知足强对偶的(强对偶就是说对偶式子的最优值是等于原问题的最优值的),因此在取得最优值x0的条件下,它知足 f(x0) = max_{a,b} min_x L(a,b,x) = min_x max_{a,b} L(a,b,x) =f(x0),咱们来看看中间两个式子发生了什么事情:
f(x0) = max_{a,b} min_x L(a,b,x) = max_{a,b} min_x f(x) + a*g(x) + b*h(x) = max_{a,b} f(x0)+a*g(x0)+b*h(x0)= f(x0)
能够看到上述加黑的地方本质上是说 min_x f(x) + a*g(x) + b*h(x) 在x0取得了最小值,用fermat定理,便是说对于函数 f(x) + a*g(x) + b*h(x),求取导数要等于零,即
f(x)的梯度+a*g(x)的梯度+ b*h(x)的梯度 = 0
这就是kkt条件中第一个条件:L(a, b, x)对x求导为零。
而以前说明过,a*g(x) = 0,这时kkt条件的第3个条件,固然已知的条件h(x)=0必须被知足,全部上述说明,知足强对偶条件的优化问题的最优值都必须知足KKT条件,即上述说明的三个条件。能够把KKT条件视为是拉格朗日乘子法的泛化。
转载:http://blog.csdn.net/xianlingmao/article/details/7919597