[关闭]
@evilking 2018-05-01T10:27:58.000000Z 字数 7236 阅读 3449

机器学习篇

拉格朗日乘子法

拉格朗日乘子法是为了求解最优化问题而设计的一种方法,本篇会详细讲解下拉格朗日乘子法的解法过程,以及由来;进一步讲解拉格朗日乘子法的泛化形式,即KKT条件;

笔者在学校时也只是知道拉格朗日乘子法怎么用,但在学习 SVM 时才首次需要深入理解 拉格朗日乘子法和KKT条件的原理,这里将学到的知识做个总结与分享,希望能从头到尾讲明白.

最优化问题的几种情况

最优化问题大致有三类:无约束最优化问题,有等式约束的最优化问题,有不等式约束的最优化问题。

无约束的最优化问题

数学描述为:

表示函数 求最小值,并且对变量 没有任何约束条件.

这类问题最简单,常用的方法是 Fermat定理,即


求导,并令导数等于零,可以求得候选最优值,再在这些候选值中验证;如果 是凸函数,可以保证是最优解.

为向量,即 ,则 需要对每个分量 求偏导,即可求解.如

且以下篇幅中的记法 等等变量都可以是向量(为了方便),若为向量,则求导则换成是对每个分量求偏导.


有等式约束的最优化问题

数学形式为:


表示在 的条件下求 的最小值.

这类最优化问题可以用拉格朗日乘子法求解,即通过一个拉格朗日系数 把等式约束和目标函数组合成一个式子,表达式如下:


其中 ,称为拉格朗日乘子。

变换后对 函数求极值就转换为了无约束最优化问题,可以利用上面的 Fermat 定理求解.


为了读者能方便理解拉格朗日乘子法的具体操作,下面我们以一个简单的例子来说明:

【例 1】: 求离散分布的最大熵.

离散分布的熵表示为:

根据拉格朗日乘子法,设
对所有的 求偏导,得:
计算出这 个等式的微分,得到:
这说明所有的 都相等,得到: ,因此均匀分布可得到最大熵的值.

这恰好说明了均匀分布时,系统是处于最混乱的状态,则熵最大.


有不等式约束的最优化问题

数学描述为:

对于这类问题,常用的方法就是 KKT条件(Karush-Kuhn-Tucher),同样的,我们把所有的等式、不等式约束与 写成一个式子,这个式子也叫拉格朗日函数,系数也称为拉格朗日乘子,通过一些条件,可以求出最优值的必要条件,这个条件就称为 KKT条件.

具体来说就是求解原问题的对偶问题为:

其中 .

KKT条件是说最优值必须满足以下条件:

求取这三个等式之后就能得到候选最优值。

分析这几个条件,发现第一个条件就是 Fetmat定理,第二个条件就是原问题的等式约束,保证最优点必须是一个可行解,第三个条件比较有意思,因为 ,有方向,所以对系数 也要由方向约束,使得 ,保证 ,而等式约束是没有方向的,所以对系数 没有约束;后面我们会详细推导出 KKT条件的由来.


导数求解极值的原理

这里以一个通俗的例子来说明下导数求解极值的原理。

假设你在一座山 上,你的目标是爬到山顶,也就是说你希望自己的海拔足够高,当你真正到达山腰时,很容易“只缘身在此山中,不识此山真面目”,这时候如何判断是真的在往上爬呢,还是在往下走呢 ?

在肉眼所能看见的小范围内,你可以通过周边的局部地形来判断,假设它大概是这样的:

laglr1

你就知道应该往高处(大概为红色箭头的方向)走,而不是往绿色箭头方向。

当然不一定一直沿着这个方向直线式上升,可能还需要走到某个地方,再次做一下这种局部的考察,调整一下方向,保证自己能向高处走.

有个疑问就是,什么是“高”的一边,如何来判定呢?

我们知道,海拔 ,我们希望能够找到山面上的海拔最高点(山顶),即 梯度 ,垂直于地平线,其中 表示对函数 求梯度.

