机器学习——最优化问题:拉格朗日乘子法、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)条件是两种最常用的方法.在有等式约束时使用拉格朗日乘子法,在有 ...
随机推荐
- SpringCloud升级之路2020.0.x版-9.如何理解并定制一个Spring Cloud组件
本系列为之前系列的整理重启版,随着项目的发展以及项目中的使用,之前系列里面很多东西发生了变化,并且还有一些东西之前系列并没有提到,所以重启这个系列重新整理下,欢迎各位留言交流,谢谢!~ 我们实现的 S ...
- Python爬虫学习——1.爬虫入门
HTTP和HTTPS HTTP协议(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收 HTML页面的方法. HTTPS(Hypertext Transfer ...
- Using Emacs as Clojure IDE
Open emacs24; Change CWD to parent folder of project home: M-x cd ~/docs/tmp; Build a leiningen proj ...
- hdmi 随笔
从图片来看,每张图片开始传输的是45像素的垂直同步, 1.控制数据贯穿所有时间,没个不是控制数据的传输都被控制数据包围.控制数据还要通过控制位指示,下一个数据是数据岛还是视频信号. 2.terc4 全 ...
- Flink项目实战(一)---核心概念及基本使用
前言.flink介绍: Apache Flink 是一个分布式处理引擎,用于在无界和有界数据流上进行有状态的计算.通过对时间精确控制以及状态化控制,Flink能够运行在任何处理无界流的应用中,同时对有 ...
- Linux 安装配置 NET模式网络环境配置
1.下载linux:发行版 Ubuntu REdHat centos Debain Fedora,SUSE,OpenSUSEcentos 6.xcentos 7.x在虚拟机(VmWare)上 安装l ...
- 多线程编程<二>
wait()与notify(): 1 public class ThreadComDemo { 2 public static void main(String[] args) { 3 try { 4 ...
- linux0.01内核源码结构
目录 boot 系统引导. fs 文件系统. include 头文件.一些C标准库,系统核心库. init 入口.main.c. kernel 内核. lib 库.C源程序,一些基本核心的程序. mm ...
- rabbitMQ重复消费(结合死循环重发那一篇看)
/** * 重复消费逻辑判断与处理 */ @Component public class RepeatMqConsumer { /** * 服务对象 */ private int count=1; @ ...
- Git&Github介绍
git&github 什么是GIT 是一个源代码管理工具 源代码为什么要管理起来? 你写的东西就叫源代码,第三方的库和框架都不算. 让源代码可以被追溯,主要记录每次变更了什么,谁主导这次变化. ...