📑 查看全课大纲(第 92 / 93 节)
- 1.概论和集合的定义
- 2.逼疯康托的实数集理论
- 3.常用不等式与映射
- 4.函数及特殊函数
- 5.序列极限的定义
- 6.序列极限的性质与夹逼定理
- 7.重要极限
- 8.无穷小量,无穷大量和一组重要的阶的比较关系
- 9.聚点原理
- 10.函数极限及其性质
- 11.重要极限与等价无穷小
- 12.连续函数
- 13.导数的概念(那些年,扛起牛顿的胡克)
- 14.定义法求导
- 15.函数四则运算的导数与反函数求导法则
- 16.复合函数,隐函数,参数式求导
- 17.不定式求导之“洛必达与伯努利的师生情”
- 18.一阶微分
- 19.高阶导数
- 20.高阶微分
- 21.罗尔中值定理与拉格朗日中值定理
- 22.柯西空降科学院遭排挤
- 23.泰勒公式与泰勒的克妻属性
- 24.利用泰勒展开唯一性定理计算泰勒展开
- 25.泰勒公式的余项估计
- 26.极值问题与导数
- 27.函数凹凸性
- 28.无卵用的渐近线与函数作图
- 29.不定积分的定义
- 30.第一换元法
- 31.第二换元法
- 32.分部积分法
- 33.有理式积分
- 34.三角替换
- 35.定积分的概念
- 36.定积分的性质与积分中值定理
- 37.变上限定积分
- 38.微积分基本定理之“高斯教你如何优雅地装逼”
- 39.定积分的换元法
- 40.奇偶函数与周期函数的定积分
- 41.曲线求长与不可求长曲线(海岸线居然算不出长度?)
- 42.旋转体体积
- 43.旋转体侧面积
- 44.极坐标下图形的面积(数学系常用表白曲线)
- 45.欧式空间
- 46.点列极限,开集与闭集
- 47.多元函数的定义
- 48.多元函数的极限
- 49.多元连续函数
- 50.一阶偏导数
- 51.高阶偏导数
- 52.全微分
- 53.方向导数与梯度
- 54.链式法则
- 55.一阶全微分形式的不变性与高阶微分
- 56.多元函数的泰勒公式
- 57.隐函数存在定理与逆映射存在定理
- 58.多元函数的极值
- 59.矩阵基础知识
- 60.行列式的定义与特殊矩阵的行列式
- 61.行列式的性质
- 62.行列式按k行展开
- 63.线性方程组初步与高斯消元法
- 64.齐次线性方程组与Cramer法则
- 65.线性空间
- 66.线性相关与线性无关
- 67.向量组的秩
- 68.矩阵的秩与线性方程组有解的充要条件
- 69.齐次线性方程组的解集结构
- 70.非齐次线性方程组解集结构
- 71.基与维数
- 72.矩阵的乘法
- 73.特殊矩阵
- 74.矩阵乘积的秩与行列式
- 75.矩阵的逆
- 76.正交矩阵
- 77.矩阵对角化与特征值特征向量
- 78.实对称矩阵对角化
- 79.二次型与正定矩阵
- 80.LU分解
- 81.Cholesky分解
- 82.SVD分解
- 83.线搜索
- 84.步长
- 85.最速下降法和牛顿法
- 86.共轭梯度法
- 87.拟牛顿法
- 88.无约束优化
- 89.若干知识点补充(一)
- 90.若干知识点补充(二)
- 91.凸优化问题
- 92.对偶问题(一)
- 93.对偶问题(二)
对偶问题(一)
约 39 分钟
对偶问题(一):从拉格朗日函数到对偶问题
小象实战讲义 · 人工智能数学基础
在优化理论中,我们常常面对带有约束的复杂优化问题。直接求解这些问题可能非常困难,尤其是在约束条件众多或问题非凸时。本节将引入一个强大的工具——对偶理论。通过将原始优化问题转化为其对偶问题,我们不仅能简化计算,还能获得对问题结构更深刻的理解,甚至在经济学、机器学习等领域获得新的洞见。学完本节,你将掌握构造拉格朗日函数及其对偶问题的核心方法,理解弱对偶与强对偶的基本原理。
💡 核心导读
- 拉格朗日函数:将有约束优化问题转化为一个包含原始变量和拉格朗日乘子的增广目标函数,其思想与机器学习中的“损失+惩罚”框架一脉相承。
- 拉格朗日对偶函数:通过对拉格朗日函数关于原始变量取极小值得到,它给出了原始问题最优值的一个下界,并且总是凹函数。
- 拉格朗日对偶问题:在拉格朗日乘子非负的约束下,最大化对偶函数。无论原问题是否为凸,对偶问题总是一个凸优化问题。
- 弱对偶与强对偶:对偶问题的最优值总是原问题最优值的下界(弱对偶)。在凸问题且满足某些约束准则(如Slater条件)时,两者相等(强对偶),这为通过求解对偶问题来获取原问题最优解提供了可能。
从约束优化到拉格朗日函数
我们首先考虑一个标准形式的约束优化问题:
其中 是优化变量, 是目标函数, 定义了 个不等式约束, 定义了 个等式约束。定义域 。我们用 表示该问题的最优值。
拉格朗日函数的基本思想是将约束条件以加权和的形式“吸收”到目标函数中,从而得到一个增广的目标函数。对于上述问题,其拉格朗日函数 定义为:
其中, 称为第 个不等式约束对应的拉格朗日乘子, 称为第 个等式约束对应的拉格朗日乘子。向量 和 合称为拉格朗日乘子向量。
为什么这样构造? 拉格朗日函数可以类比于机器学习中的 “损失+惩罚” 框架。考虑一个线性回归问题,为了防止过拟合,我们会在损失函数(如残差平方和)后加上一个正则化项(如系数的范数)。拉格朗日函数中的 和 就扮演了“惩罚项”的角色:
- 对于不等式约束 ,如果我们要求 ,那么当 (违反约束)时,惩罚项 为正,会“抬高” 的值,使得它在最小化过程中不受欢迎。只有当 时,惩罚项非正,才有助于降低函数值。
- 对于等式约束 ,当 时,惩罚项 不为零,同样会阻碍 取到极小值。
因此,通过引入拉格朗日乘子,我们将一个有约束的优化问题转化为了一个关于 的无约束问题(尽管 通常有非负要求)。这种思想是后续对偶理论和KKT条件的基础。
拉格朗日对偶函数
在拉格朗日函数的基础上,我们定义拉格朗日对偶函数(简称对偶函数) 为拉格朗日函数关于原始变量 的逐点下确界:
如果 关于 无下界,则定义 。
对偶函数的重要性质:
- 凹性:对偶函数 总是凹函数,即使原问题不是凸优化问题。这是因为 是一族关于 的仿射函数的逐点下确界,而仿射函数的逐点下确界是凹函数。
- 下界性质:对于任意 (即 )和任意 ,对偶函数给出了原问题最优值 的一个下界,即: 证明:设 是原问题的一个可行点(即满足所有约束),且 。由于 ,,我们有: 因此, 由于 是 关于 的下确界,且 ,故: 上式对任意可行点 都成立,自然对最优解也成立,所以 。
这个下界性质类似于数学分析中的夹逼准则:如果我们能找到越来越紧的下界,就有可能逼近甚至得到原问题的最优解。
示例:标准形式线性规划的对偶函数
考虑标准形式的线性规划问题: 为了写成标准形式,我们将不等式约束 改写为 。引入拉格朗日乘子 (对应等式约束)和 (对应不等式约束 ),拉格朗日函数为: 对偶函数 。这是一个关于 的线性函数,其下确界为:
- 如果 ,则 。
- 如果 ,则 。
因此,该线性规划的对偶函数为:
拉格朗日对偶问题
既然对偶函数 给出了原问题最优值 的一个下界,一个自然的问题是:所有下界中最好的(即最大的)下界是什么? 这引出了拉格朗日对偶问题:
这是一个以拉格朗日乘子 为优化变量的优化问题。我们称原始问题为原问题,上述问题为原问题的对偶问题。
对偶问题的重要性质:
- 凸性:由于对偶函数 是凹函数,且约束 是凸的,因此对偶问题总是一个凸优化问题(最大化凹函数等价于最小化凸函数)。这一性质与原始问题是否为凸无关,为求解非凸问题提供了一条可能的途径。
- 最优值与最优解:对偶问题的最优值记为 。使得 达到最大值 的乘子 称为最优拉格朗日乘子。
示例:标准形式线性规划的对偶问题
基于前面求得的对偶函数 ,其线性规划的对偶问题为: 由于当 时 ,我们只关心 有有限值的情况,即 。此时 。因此,对偶问题等价于: 由等式约束得 ,结合 ,等价于 。同时,将目标函数改为最小化 (最大化 等价于最小化 ),我们得到线性规划对偶问题的标准形式: 变量为 。注意,原问题的变量个数 对应了对偶问题中不等式约束的个数,而原问题的等式约束个数 对应了对偶问题的变量维度。当原问题约束很多( 很大)而变量相对较少时,求解其对偶问题(变量少,约束多)可能在计算上更高效。
弱对偶与强对偶
根据对偶函数的下界性质,我们可以立即得到一个重要的不等式关系,称为弱对偶性:
即对偶问题的最优值 不超过原问题的最优值 。差值 称为对偶间隙。弱对偶性总是成立,即使原问题非凸。
一个更理想的情况是强对偶性,即对偶间隙为零:
强对偶性意味着我们可以通过求解(通常更简单的)对偶问题来获得原问题的最优值。然而,强对偶性并非总是成立。
强对偶性成立的充分条件(对于凸问题): 如果原问题是凸优化问题,即:
- 是凸函数。
- 是仿射函数(即 )。 并且满足某些约束准则,则强对偶性成立。
一个常用且简单的约束准则是 Slater条件:
存在一个严格可行点 ,使得: 其中 表示定义域 的相对内部。
Slater条件要求不等式约束被严格满足(取 < 0 而非 ≤ 0)。如果部分不等式约束 是仿射函数,条件可以放宽为改进的Slater条件:对于仿射不等式约束,只要求 ;对于非线性凸不等式约束,仍要求 。
总结:对于一个凸优化问题,如果存在一个(改进的)Slater点,则强对偶性成立。这为许多实际问题(如线性规划、二次规划等)中通过求解对偶问题来获取原问题解提供了理论保证。
📝 动手练一练
构造拉格朗日函数:考虑以下优化问题: 请将其不等式约束改写为“≤ 0”的标准形式,并写出对应的拉格朗日函数 。
验证弱对偶性(数值实验):对于问题1,假设我们取一组拉格朗日乘子 (请确保符号正确)。编写Python代码,通过数值优化(如
scipy.optimize.minimize)近似计算该乘子下的对偶函数值 。再通过几何观察或求解KKT条件(如果已学)找出原问题的最优值 的近似值。验证是否满足 。
参考答案:
改写约束:;。 拉格朗日函数:,其中 。
以下Python代码演示了如何数值计算对偶函数值:
import numpy as np from scipy.optimize import minimize # 定义拉格朗日函数 L(x, lambda) def lagrangian(x, lambda_vec): # 不等式约束: -x1 - x2 + 1 <= 0, -x1 <= 0 f1 = -x[0] - x[1] + 1 f2 = -x[0] # 目标函数 + 惩罚项 return x[0]**2 + x[1]**2 + lambda_vec[0]*f1 + lambda_vec[1]*f2 # 给定拉格朗日乘子 lambda_val = np.array([0.5, 0.3]) # 通过优化求解 inf_x L(x, lambda) # 初始点 x0 = np.array([0.5, 0.5]) # 使用无约束优化方法寻找使L最小的x res = minimize(lambda x: lagrangian(x, lambda_val), x0, method='BFGS') x_opt = res.x g_lambda = res.fun # 这就是近似的 g(lambda) print(f"对于 lambda = {lambda_val}:") print(f" 使得 L 最小的 x ≈ {x_opt}") print(f" 对偶函数值 g(lambda) ≈ {g_lambda:.6f}") # 原问题的最优解可以通过解析或观察得到:在约束 x1+x2>=1 和 x1>=0 下最小化 x1^2+x2^2 # 几何上,这是圆到半平面的距离,最优解在点(0.5, 0.5),最优值 p* = 0.5 p_star = 0.5 print(f"\n原问题最优值 p* = {p_star}") print(f"验证弱对偶性: g(lambda) = {g_lambda:.6f} <= p* = {p_star} ? {g_lambda <= p_star + 1e-6}")运行上述代码,你将看到计算出的 确实小于等于 ,验证了弱对偶性。
本章小结
本节我们深入探讨了对偶理论的起点,为理解如何通过“另一面”来求解优化问题奠定了基础。
要点回顾:
- 拉格朗日函数 将有约束问题转化为无约束形式,其惩罚项思想与正则化相通。
- 拉格朗日对偶函数 是 关于 的极小值,它总是凹函数,并提供了原问题最优值 的下界。
- 拉格朗日对偶问题 旨在最大化 (约束 ),它总是一个凸优化问题,这为求解非凸原问题提供了可能路径。
- 弱对偶性 恒成立;强对偶性 在凸问题且满足Slater条件时成立,此时对偶问题的最优解能揭示原问题的最优解。
行动清单:
- 动手推导:任选一个简单的带约束优化问题(如本节练习题),完整写出其拉格朗日函数、对偶函数,并尝试表述其对偶问题。
- 代码验证:使用Python的优化库(如SciPy)数值计算给定乘子下的对偶函数值,并与原问题最优值比较,直观感受弱对偶性。
- 联想对比:思考拉格朗日函数中的“损失+惩罚”框架与你所知的机器学习正则化方法(如Lasso、Ridge回归)之间的联系,加深对乘子 作为“惩罚权重”的理解。
掌握了对偶问题的基本构造和性质,我们将在下一节探讨如何从对偶解恢复原问题解的关键——KKT最优性条件,并看到对偶理论在支持向量机等经典算法中的直接应用。
— 小象教研组
领取《小象 11GB VIP 课件资料包与大厂真题手册》
包含全套实战 Jupyter 源码、清洗后数据集、大厂高频面试真题与专属学员答疑交流群。
- ✔完整 Python / 数据分析 Jupyter 实战源码
- ✔大厂真实业务数据集与练习题
- ✔微信扫码添加课程顾问,免费获取网盘下载链接
微信扫码添加顾问