这里的主题是约束优化方法,在求取有约束条件的优化问题时,拉格朗日乘子法(Lagrange Multiplier) 和KKT条件是非常重要的两个求取方法,对于等式约束的优化问题,可以应用拉格朗日乘子法去求取最优值;如果含有不等式约束,可以应用KKT条件去求取。当然,这两个方法求得的结果只是必要条件,只有当是凸函数的情况下,才能保证是充分必要条件。需要注意KKT条件是拉格朗日乘子法的泛化。
待解决问题:
\begin{aligned}
&\min_{x \in \mathbb{R}^n} \ f(x) \notag \\
&s.t. \ \ \ h_i(x) = 0 , i = 1,2,...,m \ \\
& \ \ \ \ \ \ \ g_j(x) \le 0,j = 1,2,...,n
\end{aligned}
对于不带任何约束的优化问题,直接找到使 $f(x)$ 的导数为 0 的 $x$ 即可,可以使用梯度下降牛顿等方法;
当加上等式约束 $h_i(x)$ 之后,通常使用的方法就是拉格朗日乘子法(Lagrange Multiplier) ,该方法首先引入拉格朗日乘子$\alpha \in \mathbb{R}^m$ ,构建拉格朗日函数:
\[L(x,\alpha) = f(x) + \sum_i \alpha_i h_i(x)\]
分别对 $x$ 、$\alpha$ 求导,令导数为 0 ,求得 $x$ 、$\alpha$ 的值后带入 $L(x,\alpha)$ 即可得到最优解:
\[\frac{\partial L(x,\alpha)}{\partial x} = 0 \ \ \ \ \ \frac{\partial L(x,\alpha)}{\partial \alpha} = 0 \]
接下来讲解一下 Lagrange Multiplier 的推倒,先来看一个例子,对于二维情况下的目标函数是 $f(x, y)$,在平面中画出 $f(x, y)$ 的等高线,如下图的虚线所示, 约束等式 $h(x,y) = 0$ 如下图的绿线所示,目标函数 $f(x,y)$ 与约束 $g(x,y)¥ 只有三种情况,相交,相切或者没有交集,没交集肯定不是解,只有相交或者相切才会得到可行解,但相交得到的一定不是最优值,因为相交意味着肯定还存在其它的等高线在该条等高线的内部或者外部,使得新的等高线与目标函数的交点的值更大或者更小,这就意味着只有等高线与目标函数的曲线相切的时候,可能取得最优值.
经过上述示例便得到解困:拉格朗日乘子法取得极值的必要条件是目标函数与约束函数相切,这时两者的法向量是平行的,即
\[\Delta_xf(x) - \alpha \Delta_x h(x) = 0\]
上式正是对拉格朗日函数 $L(x,\alpha)$ 求导得到的结果。
当加上不等式约束之后,常常使用的方法就是KKT条件。同样地,我们把所有的等式、不等式约束与f(x)写为一个式子,也叫拉格朗日函数,分别引入拉格朗日乘子 \alpha 、\beta:
\[ L(x,\alpha,\beta) =f(x) + \sum_i \alpha h_i(x) + \sum_i\beta_ig_i(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条件能够得到最优值?
而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条件视为是拉格朗日乘子法的泛化。
对于无约束优化问题,可以采用各种梯度方法,不等式约束优化
拉格朗日乘子法
对偶方法
KKT条件