理解拉格朗日乘子法

 这篇博文中直观上讲解了拉格朗日乘子法和 KKT 条件,对偶问题等内容。 首先从无约束的优化问题讲起,一般就是要使一个表达式取到最小值:

minf(x)minf(x)
,这个是一个习惯。对于这类问题在高中就学过怎么做。只要对它的每一个变量求导,然后让偏导为零,解方程组就行了。

二维线性可分示例图

     所以在极值点处一定满足 df(x)dx=0df(x)dx=0 处就不是极值点),然后对它进行求解,再代入验证是否真的是极值点就行了。对于有些问题可以直接通过这种方法求出解析解(如最小二乘法)。

     但是也有很多问题解不出来或者很难解,所以就需要梯度下降法、牛顿法、坐标下降法之类的数值迭代算法了(感知机 、logistic 回归中用到)。

     对于这些迭代算法就像下面这张图一样,我们希望找到其中的最小值。一个比较直观的想法是先找一个起点,然后不断向最低点靠近。就先把一个小球放到一个碗里一样。

迭代算法

     一开始要找一个起始点,然后确定走的方向和距离,最后还要知道什么时候停止。这三步中最难的应该是确定走的方向。走的慢点还可以接受,要是方向错了就找不到最小值了~。所以走的距离可以简单的设为一个比较小的值。起始点可以随机选一个 (x0,y0)(x0,y0) 处的梯度的反方向,这是函数在这个点下降最快的方向(原因可以看知乎中忆臻的回答)。它是一个向量,然后它的大小就是走的距离,为了防止太大而走过头,导致不断在最小值附近震荡,需要乘上一个比较小的值(称为学习率),最终的停止条件就是梯度的大小很接近于 0(在极值点处的梯度大小就是 0)就行了。这种方法依靠梯度确定下降方向的方法叫做梯度下降法。

 对 f(x)f(x) 求极小值的流程就是:

  1. 随机选定x0x0(小于一个事先设定的很小的数),或者到达指定的迭代上限。

梯度下降法

     除了这种方法之外,其中第 2 步还可以这样做,固定 xx 进行相同的操作。这种每次只优化一个变量的方法叫做坐标下降法。

坐标下降法

     然后就是进一步的,我们可能要在满足一定约束条件的情况下最小化目标函数,比如有一个等式约束:

minf(x)s.t.h(x)=0minf(x)s.t.h(x)=0
的解,它们是没有关系的。那么还是要从问题本身去找线索:

带约束的极值

     如图,其中的圆圈是指目标函数 f(xy)f(x,y) 的梯度应该是在同一条直线上的。(这一点可以这么想,在切点处两个函数的梯度都与切平面垂直,所以在一条直线上) 

 所以满足条件的极值点一定满足:f(x,y)=λh(x,y)(λ=0f(x,y))∇f(x,y)=λ∇h(x,y)(λ=0是允许的,表示f(x,y)本身的极值点刚好在切点上) 联立,然后只要解出这个方程组,就可以得到问题的解析解了。当然也存在解不出来的情况,就需要用罚函数法之类的方法求数值解了。

     为了方便和好记,就把原来的优化问题写成 f(x,y)+λh(x,y)f(x,y)+λh(x,y)求偏导,并且令偏导为 0 就行了,和之前得到的方程组是一样的。这种方法叫拉格朗日乘数法。    

 如果有多个等式约束怎么办呢,如下图:

多个约束的极值

     这里的平面和球面分别代表了两个约束 h1(x)h1(x),那么这个问题的可行域就是它们相交的那个圆。这里蓝色箭头表示平面的梯度,黑色箭头表示球面的梯度,那么相交的圆的梯度就是它们的线性组合(只是直观上的),所以在极值点的地方目标函数的梯度和约束的梯度的线性组合在一条直线上。所以就满足:

f(x)=λμihi(x)=i=12λihi(x)h1(x)=0h2(x)=0∇f(x)=λμi∇hi(x)=∑i=12λi∇hi(x)h1(x)=0h2(x)=0
求偏导,然后让它们为 0。结果像上面一样直接列方程组是一样的。这个可以看做是一种简记,或者是对偶问题,这个函数叫做拉格朗日函数。

  再进一步,如果问题中既有等式约束,又有不等式约束怎么办呢?对于:

minf(x)s.t.h(x)=0g(x)0minf(x)s.t.h(x)=0g(x)≤0
只要取反就行了。对于这个问题先不看等式约束,对于不等式约束和目标函数的图:

不等式约束

 阴影部分就是可行域,也就是说可行域从原来的一条线变成了一块区域。那么能取到极值点的地方可能有两种情况:

  • 还是在h(x)h(x) 的极值点本身就在可行域里面。

 因为如果不是相切,那么同样的,对任意一个在可行域中的点,如果在它附近往里走或者往外走,f(x)f(x)的极值点。如下图(维基百科上的图~):

不等式约束下的极值

 对于第一种情况,不等式约束就变成等式约束了,对f(x)+λh(x)+μg(x)f(x)+λh(x)+μg(x)

 用拉格朗日乘子法:

(x)+λh(x)+μg(x)=0h(x)=0g(x)=0μ0∇(x)+λ∇h(x)+μ∇g(x)=0h(x)=0g(x)=0μ≥0
上。

 对于第二种情况,不等式约束就相当于没有,对 f(x)+λh(x)f(x)+λh(x) 用拉格朗日乘子法:
$$
\begin{equation}
\begin{aligned}
\nabla(x) +\lambda\nabla h(x)+= 0\
h(x) = 0 \
g(x) \le 0\

\end{aligned}
\end{equation}
$$
 最好把两种情况用同一组方程表示出来。对比一下两个问题,不同的是第一种情况中有 $\mu \ge 0$且

g(x)=0g(x)=0

(x)+λh(x)+μg(x)=0μg(x)=0μ0h(x)=0g(x)0∇(x)+λ∇h(x)+μ∇g(x)=0μg(x)=0μ≥0h(x)=0g(x)≤0

 这个就是 KKT 条件。它的含义是这个优化问题的极值点一定满足这组方程组。(不是极值点也可能会满足,但是不会存在某个极值点不满足的情况)它也是原来的优化问题取得极值的必要条件,解出来了极值点之后还是要代入验证的。但是因为约束比较多,情况比较复杂,KKT 条件并不是对于任何情况都是满足的。要满足 KKT 条件需要有一些规范性条件(Regularity conditions),就是要求约束条件的质量不能太差,常见的比如:

  1. LCQ:如果 h(x)h(x),极值一定满足 KKT 条件。并且满足强对偶性质。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值