周末帮全家代购,你攥着 500 元预算,目标是让全家人的不满意度降到最低:孩子要零食、老人要养生品、你自己想省钱。任何“在限制下求最优”的选择,都是约束优化问题。可预算红线看得见,最优解却摸不着——你真正需要的是一套判据,能在付款前断定:这张清单还有没有改进空间?KKT 条件就是这套判据。它像一个老练的代购员,只问四件事:购物车里每样东西是不是“每一元都花出了同等价值”(梯度平衡)?有没有超预算(原始可行)?钱的边际价值是不是非负(对偶可行)?预算到底是松是紧、该不该继续调整(互补松弛)?四关全过,才能确认最优。这篇文章会用这条代购主线,带你拆解 KKT 的每个条件,最后看它如何支撑起机器学习中的支持向量机。

岗位关联

掌握 KKT 条件,你就拥有了验证约束优化最优解的“标准尺”,这是学习 SVM、对偶理论、凸优化的必经关卡,也是算法岗面试的高频考点。

目录
  1. 可视化演示
  2. 约束优化问题
  3. 拉格朗日函数
  4. 平稳性条件
  5. 可行性条件
  6. 互补松弛
  7. KKT完整判据
  8. 对偶间隙
  9. SVM应用
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

动态演示KKT条件的核心机制,通过基础/核心/应用/扩展四种模式展示关键概念与交互流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

KKT条件:KKT条 KKT条件的四要素与整体结构 互补松弛条件的物理意义与作用 核心机制可视化 KKT条件整体架构与关键组件

约束优化问题

周末帮全家代购,你的目标是让“大家的不满意度”降到最低——孩子要零食、老人要养生品、你自己想省钱。但钱包有上限:总花费不能超过 500 元。任何把“目标”和“限制”放在一起的问题,数学上都叫约束优化。目标函数 f(x) 表示你有多想压低的数值(不满意度),限制条件则分两类:一类是“不能越过”的不等式约束 g(x) ≤ 0,比如预算红线;另一类是“必须精确满足”的等式约束 h(x) = 0,比如“鸡蛋必须买一整盒”。

约束优化把决策变量写成一个向量 x,在所有不越边界、不违反硬性要求的候选里挑一个最优的。这就是机器学习、运筹学、金融风控里天天在解的“在限制下求最优”问题:

聪明的代购者不会一边抱怨预算一边乱买,而是先把红线写清楚,再用 KKT 这把尺子量出最优解。下一节,我们把红线和目标缝成一张总账单。

min⁡x∈Rnf(x)s.t.gi(x)≤0 (i=1,…,m),hj(x)=0 (j=1,…,p)\displaystyle \min_{x \in \mathbb{R}^n} f(x) \quad \text{s.t.} \quad g_i(x) \le 0 \ (i=1,\ldots,m), \quad h_j(x) = 0 \ (j=1,\ldots,p)
这个公式是说:在所有不越红线、不违反硬性要求的候选方案里,挑一个让目标值最小的方案。
  1. 极小化符号 min在所有可行候选中挑一个让 f 最小的,像代购时从堆方案里选不满意度最低的那张清单。
    min⁡xf(x)\displaystyle \min_{x} f(x)
  2. 目标函数 f(x)要极力压低的数值,在我们的故事里就是全家不满意度,数值越小越好。
    f(x)\displaystyle f(x)
  3. 不等式约束 g_i(x) ≤ 0一条条“红线”,越界即不可行。预算红线写成“总花费 − 500 ≤ 0”。
    gi(x)≤0\displaystyle g_i(x) \le 0
  4. 等式约束 h_j(x) = 0必须严格成立的“硬性条款”,比如鸡蛋必须整盒买、误差必须为零。
    hj(x)=0\displaystyle h_j(x) = 0

拉格朗日函数

假设超出预算一元的代价,是让全家不满意度额外上涨 3 个单位——这个“3“就是代价系数。如果能把每条约束都换算成”超了多少 × 系数“的罚金,再把罚金和原始目标合并成一张总账单,带约束的难题就变成了”把这张总账单降到最低”的无约束问题。

这个把约束“折现”进目标的工具就是拉格朗日函数。对每条不等式约束配上乘子 λᵢ ≥ 0,对每条等式约束配上乘子 μⱼ(可正可负),聚合成一个函数:

