📑 查看全课大纲(第 88 / 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.对偶问题(二)
无约束优化
约 27 分钟
约束最优化:KKT条件与对偶问题
小象实战讲义 · 人工智能数学基础
在机器学习的模型训练中,我们常常需要在满足特定条件(如模型参数范围、数据分布假设)下寻找最优解,这就是约束最优化问题。本节将介绍处理这类问题的两大核心理论工具:KKT条件与对偶问题。KKT条件为约束最优化问题提供了一阶必要条件,是理论分析和算法推导的基石;而对偶问题则为我们提供了从另一个角度求解原问题的思路,有时能显著简化计算。掌握这两者,你将能深入理解支持向量机(SVM)等经典算法的理论基础,并具备分析更复杂约束优化模型的能力。
💡 核心导读
- 约束优化标准形式:理解带等式与不等式约束的最小化问题的一般表述。
- KKT条件:掌握约束最优化问题的一阶必要条件,特别是互补松弛条件的深刻含义。
- 拉格朗日乘子的意义:从灵敏度分析角度,理解乘子如何量化约束条件对最优解的影响。
- 对偶问题:学习如何从原问题构造对偶问题,并理解其对偶性在简化求解中的应用。
- 线性规划对偶:通过线性规划这一经典案例,掌握对偶问题的推导过程。
约束最优化问题概述
在无约束优化中,我们直接最小化目标函数 。然而,实际问题中变量 往往需要满足一系列条件,例如物理定律、资源限制或模型假设。这就引出了约束最优化问题。其标准形式如下:
其中: 是目标函数; 是约束函数; 和 分别是等式约束和不等式约束的指标集;我们要求 和所有 是光滑的(至少一阶连续可导)。
几点说明:若原问题是 ,等价于求解 ;标准形式约定不等式为””,遇到””的约束两边乘以 即可转换;所有满足约束的点构成的集合称为可行域 ,优化就是在 中寻找使 最小的点。与无约束优化相比,搜索空间从整个 缩小到了 ,这给求解带来了额外的复杂性。
KKT条件:约束最优解的一阶必要条件
为了系统性地分析约束优化问题,我们首先引入两个关键概念。
激活集:在可行点 处,所有等式约束以及那些取等号(即 )的不等式约束,被称为在 处是激活的。这些约束的指标构成的集合称为激活集 。激活的约束意味着该约束在 点”紧贴”着可行域的边界。
LICQ条件:线性无关约束规范。假设 是一个可行点,且其激活集为 )。如果所有激活约束函数在 处的梯度向量 ) \mid i \in \mathcal{A}(x^)} 是线性无关的,则称在 处 LICQ 条件成立。这保证了在最优解附近,没有”多余”的约束,所有激活的约束都是独立起作用的。
基于上述准备,我们定义约束优化问题的拉格朗日函数:
其中 称为拉格朗日乘子。注意,对于不等式约束,我们采用了”减号”的形式,这与我们””的标准形式相匹配。有些文献采用””的标准形式,此时拉格朗日函数为 ,本质等价。
现在,我们可以陈述著名的 Karush-Kuhn-Tucker (KKT) 条件。
定理 (KKT条件):设 是约束优化问题的一个局部最优解,且 和所有 在 处连续可微。如果在 处 LICQ 条件成立,则存在唯一的拉格朗日乘子向量 ,使得以下条件成立:
- 平稳性: , \lambda^) = \nabla f(x^) - \sum_{i \in \mathcal{E} \cup \mathcal{I}} \lambda_i^ \nabla c_i(x^*) = 0
- 原始可行性: ) = 0, \quad \forall i \in \mathcal{E}; \qquad c_i(x^) \ge 0, \quad \forall i \in \mathcal{I}
- 对偶可行性:
- 互补松弛性:
互补松弛性是 KKT 条件的精髓。它表明,对于每个不等式约束,要么其乘子 (该约束不激活,对最优解无直接影响),要么约束取等号 (该约束激活,在边界上)。换言之,激活的约束其乘子可能非零,非激活的约束其乘子必为零。
实例验证与几何解释
考虑一个简单问题: 可行域是以 、、 为顶点的三角形(约束 只在顶点 处取等)。目标函数度量的是到点 的距离平方,而 本身不可行(不满足 )。 到斜边 的投影恰好落在顶点 上,距离平方为 ,小于其余顶点的 和 。因此最优解为 。
在该点:
- 约束 ()、()、()取等号,为激活约束;()未取等,为非激活约束。
- 激活集为 ) = {2, 3, 4}。根据互补松弛性,= 0。
代入平稳性条件 ) = \sum_i \lambda_i^ \nabla c_i(x^*)。计算各梯度:
- ,,,
由互补松弛性 ,代入两个分量方程:
- 第 1 分量:
- 第 2 分量:
结合全部乘子非负的要求,解得唯一解 。验证: 与 均成立,且 ,互补松弛性也满足()。这验证了 KKT 条件。
值得注意的是, 处有 3 个激活约束,而问题只有 2 个变量,3 个梯度向量在 中必然线性相关,故 LICQ 在该点不成立。但此例中满足全部 KKT 条件的非负乘子依然存在且唯一—LICQ 是乘子存在且唯一的充分条件,并非必要条件。
下面的 Python 代码演示了如何利用符号计算验证最优解 及其乘子 满足全部 KKT 条件。
import sympy as sp
# 定义符号变量
x1, x2, lam1, lam2, lam3, lam4 = sp.symbols('x1 x2 lam1 lam2 lam3 lam4', real=True)
# 目标函数与约束函数(标准形式 c_i(x) >= 0)
f = (x1 - 2)**2 + (x2 - 1)**2
c1 = x1 # x1 >= 0
c2 = x2 # x2 >= 0
c3 = 1 - x1 - x2 # 1 - x1 - x2 >= 0
c4 = 1 - x1 + x2 # 1 - x1 + x2 >= 0
# 构建拉格朗日函数 L = f - sum(lambda_i * c_i)
L = f - (lam1*c1 + lam2*c2 + lam3*c3 + lam4*c4)
# 已知最优解 x* = (1, 0),乘子 λ* = (0, 0, 2, 0)
x_star = [1, 0]
lam_star = [0, 0, 2, 0]
subs_dict = {x1: x_star[0], x2: x_star[1],
lam1: lam_star[0], lam2: lam_star[1],
lam3: lam_star[2], lam4: lam_star[3]}
# 1. 验证平稳性条件: ∇_x L(x*, λ*) = 0
grad_x1 = sp.diff(L, x1).subs(subs_dict)
grad_x2 = sp.diff(L, x2).subs(subs_dict)
print("平稳性条件验证:")
print(f"∂L/∂x1 at (x*, λ*) = {grad_x1}")
print(f"∂L/∂x2 at (x*, λ*) = {grad_x2}")
# 2. 验证原始可行性
print("\n原始可行性验证:")
for i, c in enumerate([c1, c2, c3, c4], start=1):
val = c.subs({x1: x_star[0], x2: x_star[1]})
print(f"c{i}(x*) = {val} >= 0 : {val >= 0}")
# 3. 验证对偶可行性 (λ_i >= 0)
print("\n对偶可行性验证:")
for i, lam_val in enumerate(lam_star, start=1):
print(f"λ_{i}* = {lam_val} >= 0 : {lam_val >= 0}")
# 4. 验证互补松弛性 (λ_i * c_i(x*) = 0)
print("\n互补松弛性验证:")
for i, (lam_val, c) in enumerate(zip(lam_star, [c1, c2, c3, c4]), start=1):
val = c.subs({x1: x_star[0], x2: x_star[1]})
product = lam_val * val
print(f"λ_{i}* * c_{i}(x*) = {lam_val} * {val} = {product} == 0 : {sp.simplify(product) == 0}")拉格朗日乘子的意义:灵敏度分析
拉格朗日乘子 不仅仅是引入的辅助变量,它具有深刻的物理和经济学意义:**它衡量了对应约束”收紧”或”放松”时,最优目标值 ) 的变化灵敏度**。
考虑一个扰动问题:将第 个不等式约束从 改为 。 意味着约束收紧(可行域变小), 意味着约束放松(可行域变大)。设新问题的最优值为 。可以证明,在一定的正则性条件下,最优值关于扰动的一阶变化率为:
(\delta)}{d\delta} \bigg|_{\delta=0} \approx \lambda_i^
解释:
- 如果 ,收紧该约束()会使最优值上升约 ;反过来,放松该约束()会使最优值下降约 。 越大,意味着该约束在原最优解处”绑得越紧”,扰动它对最优值的影响越大。
- 如果 ,说明该约束在原最优解处是非激活的,微小的扰动不会改变最优值。
- 对于等式约束,乘子 可正可负,其绝对值大小同样反映了该约束对最优值的”限制力”强度。
因此,拉格朗日乘子提供了关于问题结构的重要信息:哪些约束是关键的(大乘子),哪些是松弛的(零乘子)。这在资源分配、经济学边际分析等领域有直接应用。
对偶问题:另一个视角的优化
对于原约束优化问题(称为原始问题),我们可以构造一个与之紧密关联的对偶问题。对偶理论在最优化中极为重要,它提供了原问题最优值的下界,有时还能提供更易求解的途径。
考虑一个只有不等式约束的简化原始问题 :
其中 。其拉格朗日函数为 , 。
对偶函数 定义为拉格朗日函数关于原始变量 的下确界:
注意, 是 的函数,它可能取 。我们定义对偶函数的有效定义域为那些使得 的 的集合。对偶问题 则是最大化这个对偶函数:
对偶问题的性质:
- 弱对偶性:对于任意可行 (满足 )和任意 ,有 。进而,对偶问题的最优值 不超过原始问题的最优值 ,即 。
- 强对偶性:在某些条件下(如 Slater 条件:存在严格可行点 ,且问题是凸的),有 ,且对偶问题的最优解 就是原始问题最优解处的 KKT 乘子。
- 求解意义:即使原问题非凸,对偶函数 总是关于 的凹函数(因为是一族仿射函数的下确界),最大化凹函数相对容易。有时,对偶问题的形式比原问题简单得多(例如维度降低、约束简化)。
对偶问题求解示例
考虑问题:
- 拉格朗日函数:, 。
- 对偶函数:。对 求偏导并令为零: 代入得 。
- 对偶问题:。 这是一个关于 的凹二次函数,求导得 。最大值为 。
- 恢复原始解:将 代回 ,得到原始最优解 。原始最优值 ,与对偶最优值相等,强对偶成立。
线性规划的对偶
线性规划是约束优化中最重要的特例之一,其对偶形式非常规整且应用广泛。考虑标准形式的线性规划原始问题 :
其中 , , 。其拉格朗日函数为(将 也纳入拉格朗日函数,记其乘子为 ):
对偶函数 。由于 已经由乘子 处理,这里的 在整个 上取。线性函数在 上的下确界只有两种情况:系数全为零时等于常数项 ,否则为 。因此,要使 ,必须要求
且此时 。再利用 消去 : 等价于 。
因此,线性规划的对偶问题 为:
这是一个形式非常对称的对偶问题:原始是”, s.t. ”,对偶是”, s.t. ”。变量和约束的角色发生了互换。
📝 动手练一练
KKT条件验证:考虑优化问题 a) 写出其拉格朗日函数。 b) 求解该问题的最优解 和对应的拉格朗日乘子 。 c) 验证解 , \lambda^) 满足 KKT 条件。 d) 若将约束改为 ( 很小),利用 估计最优值 的变化。
参考答案: a) , . b) 直观上,无约束最优解为 ,但不满足约束。约束最优解应在边界 上取得。验证:若 =1,则 = 2,。由平稳性 ,得 。互补松弛 (x^-1)=0 成立。故 =1, \lambda^=2. c) 平稳性:1 - 21=0;原始可行:;对偶可行:;互补松弛:。全部满足。 d) 原最优值 。新约束 (收紧约束),最优解 ,新最优值 。变化量 。根据灵敏度分析,变化率约为 的系数恰好是 (因为 )。乘子 反映了约束右端项每增加1单位(收紧)时,最优目标值的增量,即约束变化对最优值影响的灵敏度。
构造对偶问题:对于只有不等式约束的凸优化问题 其中 , , 。试写出其对偶问题。
参考答案: 拉格朗日函数:, . 对偶函数 。对 求梯度:,其中 是以 为列的矩阵。 代入得 . 对偶问题:,这是一个关于 的凹二次规划。
本章小结
本节深入探讨了约束最优化中的两个核心概念:KKT条件与对偶问题。
- KKT条件是约束局部最优解必须满足的一阶必要条件,包含平稳性、原始可行性、对偶可行性和互补松弛性四个部分。互补松弛性揭示了最优解处约束的激活状态与乘子取值的紧密关系。
- 拉格朗日乘子具有明确的灵敏度意义,量化了约束条件变化对最优目标值的影响程度。
- 对偶问题通过拉格朗日函数构造,提供了求解原问题的另一个视角。在凸优化且满足约束规范时,强对偶性成立,对偶问题的最优解能恢复原始最优解。线性规划的对偶形式具有优美的对称性。
行动清单:
- 推导练习:任选一个简单的带不等式约束的优化问题(如本节练习题),手动推导其 KKT 条件并求解。
- 代码验证:使用 Python 的
sympy或cvxopt库,验证一个线性规划问题的原始解与对偶解,并比较它们的目标值。 - 建立联系:回顾机器学习中 SVM 的基本型,尝试写出其拉格朗日函数,并思考其对偶问题在支持向量机算法中的作用(为下一节学习做准备)。
— 小象教研组
- 第11章讲义(含板书):最优化(PDF · 4.3MB)下载
领取《小象 11GB VIP 课件资料包与大厂真题手册》
包含全套实战 Jupyter 源码、清洗后数据集、大厂高频面试真题与专属学员答疑交流群。
- ✔完整 Python / 数据分析 Jupyter 实战源码
- ✔大厂真实业务数据集与练习题
- ✔微信扫码添加课程顾问,免费获取网盘下载链接
微信扫码添加顾问