1. 无约束的优化问题
![min f(x)](https://i-blog.csdnimg.cn/blog_migrate/f380635fda14b2f14eafa9511de4484d.png)
其中,
![](https://i-blog.csdnimg.cn/blog_migrate/8d1fccd79eb6e7b545c6a30cc1c2aba2.png)
注意我在图里画了等高线。此时 在局部极小值点
处的梯度必然为0,比较容易理解。这个梯度为零的条件是局部极小值点的必要条件。这样,优化问题的求解变成了对该必要条件解方程组。
2.带等式约束的优化问题
,
s.t.
.
与无约束的问题不同。我们所要求的极小值点被限制在曲线 上,我们将
称为可行域, 解只能在这个可行域里取。如下图所示,曲线
(黑色实曲线)经过无约束极小值点(黑点)附近。那么满足约束的极小值点应该与黑点尽可能近。我们将
的等高线不断放大,直到与曲线
相切,切点即为所求。相切是关键,是极小值点的必要条件。
<img src="https://pic2.zhimg.com/50/v2-549d697c93d9e4d3335c74d597808218_hd.jpg" data-rawwidth="593" data-rawheight="388" class="origin_image zh-lightbox-thumb" width="593" data-original="https://pic2.zhimg.com/v2-549d697c93d9e4d3335c74d597808218_r.jpg">
![](https://i-blog.csdnimg.cn/blog_migrate/cb44637cc1c30b2fad92d6eae965a36b.png)
把 沿着曲线方向参数化为
,
。必有
在红点
的梯度方向与
的切线方向垂直,即
![\nabla f(x^*) \cdot \dot x(t^*)=0](https://i-blog.csdnimg.cn/blog_migrate/31b4d110ff1c2fb60898dfc4098ae426.png)
另外,由于 为常数,那么也有复合函数
, 因此
在 t 的导数必为0,根据链式法则有
(内积为0,说明
与
垂直)
因为 垂直于
,
垂直于
,所以
与
共线,有
若为最小值点就必须满足上式和问题中的约束
,这个必要条件就叫作拉格朗日条件,为了好记,定义一个拉格朗日函数
![L(x, \lambda)=f(x)+\lambda h(x)](https://i-blog.csdnimg.cn/blog_migrate/dfb492ad4a51d646f5259aa34eaa7a0b.png)
令其偏导为0,正好就得到拉格朗日条件。
如此,带等式约束的优化问题转化为了无约束的优化问题,只需要对拉格朗日条件解方程组即可。这里λ就是拉格朗日乘子,有多少个等式约束就有多少个拉格朗日乘子。
3. 带不等式约束的优化问题
,
s.t.
.
当只有一个不等式起作用时, 如我们把问题2里的等式约束 改为
,如下图所示,可行域变成了阴影部分,最小值点还是切点,情况和问题2完全一样,只需要把不等号当做等号去求解即可。
<img src="https://pic2.zhimg.com/50/v2-283d1bb0119b63a862f3661b1413bfee_hd.jpg" data-rawwidth="521" data-rawheight="333" class="origin_image zh-lightbox-thumb" width="521" data-original="https://pic2.zhimg.com/v2-283d1bb0119b63a862f3661b1413bfee_r.jpg">
![](https://i-blog.csdnimg.cn/blog_migrate/11ca9496db3d83a2cff20246fc7f8b6f.png)
当两个不等式起作用时,那么问题就来了
,
s.t.
,
.
如下图,当 的等高线慢慢扩大时,等高线与可行域(阴影部分)第一次相遇的点是个顶点,2个不等式同时起作用了。满足约束的最小值点从原来的黑点位置(切点)移动到了红点位置,现在跟哪条约束函数曲线都不相切。这时候就需要用到kkt条件了。这里的“条件”是指:某一个点它如果是最小值点的话,就必须满足这个条件(在含不等式约束的优化问题里)。这是个必要条件,前面说的也全部是必要条件。
<img src="https://pic2.zhimg.com/50/v2-7d8461db6ca62803145bc716851bcca3_hd.jpg" data-rawwidth="686" data-rawheight="475" class="origin_image zh-lightbox-thumb" width="686" data-original="https://pic2.zhimg.com/v2-7d8461db6ca62803145bc716851bcca3_r.jpg">
![](https://i-blog.csdnimg.cn/blog_migrate/2d7fb66f64a8246bc1c277029a2c525c.png)
这个问题的解 应满足的KKT(卡罗需-库恩-塔克)条件为:
1. ,
;
2. ;
3. .
其中,μ叫KKT乘子,有多少个不等式约束就有多少个KKT乘子。加上问题3中的约束部分,就是完整版的KKT条件。对于有等式的情况,你把其中一个不等式约束换成等式,可行域变成了半条曲线,最小值点还是那个红点,和下面这种情况是一样的。
下面看看KKT条件是怎么来的。在问题2中我们知道了约束曲线的梯度方向与曲线垂直,我在上图画出了两条约束曲线的负梯度方向(绿色箭头)和等高线的梯度方向(红色箭头)。如果这个顶点是满足约束的最小值点,那么该点处(红点),红色箭头一定在两个绿色箭头之间( 方向一定指向
减小的方向,即
的那一边)。即
能被
和
线性表出(
),且系数必非负(
,
)。也就是kkt条件中的1和2
1. ,
;
2. .
有时候,有的不等式约束实际上不起作用,如下面这个优化问题
,
s.t.
;
;
.
如下图的 是不起作用的
![](https://i-blog.csdnimg.cn/blog_migrate/307e9da0a40869eb7b05ff7fc3861871.png)
对于最小值点 ,三个不等式约束的不同在于
(起作用)
(起作用)
(不起作用, 最小值点不在
上)
这时,这个问题的KKT条件1,2成了:
1. ,
,
;
2. .
条件2中的 这一项让我们很苦恼啊,
的绿色箭头跟我们的红色箭头没关系。要是能令
就好了。加上条件3:
3.
恰好能使 。由于
,
,所以前两项等于0,第三项
, 在条件3的作用下使得
. 正好满足需求。如果再多几项不起作用的不等式约束,比如
。要使
![\mu_1g_1(x^*)+\mu_2g_2(x^*)+\mu_3g_3(x^*)+\mu_4g_4(x^*)=0](https://i-blog.csdnimg.cn/blog_migrate/066139fd55f599be2d7c28a426095f47.png)
就只能有
同样地, ,
, 只能出现
或者
和
异号的情况。但注意条件1限制了
,
,所以只能有
。因此不管加了几个不起作用的不等式约束,条件2都能完美实现:目标函数
的梯度
被起作用的不等式约束函数
的负梯度(
)线性表出且系数
全部非负(红色箭头被绿色箭头夹在中间)。这样,优化问题的求解就变成对所有KKT条件解方程组。
如果再定义一个拉格朗日函数
![L(x, \mu)=f(x)+\mu_1 g_1(x)+\mu_2 g_2(x)+...](https://i-blog.csdnimg.cn/blog_migrate/260ccc8851afba8fd50a077c723b7034.png)
令它对x的偏导为0,就是KKT条件中的条件2了。
最后说明一下,以上所有都是局部极小值点的必要条件。据此求得的解不一定是局部极小值点(更别提全局了),原因是上图中我所画的等高线也许根本就不闭合,也就是说我们一直想要靠近的等高线中间的黑点压根就是个鞍点或者近似鞍点!
------------------------2017.6.6--------------------------
顺带一提,李航老师《统计学习方法》第一版105页式(7.27)中的第1,2行就是这里的KKT条件2(我这里把偏置b算在x里了),第3行是KKT条件3,第4行是问题中的不等式约束,第5行是KKT条件1。