关于梯度有个很自然的结论是: 沿梯度的方向是 增长最快的方向,反方向就是下降最快的方向.

所以直观上沿着与梯度方向成锐角的方向移动,那么 的值应该会增加.

而在山面上,我们可以通过天空来确定梯度方向( 当然指向高高的天空啦)与垂直向上方向成锐角的方向的地形,也就是“高”的一边.

laglr2

可以看见,红色的角是锐角,所以沿此方向海拔上升,绿色的角是钝角,所以沿此方向海拔下降.

所有我们可以移动的方向,叫做这一点的切空间。

那么,什么时候才能知道我们到达了山顶呢?

我们可以想象,随着往山顶越来越接近,移动方向应该会与山顶的梯度方向的夹角越来越大,逐渐接近垂直。

假设 点为山顶,那么在这点上,切空间上任何一个方向与山顶梯度方向的夹角都不可能是锐角,否则我们就可以沿锐角的方向继续升高了。

所以山顶处切空间只能够与梯度方向垂直,用数学语言描述就是

这也就是 Fetmat定理的含义.

读者可参看知乎上面的回答 : https://www.zhihu.com/question/38586401


拉格朗日乘子法的原理

这里就有个疑问,为什么将约束条件乘以系数后与原函数合并成一个式子后就能求得最优值了?

我们设想目标函数 是向量, 取不同的值,相当于可以投影在 构成的平面(曲面)上,即成为等高线。如下图所示:

lglr2

图中目标函数是 ,这里 是标量,虚线是等高线,现在假设我们的约束为 是向量,在 构成的平面或者曲面上是一条曲线;

假设 与等高线 相交,交点就是同时满足等式约束和目标函数的可行域的值,但此时肯定不是最优值,因为相交意味着肯定还存在其它的等高线在该等高线的内侧或外侧,使得新的等高线与目标函数的交点的值更大或更小,只有等高线与目标函数相切时,才可能取得最优值。

相切意味着等高线和目标函数的曲线在切点的法向量必须共线,所以最优值必须满足: ,其中, 是常数且不为零。这个等式就是 求导的结果.


我们还是以一个简单的例子来说明.

【例 2】: 求双曲线 上离原点最近的点.

首先我们根据问题提取出对应的数学模型,即:

可以看出这是一个典型的有等式约束的最优化问题;我们将 的曲线族画出来,如下图所示:

laglr4

当曲线族中的圆与 曲线相切时,切点到原点的距离最短。也就是说,当 的等高线与双曲线 相切时,我们可以得到上述最优化问题的一个极值.

我们知道,如果两个曲线相切,在切点处,它们的切线相同,法向量是共线的,即 ,其中 表示对函数求导(求法向量).

这时,我们就将原有的约束优化问题转化为了一种对偶的无约束优化问题,如下:

原问题:


对偶问题由 得:
通过求解对偶问题的方程组,就可以获得原问题的解,即:
通过求解得最优解为 或者是


KKT条件的原理

在实际问题中,我们往往面临的是不等式约束,比如不超过多少时间,不超过多少人力,不超过多少成本等等,所以科学家们拓展了拉格朗日乘数法,增加了KKT条件之后便可以用拉格朗日乘数法来求解不等式约束的优化问题了。

下面就直接来推导KKT条件产生的过程,以一个简单的只有不等式约束的最优化问题来说明:

原问题为:

我们定义函数
其中,

下面我们再来探讨另一边,即 :


下面单独考虑 :

于是我们可得到当 时,有

亦即

我们把 称为原问题 的对偶问题,

上式表明当满足一定条件时原问题、对偶的解、以及 是相同的,且在最优解 。把 代入 ,由 ,所以 ,这说明 也是 的极值点,即


最后总结一下:

KKT条件是拉格朗日乘子法的泛化,如果我们把等式约束和不等式约束一并纳入进来则表现为:

注:都是向量。

表明在极值点处的梯度是各个梯度的线性组合。


小结

到这里整个拉格朗日乘子法求解最优化问题就讲完了,希望对读者有帮助.

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注