真正理解拉格朗日乘子法和KKT条件

article/2025/8/20 17:44:01

转载自:https://www.cnblogs.com/xinchen1111/p/8804858.html

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

minf(x) m i n f ( x )

 如果问题是 maxf(x) m a x f ( x ) 也可以通过取反转化为求最小值 minf(x) m i n − f ( x ) ,这个是一个习惯。对于这类问题在高中就学过怎么做。只要对它的每一个变量求导,然后让偏导为零,解方程组就行了。

二维线性可分示例图

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

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

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

迭代算法

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

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

  1. 随机选定 x0 x 0
  2. 得到函数在 x0 x 0 的梯度,然后从 x0 x 0 向前走一步。计算式是: xnew0=xold0αf(x) x 0 n e w = x 0 o l d − α ∇ f ( x )
  3. 重复第 2 步,直到梯度接近于 o o (小于一个事先设定的很小的数),或者到达指定的迭代上限。

梯度下降法

     除了这种方法之外,其中第 2 步还可以这样做,固定 x, 把它作为常数。就变成只有一个变量的优化问题了,直接求导为 0 就可以得到最优点,向前走到 (x0,y1) ( x 0 , y 1 ) 处,然后固定 y1 y 1 , 对 x x 进行相同的操作。这种每次只优化一个变量的方法叫做坐标下降法。

坐标下降法

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

minf(x)s.t.h(x)=0

     解决这个的时候问题不能先用上面的方法求出 f(x) f ( x ) 的极值点,然后留下满足方程 h(x)=0 h ( x ) = 0 的。因为这个问题的解可能根本不是 minf(x) m i n f ( x ) 的解,它们是没有关系的。那么还是要从问题本身去找线索:

带约束的极值

     如图,其中的圆圈是指目标函数 f(xy) f ( x , y ) 投影在平面上的等值线,表示在同一个圆圈上,黑线是约束条件 h(x)=0 h ( x ) = 0 的函数图像。所以等值线与函数图像相交的点其实就是所有满足约束的点。那么极值点只有可能在等值线与函数图像相切的地方取到,因为如果在相交的地方取到,那么沿着 h(x) h ( x ) 的图像往前走或者往后走,一定还有其它的等值线与它相交,也就是 f(x,y) f ( x , y ) 的值还能变大和变小,所以交点不是极值点,只有相切的时候才有可能是极值点(不可能同时变大和变小了)。在相切的地方 h(x) h ( x ) 的梯度和 f(x,y) f ( x , y ) 的梯度应该是在同一条直线上的。(这一点可以这么想,在切点处两个函数的梯度都与切平面垂直,所以在一条直线上) 

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

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

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

多个约束的极值

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

f(x)=λμihi(x)=i=12λihi(x)h1(x)=0h2(x)=0 ∇ f ( x ) = λ μ i ∇ h i ( x ) = ∑ i = 1 2 λ i ∇ h i ( x ) h 1 ( x ) = 0 h 2 ( x ) = 0

 大于2个约束的情况也一样。为了好记,将原来的约束的问题写成 L(x,λ)=f(x)+i1nλihi(x) L ( x , λ ) = f ( x ) + ∑ i − 1 n λ i ∇ h i ( x ) 的形式,然后对 x,λ x , λ 求偏导,然后让它们为 0。结果像上面一样直接列方程组是一样的。这个可以看做是一种简记,或者是对偶问题,这个函数叫做拉格朗日函数。

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

minf(x)s.t.h(x)=0g(x)0 m i n f ( x ) s . t . h ( x ) = 0 g ( x ) ≤ 0

 当然也同样约定不等式是 ,如果是 只要取反就行了。对于这个问题先不看等式约束,对于不等式约束和目标函数的图:

