对偶理论:基本概念札记

1. 前言

在读论文或者学习机器学习理论时,常常看到对偶的身影。但因为对对偶问题的理解不够透彻,在看机器学习理论相关理论时也是懵懵懂懂。所以本文整理了对偶理论的基本概念,帮助理解记忆。本文主要描述:

  1. 优化问题的标准形式,即原问题的基本定义;
  2. 介绍 Lagragian 函数,Lagrage 对偶函数/对偶函数,Lagrage 对偶问题/对偶问题等基本概念;
  3. 介绍将原问题转化为对偶问题的方法。

优化问题的标准形式(原问题)

优化问题的形式有很多,如最大化一个目标函数,或者最小化一个目标函数,约束的不等号方向不同等。每一个形式的优化问题,都可以求出相应的对偶问题,但因为优化问题形式的不同,求解细节上,会有相应的不同,很难掌握。为了方便记忆,先定义标准优化问题(原问题),然后再介绍标准优化问题转化为对偶问题的过程。

理论上所有的优化问题,都可以转化为标准形式。优化问题的标准形式如式 2-1 所示:

由优化目标,不等式约束和等式约束三部分组成。式 2-1 有三个需要额外注意的地方:

  1. <math xmlns="http://www.w3.org/1998/Math/MathML"> f 0 ( x ) f_0(x) </math>f0(x)是优化目标,期望可以最小化的量。它的形式无约束,可以是凸函数,也可以是非凸函数;
  2. <math xmlns="http://www.w3.org/1998/Math/MathML"> f i ( x ) f_i(x) </math>fi(x)是优化问题的不等式约束,注意符号是 "≤" 且不等式右端为 0, 共 m 个不等式约束,可以是线性不等式,也可以是非线性不等式;
  3. <math xmlns="http://www.w3.org/1998/Math/MathML"> h j h_j </math>hj是优化问题的等式约束, 且"="右端为 0,共有 p 个等式约束,可以是线性等式,也可以是非线性等式;

其中 <math xmlns="http://www.w3.org/1998/Math/MathML"> x ∈ R n x \in R^n </math>x∈Rn,问题的定义域是优化目标与所有约束的交集 <math xmlns="http://www.w3.org/1998/Math/MathML"> D = ∩ i = 1 m d o m f i ∩ f 0 ∩ j = 1 p h j ( x ) D=\cap ^m_{i=1}dom f_i \cap f_0 \cap ^p_{j=1}h_j(x) </math>D=∩i=1mdomfi∩f0∩j=1phj(x) 。求解优化问题是在定义域 D 中寻找到 <math xmlns="http://www.w3.org/1998/Math/MathML"> x ∗ x^* </math>x∗ 优化目标 <math xmlns="http://www.w3.org/1998/Math/MathML"> f 0 ( x ) f_0(x) </math>f0(x) 达到最小值 <math xmlns="http://www.w3.org/1998/Math/MathML"> p ∗ p^* </math>p∗ 。

理论上我们遇到的所有的优化问题都可以化为式 2-1 这种标准形式。比如我们的优化目标要极大化 <math xmlns="http://www.w3.org/1998/Math/MathML"> m a x f 0 ( x ) max f_0(x) </math>maxf0(x),可以等效为极小化 <math xmlns="http://www.w3.org/1998/Math/MathML"> m i n − f 0 ( x ) min -f_0(x) </math>min−f0(x) 。同理所有的不等式约束和等式约束经过化简变换后也可以转化为式 2-1 中形式。若某些优化问题,没有不等式约束,则标准形式中 <math xmlns="http://www.w3.org/1998/Math/MathML"> f i ( x ) f_i(x) </math> fi(x) 的数量为 0;同理若优化问题中没有等式约束,则对应的标准形式中 <math xmlns="http://www.w3.org/1998/Math/MathML"> h j ( x ) h_j(x) </math>hj(x) 的数量为 0; 若优化问题中,既没有不等式约束也没有等式约束,则对应的标准形式是一个无约束的优化问题。另外根据 <math xmlns="http://www.w3.org/1998/Math/MathML"> f 0 ( x ) f_0(x) </math>f0(x), <math xmlns="http://www.w3.org/1998/Math/MathML"> f i ( x ) f_i(x) </math>fi(x) , <math xmlns="http://www.w3.org/1998/Math/MathML"> h j ( x ) h_j(x) </math>hj(x) 的形式不同,优化问题可以分为不同的种类,难易程度也会有很大的区别。本文我们主要讨论对偶理论,对优化问题的种类和难易不做过多的描述,只要知道任何形式的优化问题均可以转化为这种标准形式即可。我们通过一个简单案例看看如何将一般优化问题转化为标准形式:

