机器学习——最优化问题:拉格朗日乘子法、KKT条件以及对偶问题
1 前言
拉格朗日乘子法(Lagrange Multiplier) 和 KKT(Karush-Kuhn-Tucker) 条件是求解约束优化问题的重要方法,在有等式约束时使用拉格朗日乘子法,在有不等约束时使用 KKT 条件。当然,这两个方法求得的结果只是必要条件,只有当目标函数是凸函数的情况下,才能保证是充分必要条件。
1.1 最优化问题三种约束条件
1:无约束条件
解决方法通常是函数对变量求导,令导函数等于0的点可能是极值点,将结果带回原函数进行验证。
2:等式约束条件
设目标函数为 $f(x)$,约束条件为 $h_k(x)$。s.t. 表示 subject to ,“受限于”的意思。比如:
$\quad min \quad f(x)$
$\quad s.t.\quad h_{k}(x)=0 \quad k=1,2,...,l$
解决方法是 消元法 或者 拉格朗日法,消元法比较简单不在赘述。
3:不等式约束条件
设目标函数 $f(x)$,不等式约束为 $g(x)$,有的教程还会添加上等式约束条件 $h(x)$。此时的约束优化问题描述如下:
$\quad min \quad f(x)$
$\quad s.t.\quad h_{j}(x)=0 \quad j=1,2,...,p$
$\quad \quad \quad g_{k}(x) \le 0 \quad k=1,2,...,q$
对于这三种情况均有对应的方法处理:
1.无约束条件:对变量求导并令其为0,求得极值;
2.只有等式约束:拉格朗日乘子;
3.等式约束和不等式约束:KKT条件。
2 拉格朗日乘数法
在数学最优问题中,拉格朗日乘数法是一种寻找变量受一个或多个条件所限制的多元函数的极值的方法。这种方法将一个有 $n$ 个变量与 $k$ 个约束条件的最优化问题转换为一个有 $n + k$ 个变量的方程组的极值问题,其变量不受任何约束。
2.1 一个等式约束条件下
$\quad min \quad f(x)$
$\quad s.t. \quad h(x)=0$

