继介绍完拉格朗日乘子法与KKT条件之后,再来讲讲拉格朗日对偶变换。

为接下来彻底搞清楚SVM做好铺垫。


在优化理论中,目标函数会有多种形式:如果目标函数和约束条件都为变量的线性函数, 称该问题为线性规划; 如果目标函数为二次函数, 约束条件为线性函数, 称该最优化问题为二次规划; 如果目标函数或者约束条件均为非线性函数, 称该最优化问题为非线性规划。每个线性规划问题都有一个与之对应的对偶问题,对偶问题有非常良好的性质,以下列举几个:

  • 对偶问题的对偶是原问题;
  • 无论原始问题是否是凸的,对偶问题都是凸优化问题;
  • 对偶问题可以给出原始问题一个下界;
  • 当满足一定条件时,原始问题与对偶问题的解是完全等价的;

比如下边这个例子,虽然原始问题非凸,但是对偶问题是凸的:


在这边多插一句嘴,关于非线性规划的问题,在matlab中大概又四种算法:内点法,SQP序列二次规划,信赖域反射算法(针对大规模问题),active set(有效集算法)。以后有时间会再学习和撰写相关算法的。


在开始讲拉格朗日对偶问题之前,翻出了久违的运筹学书本,先直观的介绍一下对偶问题是什么,以及它怎么由原始问题获得,以及一些简单的性质。

原问题与对偶问题的关系:简单了说,如果原问题是一个在一定的约束下,最大化一个企业的生产利润。那么它的对偶问题就是希望用最小代价把这个企业的所有资源收购过来。

原问题与对偶问题简单例子:

原问题:

max   

对偶问题:

min  

原问题与对偶问题变换规则:

  1. 原问题是求极大,对偶问题就是求极小,反之同理。
  2. 一个问题中的约束条件个数等于另一个问题中的变量数。
  3. 一个问题中目标函数的系数是另一个问题中约束条件的右端项。
  4. 约束条件在一个问题中为“”,则在另一个问题中为“”。

原问题与对偶问题的性质:

性质的具体内容在这里不做过多的介绍,毕竟理解起来也不是那么的快的。就说一下名字,有兴趣的可以自行baidu,在拉格朗日对偶变换中用到的性质会在后文中详细介绍。

  1. 弱对偶性
  2. 最优性
  3. 无界性
  4. 强对偶性
  5. 互补松弛性

开始进入正题!

原始问题

首先给出不等式约束优化问题:

定义 Lagrangian 如下:

根据以上 Lagrangian 便可以得到一个重要结论:

这段话需要多读几遍,确保理解。后面半句中,如果等式条件不被满足,且等式条件为负,那就让乘子变成负无穷大,同样会得到L无穷大,依旧会导致问题无解。故必须满足约束条件。

对偶问题

上式与原优化目标等价,将之称作原始问题 , 将原始问题的解记做,如此便把带约束问题转化为了无约束的原始问题,其实只是一个形式上的重写,方便找到其对应的对偶问题,首先为对偶问题定义一个对偶函数(dual function) :

直观地,可以理解为最小的里最大的那个要比最大的中最小的那个要大。具体的证明过程如下:

这个性质便叫做弱对偶性(weak duality),对于所有优化问题都成立,即使原始问题非凸。


弱对偶性的正常定义是原问题如果为极大,则有原问题的任何可行解小于等于对偶问题。反之则大于等于。

这里不必太过纠结,都是定义上的东西。实在不行可以举个例子来理解。

看完这些,应该可以接受上面的定义了吧。


这里还有两个概念:

之前提过无论原始问题是什么形式,对偶问题总是一个凸优化的问题,这样对于那些难以求解的原始问题 (甚至是 NP 问题),均可以通过转化为偶问题,通过优化这个对偶问题来得到原始问题的一个下界, 与弱对偶性相对应的有一个强对偶性(strong duality) ,强对偶即满足:

强对偶是一个非常好的性质,因为在强对偶成立的情况下,可以通过求解对偶问题来得到原始问题的解,在 SVM 中就是这样做的。当然并不是所有的对偶问题都满足强对偶性 ,在 SVM 中是直接假定了强对偶性的成立,其实只要满足一些条件,强对偶性是成立的,比如说 Slater 条件与KKT条件。

Slater 条件

也就是说如果原始问题是凸优化问题并且满足 Slater 条件的话,那么强对偶性成立。需要注意的是,这里只是指出了强对偶成立的一种情况,并不是唯一的情况。例如,对于某些非凸优化的问题,强对偶也成立。SVM 中的原始问题 是一个凸优化问题(二次规划也属于凸优化问题),Slater 条件在 SVM 中指的是存在一个超平面可将数据分隔开,即数据是线性可分的。当数据不可分时,强对偶是不成立的,这个时候寻找分隔平面这个问题本身也就是没有意义了,所以对于不可分的情况预先加个 kernel 就可以了。

KKT条件

当原始问题为凸优化问题的时候,其对偶问题的强对偶性与KKT条件是互为充要的。

当原始问题不为凸优化问题是,利用其对偶问题也可以得到原问题最优解的下界。