例 1。 将式 2-2 转为优化问题的标准形式:

转化为标准形式为:

2. Lagragian 函数

根据原问题(优化问题的标准形式),我们定义 Lagrangian 函数:

从下面 4 点理解 Lagrangian 函数:

3. Lagrage 对偶函数/对偶函数

有了 Lagrangian 函数,我们再引入 Lagrange 对偶函数如式 3-6:

Lagrange 对偶函数是 Lagrangian 函数关于 x 取最小值时的函数。Lagrange 对偶函数有以下 2 点性质:

针对性质 2, 我们尝试简单证明:

证明。 设原问题的最优解 <math xmlns="http://www.w3.org/1998/Math/MathML"> x ∗ x^* </math>x∗, 最优解对应的最优值为 <math xmlns="http://www.w3.org/1998/Math/MathML"> p ∗ p^* </math>p∗, 则有:

根据 Lagrange 对偶函数的定义,有:

又根据上文中,我们对 Lagrangian 函数讨论的第 4 点,有:

联立式 3-7,式 3-8, 式 3-9 可推出:

即 <math xmlns="http://www.w3.org/1998/Math/MathML"> g ( λ , μ ) g(\lambda,\mu) </math>g(λ,μ) 是原问题最优值的一个下界。

4. Lagrage 对偶问题/对偶问题

现在我们知道 Lagrange 对偶函数是原问题最优值 <math xmlns="http://www.w3.org/1998/Math/MathML"> p ∗ p^* </math>p∗ 的一个下界, 一个自然的想法是希望这个下界越紧越好,理想情况是式 3-10 中取得等号的时候,所以我们需要不断的调节 λ,µ 来最大化 <math xmlns="http://www.w3.org/1998/Math/MathML"> g ( λ , μ ) g(\lambda,\mu) </math>g(λ,μ) , 于是便得到 Lagrange 对偶问题 (也叫对偶问题):

设对偶问题的最优解为 <math xmlns="http://www.w3.org/1998/Math/MathML"> d ∗ d^* </math>d∗, 根据对偶函数定义可知:

又因为 <math xmlns="http://www.w3.org/1998/Math/MathML"> g ( λ , μ ) ⩽ p ∗ g(\lambda,\mu ) \leqslant p^* </math>g(λ,μ)⩽p∗,即 <math xmlns="http://www.w3.org/1998/Math/MathML"> g ( λ , μ ) g(\lambda,\mu) </math>g(λ,μ) 可取到的所有值,包括 <math xmlns="http://www.w3.org/1998/Math/MathML"> g ( λ , μ ) g(\lambda,\mu) </math>g(λ,μ) 的最大值 <math xmlns="http://www.w3.org/1998/Math/MathML"> d ∗ d^* </math>d∗ ,均小于 <math xmlns="http://www.w3.org/1998/Math/MathML"> p ∗ p^* </math> p∗ , 所以:

这时, 我们将原问题和对偶问题最优值的差定义为对偶间隙 (duality gap),如下:

当 <math xmlns="http://www.w3.org/1998/Math/MathML"> d ∗ ≤ p ∗ d^*≤p^* </math>d∗≤p∗时,称原问题和对偶问题是弱对偶 (weak duality)关系, 当 <math xmlns="http://www.w3.org/1998/Math/MathML"> d ∗ = p ∗ d^*=p^* </math>d∗=p∗ 则称原问题和对偶问题是强对偶 (strong duality)关系。概念上强对偶是弱对偶的一个特例。

因为对偶函数 <math xmlns="http://www.w3.org/1998/Math/MathML"> g ( λ , μ ) g(\lambda,\mu) </math>g(λ,μ) 是凹函数,且对偶问题的可行域是一个凸集,易知对偶问题是凸问题。凸问题是比较容易求解的一类问题。

5. 总结

本文主要介绍了对偶理论的基本概念和由原问题求对偶问题的方法,如下图。

  1. 首先将一般优化问题化简为标准优化问题;
  2. 引入拉格朗日乘子 (λ,µ) 求解出 Lagrangian 函数;
  3. 对 Lagrangian 函数关于 x 求最小,得到 Lagrange 对偶函数,也叫对偶函数;
  4. 对 Lagrange 对偶函数关于 λ,µ 求最大,得到 Lagrange 对偶问题,也称作对偶问题;