有了这张总账单,“带约束”的难题就变成了“找平衡点”的问题。下一节看怎么用“梯度为零”来找到这个平衡点。

L(x,λ,μ)=f(x)+∑i=1mλigi(x)+∑j=1pμjhj(x)\displaystyle \mathcal{L}(x, \lambda, \mu) = f(x) + \sum_{i=1}^{m} \lambda_i g_i(x) + \sum_{j=1}^{p} \mu_j h_j(x)
拉格朗日函数像一张“扣款账单”:目标本身加上所有约束的“罚金折现”,找到让这张账单无法再降的点,就找到了 KKT 意义下的最优候选。
  1. 函数名 L拉格朗日函数,它是把约束装进目标的载体,好比把罚款条款订进购物合同。
    L(x,λ,μ)\displaystyle \mathcal{L}(x, \lambda, \mu)
  2. f(x) 原始目标账单的第一行,全家不满意度,先原样写上。
    f(x)\displaystyle f(x)
  3. λᵢ gᵢ(x) 不等式罚金预算约束超多少,就乘以“每单位后悔值”λᵢ,超得越多罚得越重。
    ∑i=1mλigi(x)\displaystyle \sum_{i=1}^{m} \lambda_i g_i(x)
  4. μⱼ hⱼ(x) 等式罚金硬性条款偏离多少的惩罚。等式可以从两边偏离,所以 μ 可正可负。
    ∑j=1pμjhj(x)\displaystyle \sum_{j=1}^{p} \mu_j h_j(x)

平稳性条件

如果购物车里每样商品“多花一元减少不满意度”的效率不一样,你就会把预算从低效商品挪到高效商品——直到每一元钱的边际效率相等,任何重新分配都不再有改进空间。数学上,这个“没有改进空间”的状态,就是拉格朗日函数对 x 的梯度为零。

梯度是多元函数的“最陡上升方向”。最优点处,目标函数想往上走的冲动,恰好被各条约束想往上走的冲动(各自乘以乘子)完全抵消,合力为零:

注意,平稳只是必要条件——还要保证位置合法(可行性)和系数合理(对偶可行)。就像清单算得再平衡,超了预算依然作废。

∇xL(x∗,λ∗,μ∗)=∇f(x∗)+∑i=1mλi∗∇gi(x∗)+∑j=1pμj∗∇hj(x∗)=0\displaystyle \nabla_x \mathcal{L}(x^*, \lambda^*, \mu^*) = \nabla f(x^*) + \sum_{i=1}^{m} \lambda_i^* \nabla g_i(x^*) + \sum_{j=1}^{p} \mu_j^* \nabla h_j(x^*) = 0
平稳性条件:在最优候选点,目标函数的“推挤方向”恰好被各约束的“推挤方向”(各乘以其系数)完全抵消,总梯度为零。
  1. ∇(nabla)梯度多元函数在某点“最陡上升的方向和速度”,像山坡上哪个方向爬升最快。
    ∇f(x)\displaystyle \nabla f(x)
  2. 目标梯度 ∇f(x\*)目标函数在最优点的上升倾向,代表“多想摆脱这个点”的冲动。
    ∇f(x∗)\displaystyle \nabla f(x^*)
  3. 约束梯度 λᵢ\ ∇gᵢ(x\)第 i 条不等式约束的上升倾向,乘上 λ 后加入角力。
    ∑i=1mλi∗∇gi(x∗)\displaystyle \sum_{i=1}^{m} \lambda_i^* \nabla g_i(x^*)
  4. 总和为零所有方向的拉力相互抵消,x\* 处达到平衡,就像两股力量在购物车里拔河,最优时势均力敌。
    ∇xL(x∗,λ∗,μ∗)=0\displaystyle \nabla_x \mathcal{L}(x^*, \lambda^*, \mu^*) = 0

可行性条件

拿到最优清单后先别急着买单,要过三道检查:总价有没有超预算?鸡蛋是不是整盒?“每单位后悔系数”有没有标成负数?标负号等于鼓励超支,这是荒谬的。这些检查就是可行性条件。