参考文章:

拉格朗日对偶

max min 与 min max 的差别

Max Min of function less than Min max of function

【数学基础】拉格朗日对偶相关推荐

  1. 如何通俗地讲解对偶问题?尤其是拉格朗日对偶lagrangian duality?

    ↑↑↑↑↑点击上方蓝色字关注我们! 『视学算法』转载 作者:李竞宜 覃含章 编者按 拉格朗日对偶理论对当今社会的发展起到了极大的推动作用.但是书本上对拉格朗日对偶理论的讲解往往比较空洞,本文收录了两位 ...

  2. 一文理解拉格朗日对偶和KKT条件

    一. 最优化问题求解 1. 等式约束的极值求法 $$ \begin{gather*} \underset{t}{min} f(t) \; s.t.\; h_i(t)=0,i=1,\cdots,p \e ...

  3. SVM笔记(二)拉格朗日对偶、KTT条件、软间隔SVM

    上一篇:SVM笔记(一) 上一篇写到讲硬间隔的SVM转化为凸二次规划问题,也就是QP问题,之后可以是用现成的软件求解QP问题.但是如果样本数量大和维度比较高,会导致问题求解困难或不可解,因此引入了拉格 ...

  4. 拉格朗日对偶函数拉格朗日对偶问题

    前段时间学了拉格朗日乘子法,学会了构造拉格朗日函数,也就是学会了把带约束(等式或不等式)的优化问题转化为无约束优化问题,私以为这部分就学完了到此为止了,没想到今天推导SVM的数学模型,要推原问题的对偶 ...

  5. 变分法求解最大熵时变拉格朗日对偶

    变分法求解最大熵时变拉格朗日对偶 一般拉格朗日对偶 min⁡xf0(x)\min\limits_{x} f_0(x)xmin​f0​(x) s.t.fi(x)⩽0\mathrm{s.t.} ~ f_i ...

  6. SVM中的KKT条件和拉格朗日对偶

    首先,我们要理解KKT条件是用来干嘛的? KKT条件用来判断一个解是否属于一个非线性优化问题. 求最优解: 约束条件分为 1.等式约束 2.不等式约束 对于等式约束的优化问题,可以直接应用拉格朗日乘子 ...

  7. 如何理解拉格朗日对偶函数

    转自:https://www.cnblogs.com/gczr/p/10521551.html 在约束最优化问题中,常常利用拉格朗日对偶性(Lagrange duality)将原始问题转换为对偶问题, ...

  8. 拉格朗日对偶的实例计算

    该书为凸优化教材 一.Lagrange 对偶函数 1.1 拉格朗日函数 1.2 拉格朗日对偶函数 二.标准形式线性规划拉格朗日对偶 minCTxs.t.Ax=bx≥0min C^Tx\\s.t. Ax ...

  9. 【数学】拉格朗日对偶,从0到完全理解

    1. 从最优化引出的拉格朗日乘数法 1.1 一个最简单的无约束优化问题 在学习与工程之中,我们时常会遇到一些优化的问题,也就是要对某个目标函数求取极值,最简单的形式如下. min⁡x∈Rnf(x)\l ...

最新文章

  1. c语言如何输出整串链表,大神帮我看一下怎么输入输出一个链表,我输入了但是没输出啊...
  2. 理解JSON对象:JSON.parse、 JSON.stringify
  3. 图解第一个Matlab仿真实例
  4. css 书写记录(兼容性)
  5. 【Python】生成器有啥用?
  6. BugkuCTF-Misc:Linux
  7. 游戏编程设计模式-state
  8. DOM树和Render树的创建
  9. 程序员养生:熬夜指南
  10. 洛谷 P1795 无穷的序列_NOI导刊2010提高(05)
  11. python使用pkg包_Python deb-pkg-tools包_程序模块 - PyPI - Python中文网
  12. linux修改ip配置文件_SSH连接Linux主机进行开发
  13. farm ugly chicken kick(fuck)这个计算机词汇的由来
  14. linux磁盘空间满如何清理,linux磁盘空间不足怎么办,磁盘清理方法
  15. pytorch optim灵活传参
  16. 解决XP系统桌面图标蓝底
  17. IDEA怎么查看现在的项目使用的JDK版本? 2016年4月19日22:51
  18. 因为文件共享不安全,所以你不能连接到文件共享。此共享需要过时的SMB1协议
  19. apk protect下载地址
  20. 安徽理科480分学计算机的大学,2021年安徽高考480分理科能上什么大学,安徽理科480分能上什么大学...

热门文章

  1. Windows同时安装Python2和Python3
  2. linux环境下安装gcc
  3. CNN结构:序列预测复合DNN结构-AcGANs、 ENN误差编码网络
  4. 分布式机器学习框架:CXXNet
  5. python转go感觉难_读《我为什么从python转向go》的一些感受
  6. C#程序开发中经常遇到的10条实用的代码
  7. 【自用】 VS2017 部分快捷键
  8. Amazon Redshift数据库
  9. 别看360完成私有化 仍有三因素阻碍中概股回归
  10. RAC集群时间同步服务