不等式约束

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

  • 还是在 h(x) h ( x ) 和 等值线相切的地方
  • f(x) f ( x ) 的极值点本身就在可行域里面。

 因为如果不是相切,那么同样的,对任意一个在可行域中的点,如果在它附近往里走或者往外走, f(x) f ( 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(1) (1) ∇ ( x ) + λ ∇ h ( x ) + μ ∇ g ( x ) = 0 h ( x ) = 0 g ( x ) = 0 μ ≥ 0

 这里需要解释一下,为什么不是 μ0 μ ≠ 0 而是 μ0 μ ≥ 0 。后面的约束比前面的更强。看“不等式约束”那个图,我们已经知道了问题中的可行域是在 g(x)0 g ( x ) ≤ 0 一侧,而 g(x) g ( x ) 的梯度是指向大于 0 的一侧,也就是不是可行域的一侧。而求的问题是极小值,所以 f(x) f ( x ) 在交点处的梯度是指向可行域的一侧,也就是说两个梯度一定是相反的。所以也就可以确定这里的系数一定是大于 0 的。而等式约束由于不知道 h(x) h ( x ) 的梯度方向,所以对它没有约束,那么为什么 μ μ 还能等于 0 呢,因为极值点可能刚好在 g(x) g ( x ) 上。

 对于第二种情况,不等式约束就相当于没有,对 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)=0 g ( x ) = 0 , 第二种情况 μ=0 μ = 0 g(x)0 g ( x ) ≤ 0 综合两种情况,可以写成 μg(x)=0 μ g ( x ) = 0 μ0 μ ≥ 0 g(x)0 g ( x ) ≤ 0

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

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

  1. LCQ:如果 h(x) h ( x ) g(x) g ( x ) 都是形如 Ax+b A x + b 的仿射函数,那么极值一定满足 KKT 条件。
  2. LICQ:起作用的 g(x) g ( x ) 函数(即 g(x) g ( x ) 相当于等式约束的情况)和 h(x) h ( x ) 函数在极值点处的梯度要线性无关,那么极值一定满足 KKT 条件。
  3. Slater 条件:如果优化问题是个凸优化问题,且至少存在一个点满足 h(x)=0 h ( x ) = 0 g(x)=0 g ( x ) = 0 ,极值一定满足 KKT 条件。并且满足强对偶性质。


http://chatgpt.dhexx.cn/article/36muipYs.shtml

相关文章

【最优化】拉格朗日乘子法

拉格朗日乘子法 前面几节讲述的都是无约束优化问题的相关算法,但是在实际生活中碰到的几乎都是有约束问题模型。 等式约束的拉格朗日乘子法 算法框架 1. 问题描述 以下对约束优化问题中常出现的概念做一下简要解释: 可行解:所有满足约束条…

拉格朗日乘子法的通俗理解

拉格朗日乘子法的通俗理解 1. 举例2. 求偏导3. 拉格朗日乘子法4. 乘子 1. 举例 这里举个简单的例子吧 在家里做蛋糕,假如只计算鸡蛋和牛奶的价格 其中鸡蛋的价格为4.5¥/斤,牛奶为12¥/升,而预算刚好是20¥ 那…

拉格朗日乘数法计算技巧

昨天有位朋友让我看了一道题(见下图),方法是使用拉格朗日乘数法进行求解的,我刚开始算的时候感到非常困难,后来在答案的帮助下发现可以从x,y,z的对称性以及成比例暗示中着手,经此一题,我不由发问…

拉格朗日乘数法详解

拉格朗日乘子法 写这篇文章的动机主要是最近正在学习机器学习的课程,学到逻辑回归的时候发现使用了拉格朗日乘子法,网上也很多文章讲拉格朗日乘子法的,因此这篇文章只是记录学习的过程,希望能较为全面地展示拉格朗日乘子法的各个…

拉格朗日乘子法 KKT条件

目录 1. 拉格朗日乘子法用于最优化的原因 2. 最优化问题三种情况 2.1 无约束条件 2.2 等式约束条件:拉格朗日乘子法 2.3 不等式约束条件:KKT 3. Lagrange对偶函数 3.1 对偶函数与原问题的关系 3.2 Lagrange对偶问题 (1)弱…

拉格朗日乘子法、罚函数法、乘子罚函数法

1. 拉格朗日乘子法 1.1 无约束问题1.2 等式约束问题1.3 不等式约束问题(KKT条件)1.4 拉格朗日乘子法问题 2. 罚函数法 2.1 定义2.2 外罚函数法2.3 内罚函数法 3. 广义乘子法 3.1 等式约束广义乘子法:3.2 不等式约束广义乘子法:3.3…

对拉格朗日乘数法的理解

参考 百度百科 拉格朗日乘数法:https://www.cnblogs.com/maybe2030/p/4946256.html 拉格朗日乘数法的一种几何解释:https://zhuanlan.zhihu.com/p/368334607 拉格朗日乘子法与KKT条件:https://zhuanlan.zhihu.com/p/392900101 Karush-Kuhn-Tu…