可行性拆成三句话:位置在红线内(原始可行)、硬性要求精确满足、惩罚系数非负(对偶可行):

可行性是 KKT 的“合法性检查”,缺了它,梯度平衡得再漂亮也白搭。但光有合法性还不够,还要看哪些约束真正卡住了你。

gi(x∗)≤0 (i=1,…,m),hj(x∗)=0 (j=1,…,p),λi∗≥0\displaystyle g_i(x^*) \le 0 \ (i=1,\ldots,m), \quad h_j(x^*) = 0 \ (j=1,\ldots,p), \quad \lambda_i^* \ge 0
可行性条件拆成三句:候选方案在红线内、等式约束精确满足、不等式乘子非负。
  1. gᵢ(x\*) ≤ 0 原始可行候选方案不能越过任何一条红线。超预算的清单哪怕算得再漂亮也是废纸。
    gi(x∗)≤0\displaystyle g_i(x^*) \le 0
  2. hⱼ(x\*) = 0 等式成立硬性条款必须一字不差,鸡蛋少一个都不行。
    hj(x∗)=0\displaystyle h_j(x^*) = 0
  3. λᵢ\* ≥ 0 对偶可行不等式约束的乘子非负,因为“后悔系数”不可能是负数——钱的价值永远是正向的。
    λi∗≥0\displaystyle \lambda_i^* \ge 0

互补松弛

代购结束还剩 80 元,说明预算根本没有限制你,此时“每多 1 元减少不满意度”的系数 λ 必然是 0——钱已经不在你的决策里了。反过来,如果刚好花光 500 元,说明每一分钱都在替你扛事,λ 才可能大于 0。这条“松紧对应”的规律,就是互补松弛:

互补松弛是 KKT 中最“挑事”的条件:它决定哪些约束真正参与了博弈。后面 SVM 中,正是它把“少数站在边界上的样本”挑了出来。

λi∗gi(x∗)=0,i=1,…,m\displaystyle \lambda_i^* g_i(x^*) = 0, \quad i = 1, \ldots, m
互补松弛的直觉:一条约束要么真正卡住了你(g=0),要么它对决策毫无影响(λ=0),不允许“卡住却无代价”或“有代价却不卡住”的中间态。
  1. 乘积为零两个数相乘得零,至少有一个是零。这是代数的“二选一”开关。
    λi∗gi(x∗)=0\displaystyle \lambda_i^* g_i(x^*) = 0
  2. λᵢ\ > 0 时约束像绷紧的带子,gᵢ(x\) = 0 必须死死贴在边界上,预算刚好花光。
    λi∗>0⇒gi(x∗)=0\displaystyle \lambda_i^* > 0 \Rightarrow g_i(x^*) = 0
  3. gᵢ(x\) < 0 时约束有富余,λᵢ\ = 0 撤掉这个乘子,预算还剩钱,钱不再参与决策。
    gi(x∗)<0⇒λi∗=0\displaystyle g_i(x^*) < 0 \Rightarrow \lambda_i^* = 0

KKT完整判据

把前面四道关卡贴在一张购物清单背面:梯度平衡、不越红线、系数非负、松紧配对。四者齐全,这张清单才配叫“KKT 候选”。整体写成:

有了这四件套,你可以像验算账单一样验证任何候选解。四关全部通过,在凸优化的世界里就可以放心签收——这就是工程师手算最优解的“通关流程”。