如图示,只有相切的时候才有可能是极值点,在相切的地方 $h(x)$ 的梯度和 $f(x)$ 的梯度应该是在同一条直线上,即在极值点有:
$\nabla f(x)=\lambda \nabla h(x)$
根据上述分析,我们将原始优化问题表示为:
$L(x, \lambda)=f(x)+\lambda h(x)$
$ \mathrm{L}(x, \lambda) $ 即拉格朗日函数,$ \lambda $ 是拉格朗日乘子。拉格朗日函数对 $x$ 求偏导的结果为 $0$ 时,即为最优解。
例子:
$\quad min \quad f(x,y)$
$\quad s.t. \quad \varphi (x,y)=0$
设给定二元函数 $z=f(x,y)$ 和附加条件 $\varphi (x,y)=0$,为寻找 $z=f(x,y)$ 在附加条件下的极值点,先做拉格朗日函数$F(x,y,\lambda ) =f(x,y)+\lambda \varphi (x,y)$ ,其中$\lambda$为参数。
令 $F(x,y,\lambda )$ 对 $x$ 和 $y$ 和 $\lambda$ 的一阶偏导数等于零,即
$F^{'}_x =f^{'}_x(x,y) +\lambda \varphi ^{'}_x(x,y)=0$
$F^{'}_y =f^{'}_y(x,y) +\lambda \varphi ^{'}_y(x,y)=0$
$F^{'}_\lambda = \varphi(x,y)=0$
由上述方程组解出 $x,y$ 及 $\lambda$,如此求得的 $(x,y)$,就是函数 $z=f(x,y)$ 在附加条件 $ \varphi(x,y)=0$ 下的可能极值点。
2.2 多个等式约束条件下
该情况通常更为常见,含有多个等式约束,一般形式为:
$\quad min \quad f(x)$
$\quad s.t.\quad h_{k}(x)=0 \quad k=1,2,...,l$
定义拉格朗日函数 $F(x)$
$F(x,\lambda)=f(x)+\sum \limits _{k=1}^{l} \lambda_kh_k(x)$
其中 $\lambda_k$ 是各个约束条件的待定系数。
然后求解各变量的偏导方程:
$\frac{\partial F}{\partial x} ,...,\frac{\partial F}{\partial \lambda_1} ,...,\frac{\partial F}{\partial \lambda_l}$
如果有 $n$ 个变量与 $k$ 个约束条件的最优化问题,就应该有 $n+k $ 个方程。求出的方程组的解就可能是最优化值,将结果带回原方程验证就可得到解。
3 KKT条件
优化问题中既包含等式约束和不等式约束是最复杂也最常见的模型。问题的建模为:
$\quad min \quad f(x)$
$\quad s.t.\quad h_{j}(x)=0 \quad j=1,2,...,p$
$\quad \quad \quad g_{k}(x) \le 0 \quad k=1,2,...,q$
对于等式约束,可以引入拉格朗日乘子进行转换。我们着重看下不等式约束。
我们定义不等式约束下的拉格朗日函数 $L$,则 $L$ 表达式为:
$L(x,\lambda ,\mu )=f(x)+\sum \limits _{j=1}^{p}\lambda _jh_j(x) +\sum \limits _{k=1}^{q}\mu _kg_k(x)$
其中 $f(x)$ 是原目标函数,$h_j(x)$ 是第 $j$ 个等式约束条件,$λ_j$ 为等式约束引入的拉格朗日乘子;$g_k$ 是不等式约束,$u_k$ 为不等式约束引入的松弛变量,也叫做KKT乘子,注意KKT乘子是大于 $0$ 的。
求出的极值点 $ x^{*}$ 满足 KKT 条件:
$\left\{\begin{aligned} \nabla f\left(x^{*}\right)+\sum_{k} \lambda_{j} \nabla h_{k}\left(x^{*}\right)+\sum_{j} \mu_{k} \nabla g_{j}\left(x^{*}\right) &=0 \\ \mu_{k} & \geq 0 \\ \mu_{k} g_{j}\left(x^{*}\right) &=0 \\ g_{j}\left(x^{*}\right) & \leq 0 \end{aligned}\right.$
注意:$f(x)$,$g(x)$ 都是凸函数。
4 原始问题
原优化问题:
$\begin{array}{ll} \min _{x} & f(x) \\ \text { s.t. } h_{i}(x)=0 & i=1,2,3, \ldots, m \\ g_{j}(x) \leq 0 & j=1,2,3, \ldots, n \end{array}$
拉格朗日函数:
${\large L(x, \alpha, \beta)=f(x)+\sum \limits _{i=1}^{m} \alpha_{i} h_{i}(x)+\sum \limits _{j=1}^{n} \beta_{j} g_{j}(x)} $
对上式先最大化再最小化:
${\large \underset{x}{min} \left[ \underset{\alpha, \beta ; \beta_{j} \geq 0}{max} \ L(x, \alpha, \beta) \right]=\underset{x}{min} \left\{f(x)+ \underset{\alpha, \beta ; \beta_{j} \geq 0}{max} \ \left[\sum \limits_{i=1}^{m} \alpha_{i} h_{i}(x)+\sum \limits _{j=1}^{n} \beta_{j} g_{j}(x)\right]\right\}} $
在满足 KKT 条件的情况下,该式和原优化问题是等价的。
将上式分为两部分:
1. 可行解区域内,原优化问题的约束条件都得到满足。因为 $h_{i}(x)=0$ , 所以不管 $\alpha$ 如 何变化,必然有 $\alpha h_{i}(x)=0$ 。$g_{j}(x)<0$ , 且限定了 $ \beta_{j}>0$ , 则 $\beta_{j} g_{i}(x)$ 最大值为 $0$ 综上, 在可行解区域内:
${\large {\large \underset{\alpha, \beta ; \beta_{j} \geq 0}{max} \ L(x, \alpha, \beta) =f(x)+ \underset{\alpha, \beta ; \beta_{j} \geq 0}{max} \ [\sum \limits_{i=1}^{m} \alpha_{i} h_{i}(x)+\sum \limits _{j=1}^{n} \beta_{j} g_{j}(x)]=f(x)} } $
2. 可行解区域外, 此时原优化问题的约束条件未满足。若 $h_{i}(x) \neq 0$ , 则最大化 后为 $\infty$ 。 若 $g_{j}(x)>0$ , 则最大化后也为 $ \infty$ 。所以在可行解区域外:
$ {\large \underset{\alpha, \beta ; \beta_{j} \geq 0}{max} \ L(x, \alpha, \beta) =+\infty} $
综合上面两个论域, $\mathrm{f}(\mathrm{x})$ 在可行解区域内最小化,等于 $ \underset{\alpha, \beta ; \beta_{j} \geq 0}{max} \ L(x, \alpha, \beta) $ 的最小化,而在可行解区域外, $ \underset{\alpha, \beta ; \beta_{j} \geq 0}{max} \ L(x, \alpha, \beta) $无极值。这样当我们尝试对其进行最小化时也就相当于原问题最优化问题了。
5 对偶问题
定义:
${\large \theta_{p}(w)=\underset{\alpha, \beta ; \beta_{j} \geq 0}{max} \ \mathcal{L}(w, \alpha, \beta)} $
则最小化primal问题与原问题有同样的解:
${\large \underset{w}{min}\ \ \theta_{p}(w)=\underset{w}{min} \underset{\alpha, \beta: \alpha_{i} \geq 0}{max}\mathcal{L}(w, \alpha, \beta)} $
定义dual优化问题如下:
${\large \underset{\alpha, \beta: \alpha_{i} \geq 0}{max}\ \ \theta_{\mathcal{D}}(\alpha, \beta)=\underset{\alpha, \beta: \alpha_{i} \geq 0}{max}\underset{w}{min} \mathcal{L}(w, \alpha, \beta)} $
注意, $\theta_{p}$ 是针对 $ \alpha , \beta $ 的优化,而 $\theta_{\mathrm{D}} $ 是针对 $w$ 的优化。
我们定义:
${\large \begin{array}{l} \mathrm{p}^{*}=\underset{w}{min}\ \ \theta_{p}(w) \text { 为 primal 问题的值} \\ d^{*}=\underset{\alpha, \beta ; \alpha i>0}{max} \theta_{D}(\alpha, \beta) \text { 为 Dual 问题的值 } \end{array}} $
他们之间满足的满足是:
${\large d^{*}=\underset{\alpha, \beta: \alpha_{i} \geq 0}{max} \ \ \underset{w}{min} \mathcal{L}(w, \alpha, \beta) \leq \underset{w}{min}\ \ \underset{\alpha, \beta: \alpha_{i} \geq 0}{max} \ \ \mathcal{L}(w, \alpha, \beta)=p^{*} } $
只有在KKT条件时,才有: $d^{*}=p^{*} $,此时,我们可以通过求解Dual 问题来求解primal问题。
证明: ${\large d^{*}=\underset{\alpha, \beta: \alpha_{i} \geq 0}{max} \ \ \underset{w}{min} \mathcal{L}(w, \alpha, \beta) \leq \underset{w}{min}\ \ \underset{\alpha, \beta: \alpha_{i} \geq 0}{max} \ \ \mathcal{L}(w, \alpha, \beta)=p^{*}} $
对任意 $(w, \alpha, \beta)$ ,如下不等式一定成立:
${\large \theta_{\mathcal{D}}(\alpha, \beta)=\underset{w}{min}\ \ \ \mathcal{L}(w, \alpha, \beta) \leq \mathcal{L}(w, \alpha, \beta) \leq \underset{\alpha, \beta: \alpha_{i} \geq 0}{max} \ \mathcal{L}(w, \alpha, \beta)=\theta_{\mathfrak{p}}(w)} $
即:
${\large \theta_{\mathcal{D}}(\alpha, \beta) \leq \theta_{\mathfrak{p}}(w)} $
所以:
${\large \underset{\alpha, \beta: \alpha_{i} \geq 0}{max} \ \theta_{\mathcal{D}}(\alpha, \beta) \leq \underset{w}{min}\ \theta_{\mathfrak{p}}(w)} $
即得到:
${\large d^{*}=\underset{\alpha, \beta: \alpha_{i} \geq 0}{max} \ \ \underset{w}{min} \mathcal{L}(w, \alpha, \beta) \leq \underset{w}{min}\ \ \underset{\alpha, \beta: \alpha_{i} \geq 0}{max} \ \ \mathcal{L}(w, \alpha, \beta)=p^{*} } $
参考
6:[线性分类器](四)万字长文解释拉格朗日乘子与支持向量机
参考视频
机器学习——最优化问题:拉格朗日乘子法、KKT条件以及对偶问题的更多相关文章
- 拉格朗日乘子法 - KKT条件 - 对偶问题
接下来准备写支持向量机,然而支持向量机和其他算法相比牵涉较多的数学知识,其中首当其冲的就是标题中的拉格朗日乘子法.KKT条件和对偶问题,所以本篇先作个铺垫. 大部分机器学习算法最后都可归结为最优化问题 ...
- 机器学习笔记——拉格朗日乘子法和KKT条件
拉格朗日乘子法是一种寻找多元函数在一组约束下的极值方法,通过引入拉格朗日乘子,可将有m个变量和n个约束条件的最优化问题转化为具有m+n个变量的无约束优化问题.在介绍拉格朗日乘子法之前,先简要的介绍一些 ...
- 拉格朗日乘子法&KKT条件
朗日乘子法(Lagrange Multiplier)和KKT(Karush-Kuhn-Tucker)条件是求解约束优化问题的重要方法,在有等式约束时使用拉格朗日乘子法,在有不等约束时使用KKT条件.前 ...
- 真正理解拉格朗日乘子法和 KKT 条件
这篇博文中直观上讲解了拉格朗日乘子法和 KKT 条件,对偶问题等内容. 首先从无约束的优化问题讲起,一般就是要使一个表达式取到最小值: \[min \quad f(x)\] 如 ...
- 关于拉格朗日乘子法和KKT条件
解密SVM系列(一):关于拉格朗日乘子法和KKT条件 标签: svm算法支持向量机 2015-08-17 18:53 1214人阅读 评论(0) 收藏 举报 分类: 模式识别&机器学习(42 ...
- 拉格朗日乘子法和KKT条件
拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush-Kuhn-Tucker)条件是求解约束优化问题的重要方法,在有等式约束时使用拉格朗日乘子法,在有不等约束时使用KKT条件 ...
- 重温拉格朗日乘子法和KKT条件
在求取有约束条件的优化问题时,拉格朗日乘子法(Lagrange Multiplier) 和KKT条件是非常重要的两个求取方法,对于等式约束的优化问题,可以应用拉格朗日乘子法去求取最优值:如果含有不等式 ...
- 第99:真正理解拉格朗日乘子法和 KKT 条件
- 【机器学习之数学】03 有约束的非线性优化问题——拉格朗日乘子法、KKT条件、投影法
目录 1 将有约束问题转化为无约束问题 1.1 拉格朗日法 1.1.1 KKT条件 1.1.2 拉格朗日法更新方程 1.1.3 凸优化问题下的拉格朗日法 1.2 罚函数法 2 对梯度算法进行修改,使其 ...
- 深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件
[整理] 在求解最优化问题中,拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush Kuhn Tucker)条件是两种最常用的方法.在有等式约束时使用拉格朗日乘子法,在有 ...
随机推荐
- miniFTP项目实战二
项目简介: 在Linux环境下用C语言开发的Vsftpd的简化版本,拥有部分Vsftpd功能和相同的FTP协议,系统的主要架构采用多进程模型,每当有一个新的客户连接到达,主进程就会派生出一个ftp服务 ...
- SQL 练习19
统计各科成绩各分数段人数:课程编号,课程名称,[100-85],[85-70],[70-60],[60-0] SELECT Course.CId,Course.Cname ,t.[0-60],t.[6 ...
- 题解 matrix
传送门 无比毒瘤的dp题,而且伪装地好像很可做的样子 考场上我给它氪了差不多一个小时最后还是只能扔了个20pts状压走人 以下思路基本均来源于题解: 对于此题,题面中三个限制条件: (1)第 i 行第 ...
- .net core 通过动软连接数据库
.net core 与动软 首先创建asp.net core 或者 .net core 控制台程序.不需急着创建web.config 文件. 通过NuGet加个ado的包 System.Data.Sq ...
- docker开源系统监控软件Nagios
开源的系统监控软件 下面整理了3个: 1.Zabbix 2.Nagios 3.Open-Falcon 这位博主进行的完整的介绍: https://www.cnblogs.com/linuxandy/p ...
- 程序员必须知道的数据结构:HashMap 与 LinkedHashMap
为什么要说 HashMap 与 LinkedHashMap?第一:这两种数据结构是 Java Coder 中经常使用的数据结构.第二:这两种结构是最合适的能说明链表与数组的结构关系.在开始之前首先必须 ...
- 本文详细阐述如何用C#创建COM组件,并能用VC6.0等调用。
本文详细阐述如何用C#创建COM组件,并能用VC6.0等调用. 附:本文适用任何VS系列工具. 在用C#创建COM组件时,一定要记住以下几点: 1.所要导出的类必须为公有: 2.所有属性.方法也必须为 ...
- C#基础知识---is与as
一.is与as对比 is检查一个对象是否兼容于指定的类型,并返回一个Boolean值:true或者fasle. 注:is操作符永远不会抛出异常 经常按如下方法使用: ClassA { .... } O ...
- spring知识点(面试题)
转自(参考):https://baijiahao.baidu.com/s?id=1595722523154435312&wfr=spider&for=pc 本人收集了一些在大家在面试时 ...
- Object 的wait()方法
The java.lang.Object.wait() causes current thread to wait until another thread invokes the notify() ...