机器学习——最优化问题:拉格朗日乘子法、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)条件是两种最常用的方法.在有等式约束时使用拉格朗日乘子法,在有 ...
随机推荐
- 代码部署:使用 nginx 代理到云服务器 ( windows 系统)
在部署之前我们首先要了解什么是nginx,它又可以做什么 Nginx 是高性能的 HTTP 和反向代理的web服务器,处理高并发能力是十分强大的,能经受高负 载的考验,有报告表明能支持高达 50,00 ...
- SpringCloud升级之路2020.0.x版-11.Log4j2 监控相关
本系列代码地址:https://github.com/HashZhang/spring-cloud-scaffold/tree/master/spring-cloud-iiford Log4j2 异步 ...
- 时间转换 BASIC-14
时间转换 给定一个以秒为单位的时间t,要求用"::"的格式来表示这个时间.表示时间,表示分钟,而表示秒,它们都是整数且没有前导的"0".例如,若t=0,则应输出 ...
- Java集合框架详细总结
一:Collection集合 呼~,历过好几天的奋战终于把集合框架肝完了,b站某马老师讲的是真的非常详细而且动听,原理给你分析得明明白白的,此前也找了许多关于集合这一大章节的视频,发现更多的是针对于使 ...
- windows10磁盘分区后,如何恢复分区,回到未分区之前
windows10磁盘分区后,恢复到分区以前的状态 1.我的电脑右键======>管理 2.找到磁盘管理 3.因为我的H盘原来是和F盘是同一个分区,只是拆分出来了,所有,找到H盘(确保数据都做过 ...
- mysqldump备份总结
常用的备份参数 -A 备份全库 -B 备某一个数据库下的所有表 -R, --routines 备份存储过程和函数数据 --triggers 备份触发器数据 --master-data={1|2} 告诉 ...
- C++智能指针的原理和实现
一.智能指针起因 在C++中,动态内存的管理是由程序员自己申请和释放的,用一对运算符完成:new和delete. new:在动态内存中为对象分配一块空间并返回一个指向该对象的指针: delete:指向 ...
- .Net Core 踩坑记录--程序独立发布 无法运行
背景 创建.net Core3.1 的Console程序 点击发布 选择独立部署模式 目标电脑 Win10 x64 未安装任何.Net SDK 现象 发布的程序 点击运行没有反应 或是直接闪退 解决 ...
- linux中的分号&&和&,|和||说明与用法
在用linux命令时候,我们可以一行执行多条命令或者有条件的执行下一条命令,下面我们讲解一下linux命令分号&&和&,|和||的用法 在用linux命令时候,我们可以一行执行 ...
- Spring源码解析之ConfigurationClassPostProcessor(三)
在上一章笔者介绍了ConfigurationClassParser.doProcessConfigurationClass(...)方法,在这个方法里调用了processImports(...)方法处 ...