{∇xL(x∗,λ∗,μ∗)=0(平稳性)gi(x∗)≤0,hj(x∗)=0(原始可行)λi∗≥0(对偶可行)λi∗gi(x∗)=0(互补松弛)\displaystyle\begin{cases}\nabla_x \mathcal{L}(x^*, \lambda^*, \mu^*) = 0 & \text{(平稳性)} \\g_i(x^*) \le 0, \quad h_j(x^*) = 0 & \text{(原始可行)} \\\lambda_i^* \ge 0 & \text{(对偶可行)} \\\lambda_i^* g_i(x^*) = 0 & \text{(互补松弛)}\end{cases}
KKT 条件是带约束优化的一阶必要条件;当目标函数为凸、可行域为凸集时,它同时是充分条件,满足 KKT 的点一定是全局最优。
  1. 第一行 平稳性梯度互相抵消,方案本身没有改进方向,相当于购物车里每样东西的边际效率都齐了。
    ∇xL(x∗,λ∗,μ∗)=0\displaystyle \nabla_x \mathcal{L}(x^*, \lambda^*, \mu^*) = 0
  2. 第二行 原始可行方案在红线以内、硬性条款满足,相当于收银条没有超预算。
    gi(x∗)≤0,hj(x∗)=0\displaystyle g_i(x^*) \le 0, \quad h_j(x^*) = 0
  3. 第三行 对偶可行不等式乘子非负,价格系数合理,相当于“后悔系数”没有标反。
    λi∗≥0\displaystyle \lambda_i^* \ge 0
  4. 第四行 互补松弛没有一条约束既卡不住人又收着钱,相当于预算松时就不要谈钱的价值。
    λi∗gi(x∗)=0\displaystyle \lambda_i^* g_i(x^*) = 0

对偶间隙

把购物问题反过来想:“如果预算再多一点点,不满意度还能降多少?”由此构造一个“理想化的最低不满意度”,它与实际最优之间的差距就是对偶间隙。间隙为零,说明这个理想价签正好等于现实的最低价。数学上,原始问题和对偶问题是两个不同次序的“极小—极大”博弈:

对偶间隙就像“理想价签”与“真实收银条”的差额。在 SVM 这类凸问题中,Slater 条件天然满足,间隙为零——所以我们可以放心地用对偶问题去解 SVM。

p∗=min⁡xmax⁡λ≥0,μL(x,λ,μ),d∗=max⁡λ≥0,μmin⁡xL(x,λ,μ),p∗−d∗≥0\displaystyle p^* = \min_{x} \max_{\lambda \ge 0, \mu} \mathcal{L}(x, \lambda, \mu), \qquad d^* = \max_{\lambda \ge 0, \mu} \min_{x} \mathcal{L}(x, \lambda, \mu), \qquad p^* - d^* \ge 0
弱对偶保证 p\ ≥ d\(对偶间隙非负);凸优化中若存在严格可行点(Slater 条件),则 p\ = d\,间隙消失,称为强对偶。
  1. p\* 原始最优现实中的最低不满意度——先选定购物方案,再被约束罚款。
    p∗=min⁡xmax⁡λ≥0,μL(x,λ,μ)\displaystyle p^* = \min_{x} \max_{\lambda \ge 0, \mu} \mathcal{L}(x, \lambda, \mu)
  2. d\* 对偶最优理想化的下界——先谈好罚款系数,再看最坏方案能压到多低。
    d∗=max⁡λ≥0,μmin⁡xL(x,λ,μ)\displaystyle d^* = \max_{\lambda \ge 0, \mu} \min_{x} \mathcal{L}(x, \lambda, \mu)
  3. 弱对偶 p\ − d\ ≥ 0现实不可能比理想更便宜,两者的差距就是对偶间隙。
    p∗−d∗≥0\displaystyle p^* - d^* \ge 0
  4. Slater 条件存在严格可行点(预算有富余、所有不等式严格满足)时,间隙归零。
    ∃x:gi(x)<0⇒p∗=d∗\displaystyle \exists x : g_i(x) < 0 \Rightarrow p^* = d^*

SVM应用

回到代购:真正决定预算怎么分配的,不是购物车里的全部商品,而是少数“必买清单”上的紧约束商品。在 SVM 里,这些“必买商品”就是支持向量——只有它们站在间隔边界上,其余样本怎么动都不影响决策。SVM 的原始问题,是最小化间隔的倒数,同时要求所有样本被正确分类且离边界至少 1 个单位:

代购时你只需要盯紧那几件“必买清单”,SVM 推理时也只需要存储支持向量——这正是 KKT 互补松弛在机器学习中最漂亮的落地。

min⁡w,b12∥w∥2s.t.yi(w⋅xi+b)≥1,i=1,…,n\displaystyle \min_{w,b} \frac{1}{2} \|w\|^2 \quad \text{s.t.} \quad y_i(w \cdot x_i + b) \ge 1, \quad i = 1, \ldots, n
SVM 把“找最宽分类隔离带”写成约束优化,再用 KKT 条件在解中自动挑出真正的支持向量。
  1. 目标 ½‖w‖²最大化几何间隔的等价写法。间隔越宽,隔离带越安全,分类器越稳。
    12∥w∥2\displaystyle \frac{1}{2} \|w\|^2
  2. 约束 yᵢ(w·xᵢ+b) ≥ 1每个样本都被正确分类,且离间隔边界至少 1 个单位,像代购清单里的“必买底线”。
    yi(w⋅xi+b)≥1\displaystyle y_i(w \cdot x_i + b) \ge 1
  3. 互补松弛 αᵢ(yᵢ(w·xᵢ+b)−1) = 0对这条约束写互补松弛,αᵢ > 0 的样本必然让括号内为零——恰好贴在间隔边界上,它们就是支持向量;其余样本 αᵢ = 0,对模型毫无贡献。
    αi(yi(w⋅xi+b)−1)=0\displaystyle \alpha_i \left( y_i (w \cdot x_i + b) - 1 \right) = 0

AI 应用场景

量化投资组合优化

阶段:约束优化求解 / 决策支持

解决的问题:基金经理要在“总风险 ≤ 阈值、单只股票仓位 ≤ 10%”等约束下让预期收益最大。传统靠网格搜索或经验调仓,维度一高就失效;用 KKT 条件可以把互补松弛当作“风险预算是否被吃满”的探针——哪个约束的 λ 显著大于 0,哪个约束就真正卡住了最优解,一目了然。

具体案例:某量化团队用凸优化求解器算出组合后,通过 KKT 检查发现“总风险”约束处的 λ 远大于 0,而“单票仓位”约束的 λ 为 0。团队据此把风控资源集中在总风险上,回测波动率下降 15%。

SVM 垃圾邮件分类

阶段:模型训练与推理

解决的问题:训练大规模 SVM 需要求解带约束的二次规划,若把所有样本都存进模型,内存和推理开销都不可接受。KKT 互补松弛指出:只有 αᵢ > 0 的支持向量进入模型,其余样本的 αᵢ = 0,可以彻底丢弃。

具体案例:训练 20 万封邮件的分类器,最终只保留 1200 个支持向量。推理时只需计算新邮件与这 1200 个向量的内积,线上延迟从 80ms 降到 5ms。

云资源调度

阶段:资源分配优化

解决的问题:在总预算 C 下给多个训练任务分配 GPU 资源,要求每个任务吞吐不低于各自底线。用 KKT 条件检验哪个任务的约束是紧的(λ 大),就给哪个任务优先增加资源——这比平均分配或人工拍脑袋高效得多。

具体案例:某 MLOps 平台按 KKT 乘子给任务排序,将稀缺 GPU 优先分配给“资源受约束最紧”的任务,整体吞吐提升 22%。

Python 演示

python74 行
import math  class KKTVerifier:    """用 KKT 条件求解并验证一个简单的约束优化问题。     问题模型:        min  (x - cx)^2 + (y - cy)^2        s.t. x^2 + y^2 <= R^2     这相当于在"可行圆"内,找到离目标中心最近的点。    """     def __init__(self, cx, cy, R):        self.cx = cx        self.cy = cy        self.R = R        self.x = 0.0        self.y = 0.0        self.lam = 0.0        self.g_val = 0.0     def solve(self):        """根据 KKT 条件求解析解。"""        dist = math.hypot(self.cx, self.cy)        if dist <= self.R:            # 目标中心本身在圆内:最优就是中心,lambda=0            self.x = self.cx            self.y = self.cy            self.lam = 0.0        else:            # 目标中心在圆外:最优点是连线与圆的交点,lambda>0            self.x = self.cx * self.R / dist            self.y = self.cy * self.R / dist            self.lam = (dist - self.R) / self.R        self.g_val = self.x * self.x + self.y * self.y - self.R * self.R        return (self.x, self.y, self.lam)     def verify(self):        """逐条验证四个 KKT 条件是否成立。"""        self.solve()        # 1. 平稳性:目标梯度 + lambda * 约束梯度 = 0        grad_fx = 2 * (self.x - self.cx)        grad_fy = 2 * (self.y - self.cy)        grad_gx = 2 * self.x        grad_gy = 2 * self.y        s1 = abs(grad_fx + self.lam * grad_gx) < 1e-9        s2 = abs(grad_fy + self.lam * grad_gy) < 1e-9        stationarity = s1 and s2         # 2. 原始可行性        primal_ok = self.g_val <= 1e-9         # 3. 对偶可行性        dual_ok = self.lam >= 0         # 4. 互补松弛        slackness_ok = abs(self.lam * self.g_val) < 1e-9         return {            "平稳性": stationarity,            "原始可行性": primal_ok,            "对偶可行性": dual_ok,            "互补松弛": slackness_ok,        }  if __name__ == "__main__":    verifier = KKTVerifier(cx=2.0, cy=1.5, R=1.0)    opt = verifier.solve()    print("最优点:", opt)    print("拉格朗日乘子:", verifier.lam)    for name, ok in verifier.verify().items():        print(name, ":", "通过" if ok else "未通过")
目的:实现一个圆内最近点问题的 KKT 解析解,并逐条验证平稳性、原始可行、对偶可行、互补松弛四个条件。
  1. dist = math.hypot(self.cx, self.cy)计算目标中心到原点的距离,决定最优解在圆内还是圆外。
  2. self.x = self.cx * self.R / dist圆外时,最优点在“目标中心 → 圆心”连线与圆的交点上。
  3. self.lam = (dist - self.R) / self.R由平稳性方程 1+λ = d/R 反推出的乘子,代表预算的边际价值。
  4. grad_fx = 2 * (self.x - self.cx)目标函数梯度的 x 分量,是平稳性检查的第一块拼图。
  5. slackness_ok = abs(self.lam * self.g_val) < 1e-9验证互补松弛:λ 与约束值相乘必须为零。

常见误区

误区“只要满足 KKT 条件,我找到的这个点就一定是全局最优解。”

正解KKT 条件在一般情况下只是必要条件。非凸问题中,满足 KKT 的点可能是鞍点或局部最优。购物里“梯度平衡”只说明你在这个方案周围一小块区域内没有立刻改进空间,并不保证它就是全城最低价。只有当目标函数是凸函数、可行域是凸集时,KKT 才升级为充要条件。

为何常见:教材和课程通常以凸优化为例,例子恰好都满足充要性,初学者见多了就容易把“必要条件”误当成“充分条件”。

误区“互补松弛写的是 λg = 0,所以 λ 一定要等于 0。”

正解λg = 0 的意思是 λ 和 g 至少有一个等于 0。更常见的情形恰恰是约束卡死(g = 0)且 λ > 0。就像预算刚好花光时,钱的边际价值是正的,λ 不为零。

为何常见:只记住了“乘积为零”的代数形式,却忽略了“或”的逻辑;一看到乘法等式就本能地认为某个因子必须为零。

误区“我求出了梯度为零的点,这就是最优解,不用再检查别的。”

正解梯度为零但落在可行域之外的点根本没有参赛资格。KKT 四件套缺一不可:购物清单算得再平衡,如果总价超了预算,它就是一张废清单。

为何常见:这是无约束优化的惯性思维——以前只要求导数为零,接触约束优化后没有同步更新“还要查边界”的意识。

误区“拉格朗日乘子一律都要满足 λ ≥ 0。”

正解只有不等式约束的乘子 λᵢ 才要求非负;等式约束的乘子 μⱼ 可正可负。因为等式 h = 0 允许从两侧偏离,罚金方向也要能向两个方向拉扯。

为何常见:初学者把两类约束的乘子混为一谈,只记住了“乘子非负”这个口号,没记住它的前提。

误区“原始最优和对偶最优肯定相等,对偶间隙不存在。”

正解强对偶 p\ = d\ 需要凸性加 Slater 条件等前提。非凸问题通常 p\ > d\,对偶间隙为正。就像“理想价签”和“真实收银条”不总是一致。

为何常见:SVM、线性回归等经典凸问题的对偶间隙天生为零,见惯了强对偶的例子,就容易把它当作天经地义。

面试题

Q1. KKT 条件中,不等式约束的拉格朗日乘子 λ 必须满足?

单选题 · easy

  • A.λ ≤ 0
  • B.λ ≥ 0← 正确答案
  • C.λ = 0
  • D.λ 无限制

答案:B。购物里 λ 是“每多 1 元预算能降低的不满意度”,是正向的好处,不可能为负。A 符号相反;C 只在约束松弛时出现;D 是等式约束乘子 μ 的特性。

Q2. 互补松弛条件 λg = 0 的含义是?

单选题 · easy

  • A.λ 必须为 0
  • B.g 必须为 0
  • C.两者至少一个为 0← 正确答案
  • D.两者取值相等

答案:C。λ 和 g 至少一个为 0。预算剩钱(g<0)时钱不再影响决策(λ=0);钱在起作用(λ>0)时预算必然刚好花光(g=0)。A 和 B 都只说了半边。

Q3. 对非凸优化问题,满足 KKT 条件的点是?

单选题 · hard

  • A.必为全局最优
  • B.必为局部最优
  • C.可能是非最优点← 正确答案
  • D.必然不可行

答案:C。KKT 是非凸问题的一阶必要条件,满足 KKT 的点可能是鞍点、局部最优甚至普通驻点。梯度平衡只说明“脚下没有改进方向”,不代表全球最低价。

Q4. 原始可行性条件要求?

单选题 · mid

  • A.g(x)≥0 且 h(x)=0
  • B.g(x)≤0 且 h(x)=0← 正确答案
  • C.g(x)=0 且 h(x)≤0
  • D.g(x)≤0 且 h(x)≥0

答案:B。原始可行性要求不等式约束不越红线(g≤0),等式约束精确满足(h=0),对应“不超预算 + 鸡蛋必须整盒”。其他组合都配错了约束类型。

Q5. SVM 对偶问题中,互补松弛 αᵢ(yᵢ(w·xᵢ+b)−1)=0 意味着?

单选题 · hard

  • A.所有样本共同决定间隔
  • B.仅 αᵢ>0 样本在边界上← 正确答案
  • C.所有 αᵢ 必须为零
  • D.支持向量机没有约束

答案:B。αᵢ>0 的样本让括号内为零,恰好贴在间隔边界上,它们就是支持向量;其余样本 αᵢ=0 对模型无贡献。代购中只有“必买清单”上的商品真正决定预算分配。

Q6. 拉格朗日函数中 λg 项的作用是?

单选题 · easy

  • A.提高目标函数值
  • B.把约束折进目标← 正确答案
  • C.消除所有梯度
  • D.直接给出最优解

答案:B。λg 把约束的“超支罚金”折算进目标函数,合成一张总账单。它不会直接给出解,也不会消除梯度,只是换了一种无约束的视角。

Q7. 对偶间隙 p\−d\ = 0 称为什么?

单选题 · mid

  • A.弱对偶
  • B.强对偶← 正确答案
  • C.无对偶
  • D.半对偶

答案:B。对偶间隙为零称为强对偶,此时“理想价签”等于“真实收银条”。弱对偶只保证 p\ ≥ d\,间隙可以为正。

Q8. KKT 条件包括以下哪些?

多选题 · mid

  • A.平稳性条件← 正确答案
  • B.原始可行性← 正确答案
  • C.对偶可行性← 正确答案
  • D.海森矩阵正定

答案:ABC。KKT 四件套是平稳性、原始可行、对偶可行、互补松弛。海森矩阵正定属于二阶充分条件,不在 KKT 的一阶判据里。

Q9. 对偶间隙为零的充分条件包括?

多选题 · mid

  • A.目标函数是凸函数← 正确答案
  • B.约束是凸约束← 正确答案
  • C.存在严格可行点← 正确答案
  • D.变量全部可分离

答案:ABC。目标凸、约束凸,再加 Slater 条件(存在严格可行点),即可保证强对偶。变量可分离与否与对偶间隙无关。

Q10. 关于 KKT 与 SVM 的关系,正确的是?

多选题 · extreme

  • A.SVM 对偶由 KKT 推出← 正确答案
  • B.互补松弛选出支持向量← 正确答案
  • C.非支持向量样本 α=0← 正确答案
  • D.SVM 无需可行性条件

答案:ABC。SVM 通过拉格朗日对偶求解,互补松弛给出 αᵢ>0 的样本在间隔边界上,非支持向量 αᵢ=0 被丢弃。SVM 当然必须满足可行性条件,D 错误。