总结下对偶理论的理解:

  1. 为什么要将原问题化简为对偶问题?答:通过章节 5 末尾的讨论,我们知道:无论原问题难度如何,对偶问题都是凸问题,凸问题是一类比较容易求解问题,当原问题是一个特别难的问题时,化简为对偶问题,相对容易求解;
  2. 任何一个原问题,转化为对偶问题后,都会变得容易求解么?答:不是的。由章节 3 中性质 2,我们知道:转化为对偶问题后,引入的拉格朗日乘子 (λ,µ) 数量是所有约束个数的总和,当原问题中变量个数,远小于约束个数时,就不要转化为对偶问题求解了。比如原问题中只有 5 个变量,但有 100 万个约束,这时候,原问题对应的对偶问题会有 100 万个对偶变量,相对比,还是优化只有 5 个变量的原问题更容易;
  3. 当原问题中变量的数量和约束个数在同一量级时,既然任何原问题转化为对偶问题后,都会变为凸问题,且容易求解,是不是意味着原问题容易求解?答:不完全是。我们只能说对偶问题是凸问题,对偶问题相对容易求解。我们要知道对偶问题的解只是原问题的一个下界。只有当对偶间隙为 0(强对偶)时,对偶问题的最优值才和原问题的最优值相等,即 <math xmlns="http://www.w3.org/1998/Math/MathML"> d ∗ = p ∗ d^*=p^* </math>d∗=p∗ 。对偶间隙不为 0 时,求得对偶问题的最优值是原问题最优值的一个下界。当证明不了强对偶存在时,往往用这种方法求原问题的一个下界,用于理论分析;
  4. 如何判断对偶间隙是否为 0(即强对偶),以及如何求解原问题和对偶问题?答:对于原问题是凸问题,slater 条件可以判断什么情况下存在强对偶;当原问题非凸时,需要单独分析。当已知强对偶( <math xmlns="http://www.w3.org/1998/Math/MathML"> d ∗ = p ∗ d^*=p^* </math>d∗=p∗)存在的情况下,KKT 条件成立,可以借助 KKT 条件求解。以后会单独介绍 slater 条件和 KKT 相关内容。这里只为加深原问题和对偶问题之间关系的理解。

6. 参考资料

[1]. 中科大-凸优化-凌青

www.bilibili.com/video/av40

7. 团队介绍

三翼鸟数字化技术平台 - 场景 设计 交互 平台」主要负责设计工具的研发,包括营销设计工具、家电VR设计和展示、水电暖通前置设计能力,研发并沉淀素材库,构建家居家装素材库,集成户型库、全品类产品库、设计方案库、生产工艺模型,打造基于户型和风格的AI设计能力,快速生成算量和报价;同时研发了门店设计师中心和项目中心,包括设计师管理能力和项目经理管理能力。实现了场景全生命周期管理,同时为水,空气,厨房等产业提供商机管理工具,从而实现了以场景贯穿的B端C端全流程系统。

相关推荐
Monodye3 分钟前
【Java】网络编程:TCP_IP协议详解(IP协议数据报文及如何解决IPv4不够的状况)
java·网络·数据结构·算法·系统架构
pzx_0018 分钟前
【内积】内积计算公式及物理意义
数据结构·python·opencv·算法·线性回归
元气代码鼠10 分钟前
C语言程序设计(进阶)
c语言·开发语言·算法
十雾九晴丶44 分钟前
攻防世界--->gametime
算法
Aurora_th2 小时前
树与图的深度优先遍历(dfs的图论中的应用)
c++·算法·深度优先·图论·dfs·树的直径
马剑威(威哥爱编程)3 小时前
除了递归算法,要如何优化实现文件搜索功能
java·开发语言·算法·递归算法·威哥爱编程·memoization
算法萌新——14 小时前
洛谷P2240——贪心算法
算法·贪心算法
湖北二师的咸鱼4 小时前
专题:二叉树递归遍历
算法·深度优先
重生之我要进大厂4 小时前
LeetCode 876
java·开发语言·数据结构·算法·leetcode
KBDYD10105 小时前
C语言--结构体变量和数组的定义、初始化、赋值
c语言·开发语言·数据结构·算法