佳佳盘下了一家奶茶店。她的梦想朴素得可爱:在保证每杯“好喝又合规”的前提下,把材料成本压到最低。可卫生标准、营养标签、出品温度……十几条规矩像绳子一样捆住她的手。她整天围着配方表打转,却只算得出“这杯更便宜,但糖超了”。 直到总部派来一位“定价官”阿强。阿强不碰配方,他的方法是:给每一条规矩贴上一个“违约罚款单价”。糖超标一克罚两毛,热量超一卡罚一分——然后他问佳佳:如果按这份罚款单算,你愿意把成本压到多低?佳佳埋头算了一会儿,报出一个数。阿强再调单价,再问,再算……一来二去,两人发现了一个奇妙的规律:阿强能逼出的“保证成本”,永远不会超过佳佳老老实实算出的“最低成本”,而在某些条件下,这两个数恰好相等。 从佳佳“压成本”的视角看问题,叫原问题;从阿强“设罚款、算保证值”的视角看,就是对偶问题。这两个视角看似两本账,讲的却是同一件事。这个“恰好相等”的奇迹,就是强对偶;而 S V M、分布式优化这些 AI 硬通货,全都站在它的肩膀上。
对偶是凸优化的“上帝视角”:理解它,你才能看懂 SVM 推导、读懂优化算法的下界论证,并在工程里自如地拆分与定价——这是从“会算题”迈向“会设计算法”的关键一跃。
目录
可视化演示
动态演示凸优化对偶的核心机制,通过开始/执行/监控/完成四种模式展示关键概念与交互流程。
本节配有交互动效(进入视口后自动加载,约 3KB)。
凸优化对偶:一拉格朗 一、拉格朗日对偶函数的构造与性 二、拉格朗日对偶问题的标准形式 核心机制可视化 凸优化对偶整体架构与关键组件
1. 优化问题回顾:一杯奶茶的成本账
佳佳的奶茶店每天要出几百杯茶。她把每种原材料的用量记成一个向量 x:茶底多少克、牛奶多少毫升、糖浆多少泵。这些数字拼在一起,决定了这杯奶茶的材料成本 f₀(x)。但单图便宜可不行——总部的品控手册规定:糖含量不能超过 50 克(一条“上限”约束),净含量必须恰好 500 毫升(一条“等式”约束)。佳佳要做的,就是在一堆配方里找出“满足所有规矩且成本最低”的那一个。
这个场景被数学家抽象成了标准的约束优化问题:有决策变量 x,有想最小化的目标函数 f₀(x),还有一群“必须满足”的条件。把“糖不超过 50 克”写成 f₁(x) = 糖含量 − 50 ≤ 0,把“净含量恰好 500 毫升”写成 h₁(x) = 净含量 − 500 = 0。所有满足条件的 x 构成可行域 D,就像贴着“品控合格证”的配方清单,而所有可行配方里最低的那个成本,记作最优值 p*。
1. 决策变量向量 x:这是我们可以拧动的所有旋钮,比如每款配料的用量,一个 n 维向量。
2. 目标函数 f₀(x):想压到最低的指标,比如每杯奶茶的材料成本,单位是元。
3. 不等式约束 fᵢ(x) ≤ 0:只许低于上限的质量标准,糖含量减去上限后必须为负或零。
4. 等式约束 hⱼ(x) = 0:必须分毫不差的硬指标,比如净含量减 500 毫升必须正好为零。
佳佳能做的,只是在自己的配方表里翻来覆去地比较。她并不知道:在这个问题上方,还有一个“上帝视角”在等着她——如果有人给这些规矩标上价格,故事会完全不一样。
2. 拉格朗日函数:给约束贴上价格标签
这天,总部质检顾问阿强走进佳佳的店里,掏出一份《品控违约价目表》:糖含量每超 1 克,罚款 λ₁ 元;热量每超 1 卡,罚款 λ₂ 元;净含量偏差每 1 毫升,罚款 ν₁ 元……阿强宣布:从今天起,佳佳不必死守标准,只要“成本 + 罚款”最低就行。佳佳眼前一亮——这等于把冷冰冰的禁令,变成了可以讨价还价的软约束。
这正是拉格朗日乘子法的精髓:把“必须满足 fᵢ(x) ≤ 0”的硬规矩,改写成“违规就按单价 λᵢ 交罚款”的软成本。罚款单价 λᵢ 有个重要规定:必须非负。道理很简单——如果糖超标还能倒拿奖励,那罚款单就变成了鼓励违规的奖金单,整个约束体系瞬间崩塌。至于等式约束的乘子 νⱼ,由于偏差可正可负,它就可以是任意实数。
1. 拉格朗日乘子 λᵢ:为第 i 条不等式质量标准定的“罚款单价”,必须非负,这是奖优罚劣的底线。
2. 罚款项 Σλᵢfᵢ(x):违规量乘以单价。标准被满足时 fᵢ(x) ≤ 0,这项是零或负贡献,所以 λ 非负才不至于奖励违规。
3. 等式项 Σνⱼhⱼ(x):等式约束的偏离可正可负,因此乘子 νⱼ 不受符号限制,可以是全体实数。
阿强把价目表贴在墙上,然后说了一句关键的话:“佳佳,你按这个规矩重新算一遍最低总付出吧。”佳佳一算,问题简单多了——原来的硬约束全不见了,只剩一个无约束的极小化。这个“给定价目表后的最小总付出”,就是下一个小节的明星:对偶函数。
3. 对偶函数:给定价格后的最小总付出
佳佳发现,有了罚款单之后,她甚至可以不理会原始标准:只要某款配方的“成本 + 罚款”最低,它就胜出。比如糖超一点、罚款才两毛,但能省下三块钱的原料费,她会毫不犹豫地选择超糖。对每一份固定的价目表 (λ, ν),佳佳都会选出一个最小总付出,这个值记为 g(λ, ν),它就是对偶函数。
代数上,这就是拉格朗日函数对所有可能配方 x 取下确界(最大的下界,记作 inf)。注意:这个“下确界”是在全空间里找的,允许配方闯入原来被禁止的可行域之外——因为在软罚款模式下,那里只是“贵了一点”而已。奇妙的是,即使原问题不是凸的,g 也永远是一个凹函数:对固定的 x,拉格朗日是关于 (λ, ν) 的线性函数,而一族线性函数的逐点下确界必然是凹的。
1. 下确界 inf:在所有配方 x 中寻找“成本 + 罚款”的最小值,允许进入原问题的不可行区域。
2. 凹函数性质:对每个固定的 x,L 是 (λ, ν) 的线性函数;线性函数族逐点取 inf 后必为凹函数。
3. 对偶可行域:使 g(λ, ν) 大于负无穷的 (λ, ν) 集合,才是有意义的价目表。
阿强看着佳佳报出的一个个数字,心里打起了算盘:既然给定罚款单能“逼”出一个保证成本,那我为什么不把罚款单价调高,让这个保证值尽量大呢?只要保证值够高,就相当于用价格杠杆倒逼所有门店把品质做上去——这正是对偶问题的雏形。
4. 对偶问题:稽查员的反向博弈
阿强开始玩他的反向博弈:他不是在配方案,而是在定罚款单价。他的目标很明确——选一份价目表 (λ, ν),让佳佳无论怎么闪转腾挪,报出的“最小总付出”都尽可能高。用数学语言说,阿强在求解一个极大化问题:在 λ ≥ 0 的约束下,最大化对偶函数 g(λ, ν)。这个极大化问题就是对偶问题,它的最优值记作 d*。
这个对偶问题有个让人拍案叫绝的性质:它永远是一个凸优化问题!无论原问题多么“野蛮”(非凸、不可导),对偶函数 g 始终是凹的,凹函数求最大化就是凸问题。这意味着对偶问题没有“局部最优陷阱”——阿强总能找到全局最优的价目表。这就像佳佳的配方世界再乱,阿强手里那本价目表的算术世界始终是井井有条的。
1. 极大化操作:定价官在满足非负条件的价目表里,挑选保证值最大的那一份。
2. 非负约束 λ ⪰ 0:所有不等式约束的罚款单价不得为负,保证不会奖励违规。
3. 对偶最优值 d*:对偶问题能达到的最大目标值,也是阿强能给出的最高保证成本。
现在,账本有两本了:佳佳的原问题算出了 p*,阿强的对偶问题算出了 d*。两人坐在一起对账——这个对账结果,就是优化理论里最优雅的定理之一:弱对偶与强对偶。
5. 弱对偶与强对偶:两份账何时对得上
对账开始了。阿强得意地说:“我这份价目表能保证每个店至少付出 d*。”佳佳不服:“我精打细算的真实最低成本是 p*。”谁说得对?答案是:阿强的保证值永远不可能超过佳佳的真实成本,即 d* ≤ p*。这就是弱对偶定理。证明只用一个观察:任何一个满足原始标准的可行配方,都不会触发任何罚款(因为 fᵢ(x) ≤ 0 且 λᵢ ≥ 0),所以它的“成本 + 罚款”不超过它的真实成本;取遍所有可行配方和对偶可行点,自然得到 d* ≤ p*。
弱对偶的威力在于:它不需要任何凸性假设,对一切优化问题成立。哪怕原问题难到爆炸,只要随手找一份对偶可行解,就能立刻得到一个下界——这是很多算法用来判断“离最优还有多远”的尺子。但 d* 和 p* 之间的差值(对偶间隙)能否归零,就要看强对偶的脸色了。对凸问题,只要满足 Slater 条件——存在一个让所有不等式约束都严格留有余量的可行点,比如佳佳手里有一款“糖含量明显低于上限”的配方——就一定有 d* = p*,两本账严丝合缝。
1. 对偶最优值 d*:定价官能榨出的最高保证成本。
2. 原问题最优值 p*:佳佳满足全部标准时的最低真实成本。
3. 不等号 ≤ 的含义:可行配方不触发罚款,所以对任意可行 x 有 g(λ,ν) ≤ f₀(x),取极值后即弱对偶。
1. 严格可行点:至少有一款配方把每条不等式标准都留出严格余量,这是 Slater 条件的核心。
2. 凸性与强对偶:目标与约束均为凸函数且 Slater 成立时,对偶间隙为零。
当两本账完全对齐时,佳佳和阿强之间就形成了一份“合作协议”。这份协议的具体条款,就是大名鼎鼎的 KKT 条件。
6. KKT条件:合作协议生效的四个条款
强对偶成立时,佳佳和阿强不再是讨价还价的对手,而是达成了默契。这份默契可以拆成四条同时成立的条款:平稳性——佳佳的配方 x* 处,任何微调都无法再压低“成本 + 罚款”,梯度必须相互抵消;原始可行性——x* 毕竟还是要满足原始标准的;对偶可行性——罚款单价必须非负;互补松弛——最精彩的一条:如果某条标准在最优处根本没有卡到边界(比如糖含量远低于上限),那它的罚款单价必须为零,因为没人会为一条“从不越界”的规矩付钱。
互补松弛用一句话概括就是“便宜的规矩没人定价,卡脖子的规矩才有价格”。它把约束分成了两类:紧贴边界的活跃约束(fᵢ(x*) = 0),以及松松垮垮的非活跃约束(fᵢ(x*) < 0,必有 λᵢ* = 0)。这条性质在机器学习里孕育出了“支持向量”这个概念——我们很快就会看到。
1. 平稳性:在 x* 处,目标函数与所有约束的梯度加权和恰为零,任何方向微调都无法改进。
2. 梯度抵消:f₀ 的梯度被乘子加权的约束梯度精确抵消。
1. 互补松弛等式:罚款单价与违规量的乘积必为零,二者至少有一个取零。
2. 两种互斥情形:约束卡在边界时 fᵢ(x*) = 0;约束宽松时则单价 λᵢ* = 0。
在凸问题 + Slater 条件下,KKT 条件是充要的:只要找到一组 (x*, λ, ν) 满足这四条,就一定是原问题和对偶问题的最优解。这给了工程上一个绝妙的解题套路——把优化问题变成解方程组。下面就用这个套路,去推 SVM。
7. 对偶与SVM:奶茶店学过的东西如何分类
场景切换:佳佳的店开始进货,供应商送来一批批原料。每种原料有两个指标(甜度、纯度),质检员阿强需要画一条分界线,把“合格”和“不合格”两类原料分开。为了安全,他不想只画一条分界线,而是想画一条“隔离带”——在两类原料之间留出尽可能宽的空白地带。这条隔离带的半宽,叫做间隔;间隔越大,未来新原料被误判的风险越小。
SVM(支持向量机)就是把“最大间隔”写成优化问题:找权重 w 和偏置 b,使分类函数 wx + b 的符号与标签一致,同时最小化 ½‖w‖²(它等价于最大化间隔 2/‖w‖)。每个样本的约束是 yᵢ(wᵀxᵢ + b) ≥ 1,即每个点都要在正确一侧并留出一单位余量。这样一个带约束的凸问题,正好可以被我们前面学过的拉格朗日对偶机制接管。
1. 目标 ½‖w‖²:最小化权重范数的平方,等价于最大化分类间隔,是 SVM 的“安全缓冲带”。
2. 间隔约束:每个样本必须落在正确一侧,且到分界面的函数距离至少为 1。
把约束改写成标准形式 1 − yᵢ(wᵀxᵢ + b) ≤ 0 后,构造拉格朗日并令其对 w、b 的梯度为零(平稳性),会得到两个漂亮的结论:w = Σαᵢyᵢxᵢ,以及 Σαᵢyᵢ = 0。把它们代回拉格朗日,w 和 b 就消失了,只剩下关于 α 的对偶问题——目标函数里所有的 x 都以内积 xᵢᵀxⱼ 的形式出现,这就是核技巧的入口。
1. 非负约束 αᵢ ≥ 0:每个样本对应一个对偶变量,它本质是“该样本罚款单价”的化身。
2. 内积 xᵢᵀxⱼ:对偶目标只依赖样本成对的内积,这是把线性 SVM 升级成核 SVM 的钥匙。
3. 等式约束 Σαᵢyᵢ = 0:来自对偏置 b 取平稳性,是拉格朗日求导后自然浮现的条件。
互补松弛在这里大放异彩:αᵢ > 0 的样本,恰好是那些约束卡在边界(yᵢ(wᵀxᵢ+b) = 1)上的点——它们被称为支持向量。大多数样本的 αᵢ 都是零,模型天然稀疏。对偶的视角,让 SVM 从一个笨重的约束优化,变成了一个轻盈的“只跟少数边界点打交道”的内积游戏。
8. 对偶应用:从账本到算法工具箱
佳佳和阿强渐渐发现,这套“换视角”的功夫不只是奶茶店和 SVM 的专利。对偶理论像一个通用工具箱,凡是遇到“约束太多、问题太难、数据太散”的场合,都能掏出相应的家伙。
第一件工具是下界与停机判据:弱对偶保证任何对偶可行点都给出原最优值的下界,分支定界、全局优化算法用它判断“当前解离最优还有多远,能不能提前收工”;第二件工具是灵敏度分析:对偶最优值 λ 就是约束的“影子价格”,预算增加一块钱能让目标改善多少,答案就在 λ 里;第三件工具是分布式优化:当全局问题被一条耦合约束拴住时,固定 λ 后每个子问题都可以独立求解,再把各自的梯度汇聚起来更新 λ——这正是联邦学习等场景的数学底座。
举个分布式优化的标准例子:总目标是 K 个模块的成本之和,唯一把它们绑在一起的是共享资源上限 b。对这条耦合约束引入乘子 λ 后,每个模块只需独立求解自己的“本地成本 + λ 分摊的资源费”,完全不需要看到别人的数据。
1. 可分目标:总目标拆成 K 个互不相关的子块,每个子块只管自己的局部变量。
2. 耦合约束:唯一把子块绑在一起的是共享资源上限 b,对应“总预算不能超”。
3. 对偶分解:给定 λ 后,每个子问题独立求解,再通过更新 λ 协调全局。
佳佳最后总结道:“原来我一直在配方表里打转,而阿强站在价格表的高度看同一个问题。”对偶理论最好的礼物,就是教会我们:当一个视角算不下去时,换一个视角,有时不仅更简单,还能给出原来看不见的边界与价格。
AI 应用场景
场景 1:SVM 训练中的对偶求解
阶段:模型训练与优化
解决的问题:原始 SVM 要直接在 w、b 上求解带约束的二次规划,特征维度一高(比如文本 TF-IDF 向量几万维)就非常吃力。转为对偶问题后,待求变量变成每个样本一个的 αᵢ,目标里只出现样本内积 xᵢᵀxⱼ,于是可以无缝接上核技巧,把线性分类器升级成非线性分类器;同时互补松弛告诉我们 αᵢ > 0 的只有边界上的少数样本,模型天然稀疏、推理极快。
具体案例:某风控团队用 SVM 识别欺诈交易,原始特征 2 万维。直接解原问题要维护 2 万维的 w 且无法用核;转对偶后用 RBF 核,仅需保存几千个支持向量,推理时也只计算与支持向量的内积,线上延迟从 8ms 降到 0.5ms。
场景 2:广告预算分配中的影子价格
阶段:决策优化 / 运筹优化
解决的问题:营销平台要在多个广告位之间分配预算,目标是点击量最大,约束是总预算和各广告位的最低曝光。直接解原问题每次都要重新算;对偶变量 λ* 恰好是“预算的影子价格”——预算每增加一块钱,点击量能涨多少。有了影子价格,运营可以快速决定该不该加预算、加在哪个广告位上,而不必反复重跑优化。
具体案例:某电商大促期间,预算分配引擎每天跑一次原问题求解,耗时 20 分钟;利用前一天的对偶变量做灵敏度微调,把调整响应时间压缩到秒级,活动期间多获得了 12% 的点击。
场景 3:分布式优化与联邦学习
阶段:分布式训练 / 隐私保护训练
解决的问题:联邦学习中数据分散在各地设备上不能集中,但全局模型需要协同。对偶分解把“带有耦合约束的全局问题”拆成每个设备只依赖本地数据的子问题:各设备传给中心一个对偶变量梯度,中心更新 λ 再广播,如此迭代收敛。这就是对偶理论在现代分布式 AI 里的直接应用。
具体案例:某银行联盟做跨机构反欺诈建模,数据不出机构。采用对偶分解框架训练逻辑回归,每家机构只上传本地子问题的对偶梯度,迭代 50 轮后模型 AUC 比单机构数据训练高出 8 个百分点。
Python 演示
import numpy as npfrom scipy.optimize import minimize # ============ 第一部分:拉格朗日对偶的完整闭环 ============# 原问题:min x^2, s.t. x >= 1(标准形式 f1(x) = 1 - x <= 0)# 解析解:x* = 1,p* = 1 def dual_obj(lam): # 对偶函数 g(lam) = min_x [x^2 + lam*(1-x)] = lam - lam^2/4 # minimize 默认求极小,所以取负号 return -(lam - lam * lam / 4.0) res = minimize(dual_obj, 0.0, bounds=[(0.0, None)])lam_star = res.x[0]d_star = -res.funp_star = 1.0print("原问题最优 p* =", p_star, ",解 x* =", round(lam_star / 2, 6))print("对偶最优 d* =", round(d_star, 6), ",lambda* =", round(lam_star, 6))print("对偶间隙 p* - d* =", round(p_star - d_star, 6)) # ============ 第二部分:SVM 对偶求解与支持向量 ============# 六个二维样本:前三个正类,后三个负类X = np.array([[2.0, 2.0], [2.0, 3.0], [3.0, 2.0], [6.0, 6.0], [7.0, 6.0], [6.0, 7.0]])y = np.array([1.0, 1.0, 1.0, -1.0, -1.0, -1.0])n = len(y) # 对偶问题矩阵:Q[i,j] = y_i * y_j * x_i^T x_jQ = np.array([[y[i] * y[j] * X[i].dot(X[j]) for j in range(n)] for i in range(n)]) def svm_dual(alpha): # 对偶目标:max sum(alpha) - 0.5 * alpha^T Q alpha return 0.5 * alpha.dot(Q.dot(alpha)) - alpha.sum() cons = [{"type": "eq", "fun": lambda a: a.dot(y)}] # 等式约束 sum(alpha_i * y_i) = 0bnds = [(0.0, None)] * n # 不等式约束 alpha_i >= 0res = minimize(svm_dual, np.zeros(n), method="SLSQP", bounds=bnds, constraints=cons)alpha = np.clip(res.x, 0.0, None)alpha[np.abs(alpha) < 1e-6] = 0.0 sv = np.where(alpha > 0.0)[0] # 互补松弛:非零 alpha 对应的即支持向量w = (alpha * y).dot(X) # 平稳性:w = sum(alpha_i * y_i * x_i)b = np.mean(y[sv] - X[sv].dot(w)) print("\nSVM 对偶变量 alpha =", np.round(alpha, 4))print("支持向量索引 =", sv)print("w =", np.round(w, 4), ",b =", round(b, 4))pred = np.sign(X.dot(w) + b)print("训练集分类准确率 = %.0f%%" % (np.mean(pred == y) * 100))
def dual_obj(lam):定义对偶目标函数 g(λ),输入是罚款单价 λ,输出是对偶函数值。return -(lam - lam * lam / 4.0)g(λ) = λ − λ²/4 的解析式,取负号转成 scipy 默认的极小化形式。res = minimize(dual_obj, 0.0, bounds=[(0.0, None)])求解对偶问题,bounds 实现 λ ≥ 0 的对偶可行域。lam_star = res.x[0]取出最优罚款单价 λ,数值上应收敛到 2,此时 x = 1。Q = np.array([[y[i] * y[j] * X[i].dot(X[j]) for j in range(n)] for i in range(n)])组装对偶 QP 的 Q 矩阵,里面全是样本内积。def svm_dual(alpha):SVM 对偶目标函数,等价于最大化 Σα − ½αᵀQα。cons = [{"type": "eq", "fun": lambda a: a.dot(y)}]等式约束 Σαᵢyᵢ = 0,来自对 b 求平稳性。sv = np.where(alpha > 0.0)[0]互补松弛条件告诉我们:只有边界样本的 α 非零,余者皆零。w = (alpha * y).dot(X)由平稳性条件 w = Σαᵢyᵢxᵢ 从对偶解恢复出原始空间的权重向量。
常见误区
误区大家都说“对偶能使问题更好解”,所以我认为任何优化问题转成对偶都会变简单,遇到难题第一反应就是转对偶。
正解对偶只是换了个视角:它把“硬约束”变成“软罚款 + 极值”。好处是问题永远是凸的(凹函数求最大),SVM 等场景里变量从 d 维变成 n 个乘子、且只依赖内积从而能上核技巧;但并非所有问题都对偶更简单,有时对偶变量更多、约束更复杂。是否更好解,要具体问题具体分析。
为何常见:教材反复强调“对偶可简化 SVM”,读者把功劳归因过宽,忽略了那只是特定结构带来的红利。
误区书上例子 d* = p* 看多了,我以为任何问题都有强对偶,于是直接拿 KKT 当充要条件使用。
正解强对偶需要约束规范条件,最常见的是 Slater 条件——存在一个让所有不等式约束严格留余量的可行点。非凸问题通常有 d* < p*,对偶间隙为正。只有“凸 + Slater”才保证强对偶,KKT 才是充要条件。
为何常见:入门教材的例题都是良性凸问题,默认强对偶成立,读者缺少对间隙的直观感受。
误区我总以为互补松弛说的是“约束取等号的地方乘子为零,约束放松的地方乘子很大”。
正解恰好相反:λᵢ·fᵢ(x*) = 0 要求二者至少一个为零。约束在最优处没被卡住(fᵢ(x*) < 0),它的乘子必须为 0;被卡在边界的约束才可能有非零价格。这正是“支持向量”名称的由来——只有顶着边界的点才“值钱”。
为何常见:日常经验是“越紧的约束越重要”,于是直觉上以为紧约束价格低、松约束价格高,正好把方向记反。
误区拉格朗日式子里 λ 乘在 fᵢ(x) 上,而 fᵢ 是 x 的函数,所以我认为 λ 是每个决策变量 x 的单价。
正解λ 是“约束(资源)的影子价格”,不是“变量的价格”。它的单位是“目标值单位 / 约束单位”——比如成本元每克糖。它回答的问题是:把某条约束放松一个单位,最优成本能降低多少。罚款单价贴在“规矩”上,不是贴在“配方原料”上。
为何常见:乘子在公式里写在 fᵢ(x) 旁边,位置让人误以为它是对 x 加权。
误区我解题时直接列出 KKT 四个条件解方程组,觉得只要有公式就能解任何优化问题。
正解KKT 是“强对偶成立 + 函数可微”条件下的最优性刻画。凸 + Slater 时它是充要条件;非凸问题里它只是必要条件,解出的点可能是鞍点或局部极值。用之前必须先确认问题类型和约束规范条件。
为何常见:计算导向的课程只教套路而省略前提,学生把充分性当成了无条件的事实。
面试题
Q1. 拉格朗日函数中不等式约束乘子 λᵢ 的取值范围是什么?
- A.必须非负(λᵢ ≥ 0)← 正确答案
- B.必须非正(λᵢ ≤ 0)
- C.可以取任意实数
- D.只能取正整数
答案:A。不等式约束写成 fᵢ(x) ≤ 0 时,乘子 λᵢ 必须非负。直观上,罚款单价只有非负才不会“奖励违规”:若 λᵢ < 0,违规反而降低 L,对偶下界失效。这就像阿强定罚款单,绝不能定成“糖超标一克奖励两毛”。
Q2. 弱对偶定理给出原问题最优值 p* 与对偶最优值 d* 的关系是?
- A.d* 与 p* 恒相等
- B.d* 恒大于 p*
- C.d* 总是 p* 的下界← 正确答案
- D.d* 总是 p* 的上界
答案:C。弱对偶说 d* ≤ p*:任何一份罚款单算出的保证值都不会超过佳佳的真实最低成本。因为可行配方不会触发罚款,所以 g(λ,ν) ≤ f₀(x) 对任意可行 x 成立,取最值后 d* ≤ p*。对偶间隙 p* − d* ≥ 0,强对偶时恰好为 0。
Q3. 对偶函数 g(λ,ν) 的凹凸性有什么特点?
- A.一定是凸函数
- B.一定是凹函数← 正确答案
- C.与原问题同为凸
- D.凹凸性无法判断
答案:B。g(λ,ν) 是“一族线性函数逐点取下确界”,线性函数的逐点 inf 一定是凹函数——即使原问题非凸也一样。所以对偶问题永远是“凹函数最大化”,本质上是凸问题,计算性质极佳。这就是阿强那本价目表的“算术世界”总是井井有条的原因。
Q4. 强对偶 d* = p* 的一个常用充分条件是?
- A.目标函数非凸
- B.Slater 条件成立← 正确答案
- C.约束全部为等式
- D.可行域是空集
答案:B。对凸问题,Slater 条件——存在一个让所有不等式约束严格成立(留余量)的可行点——是强对偶成立的常用充分条件。目标函数非凸、可行域为空集都无法保证;约束全是等式也不够,因为不等式约束的余量要求没法满足。
Q5. 互补松弛条件 λᵢ·fᵢ(x*) = 0 的直观含义是?
- A.所有约束都必须取等号
- B.所有乘子都必须为零
- C.非活跃约束的乘子必为零← 正确答案
- D.乘子与约束是否活跃无关
答案:C。互补松弛说的是:若某条不等式约束在最优处没有卡到边界(fᵢ(x*) < 0,比如糖含量远低于上限),它的乘子必须为 0,即没人愿意为不起作用的规矩付钱。反之,只有紧贴边界的“活跃约束”才可能获得非零价格。
Q6. 关于 SVM 对偶,下列说法正确的是?
- A.αᵢ > 0 对应支持向量← 正确答案
- B.对偶目标只含样本内积← 正确答案
- C.w 可由 Σαᵢyᵢxᵢ 恢复← 正确答案
- D.所有 αᵢ 都必须为正数
答案:ABC。SVM 对偶里,αᵢ > 0 的样本恰是支持向量(互补松弛的直接推论,A 对);对偶目标里特征只以内积 xᵢᵀxⱼ 出现,这是核技巧的入口(B 对);由平稳性 w = Σαᵢyᵢxᵢ 可从 α 恢复 w(C 对)。D 错——绝大多数 αᵢ 为 0,否则模型就不稀疏了。
Q7. 对偶变量 λ* 在经济学意义上的通常名称是什么?
- A.机会成本
- B.影子价格← 正确答案
- C.边际效用
- D.折现因子
答案:B。对偶变量 λ* 是约束条件的“影子价格”:把某条约束放松一个单位,最优目标值能改善多少。它是约束的价值而非变量的价值。就好比阿强定的罚款单价,回答的是“这条规矩值多少钱”——广告预算多一块钱能多买多少点击。
Q8. KKT 条件包含下列哪些内容?
- A.梯度平稳性← 正确答案
- B.原始可行性← 正确答案
- C.对偶可行性← 正确答案
- D.互补松弛性← 正确答案
答案:ABCD。KKT 四条缺一不可:平稳性(梯度加权和为零)、原始可行性(原约束满足)、对偶可行性(λ ≥ 0)、互补松弛(λᵢfᵢ = 0)。在凸 + Slater 条件下四条是充要条件;缺任何一条,解都不一定是原问题的最优解。
Q9. 关于对偶理论在算法中的应用,下列说法正确的有?
- A.对偶可提供原问题最优值下界← 正确答案
- B.对偶分解可拆分耦合约束← 正确答案
- C.互补松弛可识别活跃约束← 正确答案
- D.强对偶对所有非凸问题成立
答案:ABC。A 对——弱对偶保证任何对偶可行点都给出原最优值的下界,可用于停机判据。B 对——对偶分解把耦合约束的价格 λ 固定后,各子问题独立求解。C 对——互补松弛能判断哪些约束活跃。D 错——强对偶对非凸问题一般不成立,这正是对偶间隙的由来。
Q10. 弱对偶性对所有优化问题(无论凸否)都成立,其证明成立的关键原因是?
- A.λ ≥ 0 且可行点满足 fᵢ(x) ≤ 0← 正确答案
- B.目标函数必须是凸函数
- C.可行域必须是紧集
- D.对偶函数必须是可微的
答案:A。弱对偶证明只依赖两点:可行点满足 fᵢ(x) ≤ 0,乘子满足 λᵢ ≥ 0,于是 λᵢfᵢ(x) ≤ 0,推出 L(x,λ,ν) ≤ f₀(x),进而 g(λ,ν) ≤ p*。这个论证完全不需要凸性、紧性或可微性,所以弱对偶对一切优化问题成立。