【优化】拉格朗日(Lagrange)乘子法超简说明

本文不做数学推导,从物理意义上讲解拉格朗日乘子法。 原问题 我们要解决带有等式约束的最优化问题。为方便书写,以二维函数为例: m a x f ( x , y ) , s . t . g ( x , y ) 0 max\ f(x,y), \ \ s.t. g(x,y)0 max f(x,y), s.t.g(x,y)0 用…

【数学基础】拉格朗日乘子法

概述 在求解最优化问题中,拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush Kuhn Tucker)条件是两种最常用的方法。在有等式约束时使用拉格朗日乘子法,在有不等约束时使用KKT条件。 我们这里提到的最优化…

拉格朗日乘数法

拉格朗日乘数法是用来求条件极值的,极值问题有两类,其一,求函数在给定区间上的极值,对自变量 没有其它要求,这种极值称为无条件极值。其二,对自变量有一些附加的约束条件限制下的极值,称为 条…

如何理解拉格朗日乘子法?

1 与原点的最短距离 假如有方程: 图像是这个样子滴: 现在我们想求其上的点与原点的最短距离: 这里介绍一种解题思路。首先,与原点距离为 的点全部在半径为 的圆上: 那么,我们逐渐扩大圆的半径:…

拉格朗日乘数法 —— 通俗理解

拉格朗日乘数法(Lagrange Multiplier Method)在数学最优问题中,是一种寻找变量受一个或多个条件所限制的多元函数的极值的方法。记得以前大学高数、数模等课程多次提到过,在求解最有问题中很有用处,最近重温了下拉格朗…

拉格朗日乘子法(简单易懂的说明)

拉格朗日乘子法(Lagrange Multiplier) 之前在高中就有一直听到拉格朗日,拉格朗日是一个很牛逼哄哄的大佬。在学习SVM的时候,居然也见到了他的身影。让我们了解一下拉格朗日乘子法的具体内容。 在学习过程中,有时会遇到…

深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件

在求解最优化问题中,拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush Kuhn Tucker)条件是两种最常用的方法。在有等式约束时使用拉格朗日乘子法,在有不等约束时使用KKT条件。 我们这里提到的最优化问题通…

拉格朗日乘子法

周志华《机器学习》如何理解拉格朗日乘子法? 1. 介绍 拉格朗日乘子法 (Lagrange multipliers)是一种寻找多元函数在一组约束下的极值的方法。通过引入拉格朗日乘子,可将有 d d d 个变量与 k k k 个约束条件的最优化问题转化为具有 d k d k dk 个变…

拉格朗日乘子法 (Lagrange multipliers)

目录 约束最优化问题等式约束的优化问题二元函数多元函数 不等式约束的优化问题 (KKT 条件)推广到多个约束拉格朗日对偶 (Dual Problem)前置知识 inf \text{inf} inf 和 sup \text {sup} sup 符号凸函数仿射函数凸优化 从广义拉格朗日函数到拉格朗日对偶函数从原问题到拉格朗日…

拉格朗日乘子

1,拉格朗日乘子(lagrange multiplier),又叫拉氏乘子或拉格朗日乘数。它是出现在拉格朗日乘数法中的概念。 拉格朗日乘数法可以解决多变量函数在其变量受到一个或多个约束条件时求极值的问题。 它可以将含有n个变量的函数(该函数的…

机器学习中的数学——拉格朗日乘子法(一):等式约束的拉格朗日乘子法

分类目录:《机器学习中的数学》总目录 相关文章: 拉格朗日乘子法(一):等式约束的拉格朗日乘子法 拉格朗日乘子法(二):不等式约束与KKT条件 拉格朗日乘子法是一种寻找多元函数在一组约…

拉格朗日乘子法详解

一、拉格朗日乘子法简介 拉格朗日乘子法的应用十分广泛,它是SVM的理论基础,是凸优化的重要研究部分。它用于求解约束条件下的极值问题,过程简单巧妙,也是各类考试的常考题型。然而,拉格朗日乘子法的原理我却一直模模糊…

日志服务与日志分析工具

系统日志生成服务 功能: 日志服务是根据日志配置文件进行提供相应的功能服务,对于各种服务的信息等级的设定将不同服务的不懂等级信息记录在不同的文件里面。 日志管理服务分类: 1.rsyslogd 普通日志管理服务 采集各种服务产生的信息根据…