想象一个光滑的金属盆地里,放着一颗小钢球。没有别的限制时,球会一路滚到盆底最低点——这就是无约束优化。但如果球场上立起了几道围栏,球只能在围栏围出的“可行区域”里活动,它最终停下的位置就未必是盆底了:它可能被围栏挡在半山腰,紧紧贴着墙停住。球什么时候会贴墙?贴墙时墙给了它多大的推力?墙的推力与球的重力如何达成平衡?这些问题的数学答案,正是 KKT 条件。它用一组简洁的方程与不等式,刻画了“带围栏的球场里,球最终稳定停住”的全部物理规律。这篇文章不讲抽象定理,只讲球与围栏的故事,让你从几何直觉上彻底看懂 KKT 与互补松弛。
对于 AI 从业者,KKT 是理解 SVM、罚函数法、约束强化学习的基石。掌握它,你才能读懂“为什么支持向量只有少数几个”,才能在工程里诊断约束优化失败的真因。
可视化演示
通过几何视角展示KKT条件:目标函数梯度与约束面法向量共线关系,以及互补松弛条件下活跃约束与松弛约束的力学类比。
本节配有交互动效(进入视口后自动加载,约 3KB)。
几何视图模式 目标函数∇f与约束面法向量∇g在最优点x*处共线,方向相反 约束面g(x)≤0定义可行域,等高线与约束面相切处为最优解 ∇f = λ∇g, λ≥0 拉格朗日乘子λ衡量约束对最优解的约束力度。
约束优化问题
没有围栏时,球在盆地里自由滚落,最终停在盆底——那里重力势能最低,数学上就是目标函数取得极小值。如今球场四周砌起了围栏,球的活动范围被限制在围栏圈定的“可行域”里。围栏有两种:一种是薄薄一条滑轨,球只能在轨道上滑行,对应等式约束 h(x)=0;另一种是一堵矮墙,球不能越过墙的那侧,对应不等式约束 g(x)≤0。这道墙把原本“处处可去”的盆地划出了一块禁区,球最舒服的位置可能正好在禁区里,于是它只能退而求其次,在墙边找一个“受限的最低点”。
约束优化问题就是在“不越界”的前提下寻找最低点。数学上写成如下形式:
围栏改变了球的“最优位置”:原来的盆底若在禁区内,球就只能贴着墙停。下一节我们就用几何眼光看清:球贴墙停下时,重力和墙体之间发生了什么。
- 最小化记号$\displaystyle \min_{x}$ 表示我们要在变量 x 的所有取值中挑一个,使后面的函数值最小——就像球寻找全场最低的落脚点。
- 目标函数$f(x)$ 是我们要优化的对象,相当于盆地的海拔高度,球想待在地势最低处。
- 等式约束$h_i(x)=0$ 是第 i 条滑轨,球必须精确落在轨道上,差一点都不行——如飞机必须沿航线飞行。
- 不等式约束$g_j(x)\leq 0$ 是第 j 堵墙围出的边界,允许区域在这堵墙的某一侧——球可以靠墙停,但不能穿墙而过。
几何直觉基础
假设球已经贴着墙停稳。在停稳的那一刻,从几何上看,墙在接触点处有一个切面(一维问题中就是切线),而球的重力方向——也就是目标函数下降最快的方向——必然无法指向任何“还能继续下降且不越界”的方向。换句话说,所有能走的可行方向,都必须与下降方向“作对”:沿着任何可行方向走一小步,目标函数都不会再下降了。这就是最优解的几何本质。
把这个直觉翻译成数学。设 d 是可行域内从当前点出发的一个小方向,若往 d 走能让 f 下降,则需满足方向导数小于零:
于是球的停靠点满足:重力分量被墙的法向反力抵消,墙的切向上则不存在下降通道。下一节引入的拉格朗日乘子,就是量化“墙的反力有多强”的那把尺子。
- 梯度向量$\nabla f(x)$ 是目标函数在 x 处的梯度,它指向 f 上升最快的方向——类比为球“想往下滚”的反方向(上升方向)。
- 方向向量$d$ 是一个微小的试探步,代表球打算往哪个方向挪一小步。
- 内积判断$\nabla f(x)^\top d<0$ 表示沿 d 走函数值下降;而内积非负则说明走这一步不会获得更低点。
- 驻点条件$\nabla f(x^*)^\top d\ge 0$ 对所有可行 d 成立,意味着 x* 处已无路可降——球被墙逼停在“局部最低”。
拉格朗日乘子
当球紧贴墙面停住时,墙会对球产生一个垂直于墙面、指向可行域内部的推力。墙推得越狠,说明球“越想越界”。这个推力的大小,就是拉格朗日乘子 λ。在等式约束情形,球像被锁在滑轨上,轨道提供垂直于轨道的约束力,λ 可正可负(轨道能双向限制);在不等式约束情形,墙只能向可行域内推、不能向禁区拉,所以 λ 必须非负。乘子把“约束对最优解的影响强度”变成了一个可以计算的数——它正是墙的“劲头”。
拉格朗日乘子通过构造拉格朗日函数,把约束条件“吸收”进目标函数:
有了拉格朗日函数,最优解处“重力与墙推力平衡”这件事,就浓缩成了对 L 求梯度等于零。但要保证球真的停稳,还需要一整套条件共同成立——正是下一节的 KKT 四条件。
- 拉格朗日函数$L$ 是一个新构造的综合函数,把目标与约束打包成一个整体,便于对 x、λ、ν 同时求平衡。
- 不等式乘子$\lambda_i$ 是第 i 堵墙的推力系数,KKT 要求 $\lambda_i\ge 0$——墙只能推不能拉。
- 等式乘子$\nu_j$ 是第 j 条滑轨的约束力系数,等式的力的方向可双向,所以 $\nu_j$ 无符号限制。
- 求和累加$\sum$ 把多道墙、多条轨道的贡献逐一加总,球同时受多面墙推挤时,总平衡是所有力的矢量和。
KKT四条件
球在墙边真正停稳,需要同时满足四条物理定律:第一,受力平衡——重力、轨道力、墙推力三者和为零,球不会继续加速;第二,不穿墙——球的位置必须在可行域内,这是“合法停靠”的前提;第三,墙只推不拉——不等式约束乘子必须非负,墙不会把球往禁区里拽;第四,贴墙才发力——只有球接触到的墙才产生推力,没接触的墙推力必须为零。这四条合称 Karush-Kuhn-Tucker 条件,即 KKT 条件。
四条缺一不可:缺了平稳性球会继续滑;缺了可行性球在墙外;缺了对偶可行性可能停在鞍点;缺了互补松弛则无法确定墙的发力名单。下一节我们重点端详这条最容易被忽略、也最富直觉的“互补松弛”。
- 平稳性$\displaystyle \nabla f+\sum \lambda_i\nabla g_i+\sum \nu_j\nabla h_j=0$ —— 目标梯度被各约束法向的线性组合抵消,即所有力达成平衡。
- 原始可行性$g_i(x^*)\le 0,\ h_j(x^*)=0$ —— 球最终停的位置没有穿墙、没有脱离轨道,停在合法区域内。
- 对偶可行性$\lambda_i\ge 0$ —— 墙的推力只能指向可行域内部,不能反向拉球,保证该点是“压”出来的极小而非“拽”出来的。
- 互补松弛$\lambda_i g_i(x^*)=0$ —— 球与墙的接触关系:要么贴着墙(g=0)产生推力,要么离墙一截(g<0)推力为零,两个里必须有一个是零。
互补松弛
用手推墙时,只有手真正碰到墙面,才会感受到墙的反作用力;如果手悬在半空没有接触墙,无论你多“想推”,墙都不会给你任何回应。互补松弛说的正是这个道理:$\lambda_i>0$ 意味着约束“活跃”——球贴着第 i 堵墙,墙在出力;$g_i(x^*)<0$ 意味着约束“松弛”——球离墙还有一段距离,墙使不上劲。两种状态只能取其一,数学上就用乘积为零来表达:
互补松弛把“哪些墙真正起作用”从“哪些墙存在”中区分开来。工程里求解优化问题时,先猜哪些约束是活跃的——这就是活跃集方法,是下一节的主角。
- 乘积为零$\lambda_i\, g_i(x^*)=0$ —— 两数相乘得零,则至少一个为零,这是“二选一”的数学写法。
- 活跃分支$\lambda_i>0$ 且 $g_i(x^*)=0$ —— 约束被“激活”,球贴在墙上,墙正出力顶住球,这个约束真实地限制了最优解的位置。
- 松弛分支$\lambda_i=0$ 且 $g_i(x^*)<0$ —— 约束“休眠”,墙根本没碰到球,它对球的停靠毫无影响,可以放心忽略。
- 边界情形$\lambda_i=0$ 且 $g_i(x^*)=0$ —— 墙刚好轻轻挨着球但没使劲,约束既活跃又乘子为零,属于灰色地带,在实践中常按活跃处理。
活跃集求解
面对几十道墙,球可能只贴着其中一两道。如果我们能猜出“球最终贴的是哪几道墙”,问题立刻简化:把活跃约束当作等式约束处理,其他约束暂时无视,解一个大大缩小规模的方程组。这个被猜中的墙的集合,就叫活跃集。猜完之后必须验证:算出的乘子是否非负?非活跃约束处乘子是否为零?如果验出某堵“以为没碰”的墙其实乘子为负,说明猜错了,要调整活跃集再算。
活跃集方法用“猜验循环”逼近答案:
活跃集方法把“找最优”变成了“猜墙—验力—换墙”的迭代。实际求解器(如 SLSQP、内点法)会把这种思路包装成数值迭代;而当初猜的名单若与真实活跃集偏差太大,就会出现下一节讨论的退化与病态。
- 活跃集命名$A$ 是“贴着球的墙”的下标集合,相当于一份嫌疑墙名单,开始时靠直觉或历史经验猜测。
- 局部平衡$\nabla f+\sum_{i\in A}\lambda_i\nabla g_i(x)=0$ —— 只让嫌疑墙出力,求球的受力平衡位置。
- 零间隙验证$g_i(x)=0,\ i\in A$ —— 嫌疑墙必须真的与球零距离接触,位置要落在墙上才自洽。
- 松约束排除$g_i(x)<0,\ i\notin A$ —— 名单外的墙必须确实离球有距离,同时算出 λ 非负,验证才算通过。
多约束退化
球可能同时被两面墙夹住,停在墙角里——此时两个约束都活跃,合力平衡来自两个方向的推力之和,这是正常情形。但如果这两面墙其实是“重叠”的——比如两道墙几乎贴在一起并排,球贴住它们时,数学上根本说不清推力分别来自哪道墙,乘子分配变得不唯一。这种冗余就是约束退化。退化的墙角会让求解器数值不稳,KKT 乘子剧烈跳动,仿佛两个人同时推门,却无法确认各自使了多大的劲。
为了避免这种“甩锅式”的不确定性,需要一条正则性条件保证墙的法向方向足够独立:
墙的退化是“几何上的偶然”,但在真实工程中极其常见:冗余约束、近似重复的安全限制、降维后的重合边界,都会让 KKT 分析失真。识别并清理退化约束,是优化工程师的基本功。理解了退化,我们终于可以回到球场,看看这套“球与墙”的定律在机器学习中大显身手。
- 活跃梯度族$\nabla g_i(x^*)$ 是各活跃墙在接触点处的法向方向,代表墙“顶人”的方向。
- 线性无关这些法向不能互相线性表出——就像多个力必须方向各异,才能唯一拆解出每个力的贡献。
- 唯一的乘子LICQ 成立时,平稳性方程组系数满秩,λ 有唯一解,物理意义清晰。
- 退化后果若 LICQ 不成立,乘子集合可能无界或不唯一,数值求解器容易震荡,此时需要正则化或约束预处理。
应用实践
支持向量机(SVM)是互补松弛最经典的舞台。SVM 要在两类样本之间找一条“最宽”的分隔带,约束要求每个样本都在间隔边界之外。求解时,大部分样本离边界远远的——对应的约束松弛,乘子 α 自动为零;只有少数贴着间隔边界的样本,其约束活跃,乘子大于零。这些样本就是“支持向量”。互补松弛让 SVM 的解天然稀疏:浩浩荡荡的样本里,真正决定决策边界的只有贴墙的那几颗“球”。
SVM 的 KKT 互补松弛条件如下:
从球与围栏到 SVM 的间隔边界,KKT 条件始终在回答同一个问题:谁真正碰到了墙?机器学习里,稀疏模型、安全约束策略、资源分配的影子价格,背后都是这句“贴墙才推”。理解它,你便拥有了诊断一切约束优化问题的几何直觉。
- 样本乘子$\alpha_i$ 是第 i 个样本的拉格朗日乘子——相当于该样本作为“墙”推球的力度。
- 间隔距离$y_i(w^\top x_i+b)-1$ 是样本到间隔边界的“距离剩余量”:正值表示离边界远,零表示恰好贴边。
- 乘积为零$\alpha_i\times(\cdot)=0$ —— 样本要么离边界远且乘子为零(普通样本),要么乘子为正且贴边(支持向量)。
- 稀疏性来源大量样本落在第一分支,α=0 被丢弃,最终模型只保留贴边样本——这就是互补松弛带来的稀疏之美。
AI 应用场景
支持向量机稀疏解诊断
阶段:模型训练与特征选择
解决的问题:传统方法用全部样本训练分类器,存储和计算开销巨大。借助 KKT 互补松弛,SVM 训练后大量样本乘子 α=0,模型只需保存乘子非零的支持向量,实现自动稀疏化。工程师通过检查互补松弛残差 $\alpha_i (y_i(w^\top x_i+b)-1)$ 是否接近零,可以判断训练是否收敛、哪些样本是边界样本。
具体案例:在银行信贷风控中训练违约分类器,30 万条样本最终只剩约 1200 个支持向量,部署推理时间缩短 95%,且通过输出乘子最大的支持向量,可回溯“最难分类”的违约样本画像。
智能电网功率调度
阶段:约束优化求解与策略部署
解决的问题:电网调度需要在发电机出力上下限等安全性约束下最小化发电成本。人工按经验预留安全裕度导致成本偏高。使用 KKT 条件求解后,互补松弛自动识别出哪些线路的传输容量约束是活跃的,拉格朗日乘子即经济学中的“影子价格”,指导电网运营者知道哪些线路该扩容、哪些节点该调价。
具体案例:某省级电网在夏季高峰调度中,通过影子价格发现三条 500kV 线路约束乘子高达 280 元/MWh,优先安排扩容,整体购电成本下降 6.3%。
安全约束强化学习
阶段:策略训练与安全校正
解决的问题:机器人训练中,动作既要最大化任务奖励,又要满足安全约束(如机械臂不碰撞、电压不越限)。传统罚函数法难以平衡奖励与安全。基于 KKT 的安全强化学习在每次策略更新后,用互补松弛判断哪些安全约束被激活,动态调整拉格朗日乘子权重,使 agent 始终在安全域内优化策略。
具体案例:四足机器人上楼梯训练中,KKT 检测到“关节力矩上限”约束在快速攀爬时被激活,自动降低速度并重新分配步态,碰撞率从 22% 降至 0.5%。
Python 演示
import numpy as np # 定义目标函数与约束# f(x) = (x1-2)^2 + (x2-3)^2, 约束 g(x) = x1 + x2 - 4 <= 0 def f(x): """目标函数:求最小值""" return (x[0] - 2) ** 2 + (x[1] - 3) ** 2 def grad_f(x): """目标函数梯度 2*(x-中心)""" return np.array([2 * x[0] - 4, 2 * x[1] - 6]) def g(x): """不等式约束 g(x) = x1 + x2 - 4 <= 0""" return x[0] + x[1] - 4 def grad_g(x): """约束梯度恒为 (1,1)""" return np.array([1.0, 1.0]) def verify_kkt(x, lam): """验证 KKT 四条件: 平稳性/原始可行/对偶可行/互补松弛""" stationarity = np.linalg.norm(grad_f(x) + lam * grad_g(x)) primal = g(x) dual = lam comp = lam * primal checks = { "平稳性(应≈0)": stationarity, "原始可行(应≤0)": primal, "对偶可行(应≥0)": dual, "互补松弛(应≈0)": comp, } for name, val in checks.items(): print(f" {name}: {val:.6f}") return all(abs(v) < 1e-8 and not (k == "原始可行(应≤0)" and v > 0) and not (k == "对偶可行(应≥0)" and v < 0) for k, v in list(checks.items())[:2] + list(checks.items())[3:]) # 情形1: 猜测约束活跃, 解拉格朗日方程组# 由 grad_f + lam*grad_g = 0, g = 0:# x1 = (4-lam)/2, x2 = (6-lam)/2, 代入 x1+x2=4 -> lam=1lam_active = 1.0x_active = np.array([(4 - lam_active) / 2, (6 - lam_active) / 2])print("[情形1] 假设约束活跃, 解析求解:")print(" x* =", x_active, "λ =", lam_active)verify_kkt(x_active, lam_active) # 情形2: 假设约束不活跃, 则 lam=0, 最优解应为无约束最优x_free = np.array([2.0, 3.0])print("\n[情形2] 假设约束不活跃, λ=0, 无约束最优解:")print(" x =", x_free, "λ = 0")verify_kkt(x_free, 0.0)# 手工检查: g(x_free) = 1 > 0, 违反原始可行性, 因此猜想不成立print(" g(x_free) =", g(x_free), "> 0 → 违反原始可行性, 猜想失败, 活跃集应包含该约束") # 情形3: 数值求解器对照from scipy.optimize import minimize cons = [{"type": "ineq", "fun": lambda x: 4 - x[0] - x[1]}]res = minimize(f, np.array([0.0, 0.0]), jac=grad_f, constraints=cons, method="SLSQP")print("\n[情形3] SLSQP 数值解对照:")print(" x* =", res.x)print(" f(x*) =", res.fun)
verify_kkt(x, lam)把 KKT 四条件全部算出并打印,是理解“平衡、合法、推力、贴墙”四项要求的总入口。lam_active = 1.0通过g=0与梯度方程手算出乘子,说明“活跃约束的乘子可以精确解析求出”。x_active = np.array([...])由 λ 反推最优解坐标,展示乘子与解是一体两面的关系。x_free = np.array([2.0, 3.0])无约束最优点恰好违反约束,用它演示“为什么必须激活那道墙”。g(x_free) > 0通过验证原始可行性失败,反过来印证互补松弛里“贴墙才推”的直觉。res.xSLSQP 数值结果与解析解一致,说明活跃集猜想正确、KKT 系统自洽。
常见误区
误区我觉得目标函数有约束,那最优解肯定在约束边界上,所有约束都应该取等号 g(x)=0。
正解约束只是“围栏”,球只有被围栏挡住才会贴墙停。如果无约束最优解本来就在可行域内,那球根本不会碰到墙,约束是松弛的,乘子为零。只有那些恰好挡住球去路的约束才活跃。判断哪些约束活跃,正是互补松弛的核心任务。
为何常见:初学者接触的都是“约束恰好起作用”的教科书例题,很少遇到“约束在最优解处并不起作用”的情况,于是把活跃当成了常态。
误区我解出了拉格朗日方程 ∇f+λ∇g=0,找到驻点就认为是极小点,从不管 λ 的符号。
正解不等式约束的墙只能向可行域内推、不能把人往禁区拽,所以 λ 必须非负。如果算出的 λ<0,说明这个点其实是“被墙拉进禁区”的鞍点或极大点,必须丢弃。平稳性只是必要条件,符号检查才能筛掉伪解。
为何常见:等式约束的乘子可正可负,初学不等式时容易惯性套用,忽略了方向性是新引入的硬性要求。
误区既然要处理约束,我就把所有不等式、等式全部加入拉格朗日函数,认为这样最保险。
正解不活跃的约束(球没碰到墙)即使塞进拉格朗日函数,也会因互补松弛自动令 λ=0,所以数学上无害;但数值上它们会引入冗余变量、拖慢求解、甚至导致病态。正确做法是先借助活跃集思想判断哪些约束可能在最优解处被激活,再有针对性处理。
为何常见:“全都要”的思路符合直觉,而且教科书的矩阵形式确实把约束全部列入,让初学者忽略了两者的本质区别。
误区平稳条件是 ∇f+λ∇g=0,我觉得 ∇f 就是球“下滑的方向”,力的箭头应该指向 ∇f。
正解∇f 指向目标函数上升最快的方向,而球是被重力(下降)驱动的,真实“想动”的方向是 −∇f。墙的推力方向指向可行域内部,即 −∇g(对不等式)。KKT 中的 λ∇g 是数学上的梯度组合,物理上要取反号才对应墙的推力。方向搞反,符号全乱。
为何常见:梯度概念本身对新手有门槛,上升/下降、梯度/负梯度的方向关系未内化时,很容易在符号推演里栽跟头。
误区只要找到了满足 KKT 条件的点,这一定就是全局最小值,可以放心交付。
正解在凸优化中,可行域和目标是凸的,KKT 是全局最优的充要条件;但在非凸问题里,KKT 只是局部最优的必要条件,可能停在小山坡的凹陷处(局部极小、鞍点)。就像球可能被墙根的小石子卡住,重力平衡了,但它不是全球场的最低点。工程中非凸问题需配合多起点、全局搜索等策略。
为何常见:大量公开课以凸问题为例教学,让初学者误以为 KKT 自带全局保证;接触真实非凸模型后仍沿用旧结论。
面试题
Q1. KKT 中互补松弛条件的标准形式是:
- A.λᵢ + gᵢ(x*) = 0
- B.λᵢ − gᵢ(x*) = 0
- C.λᵢ × gᵢ(x*) = 0← 正确答案
- D.λᵢ ÷ gᵢ(x*) = 0
答案:C。互补松弛用乘积为零表达“贴墙才推”:乘子和约束值不可能同时非零。λ+g=0、λ−g=0、λ/g=0 都不符合“二者至少一个为零”的语义,故 C 正确。
Q2. 若最优解处某不等式约束满足 g(x*) = −0.5,则关于该约束说法正确的是:
- A.约束活跃,乘子为正
- B.约束松弛,乘子为零← 正确答案
- C.约束松弛,乘子为正
- D.约束活跃,乘子为零
答案:B。g=−0.5<0 说明球离墙还有距离,约束松弛,墙没有接触球,因此乘子必须为零。这正是互补松弛 λg=0 中 g<0 所对应的分支。
Q3. 关于不等式约束的拉格朗日乘子 λ,KKT 要求的符号条件是:
- A.λ 可以取任意实数
- B.λ 必须大于等于零← 正确答案
- C.λ 必须小于等于零
- D.λ 必须严格大于零
答案:B。不等式约束的墙只能把球推向可行域内部,不能反向拉,因此 λ≥0(对偶可行性)。等式约束乘子才可正可负。λ 严格大于零仅限活跃约束,不代表所有约束。
Q4. 求解 min x² 受约束 x≥1,则最优解与拉格朗日乘子为:
- A.x*=1, λ=2← 正确答案
- B.x*=0, λ=1
- C.x*=1, λ=1
- D.x*=0, λ=0
答案:A。约束写成 g=1−x≤0,无约束最优 x=0 违反约束,故约束活跃,x*=1。KKT:2x+λ(−1)=0,代入 x=1 得 λ=2。此题同时检验平稳性计算与符号习惯。
Q5. LICQ 条件的内容是:
- A.活跃约束的梯度线性无关← 正确答案
- B.目标函数的梯度线性无关
- C.所有约束函数值线性无关
- D.拉格朗日乘子线性无关
答案:A。LICQ 要求活跃约束的梯度 {∇gᵢ(x*)} 线性无关,保证墙的法向方向相互独立,从而 λ 唯一存在。若墙的方向重叠(冗余),乘子会不唯一甚至无界。
Q6. 两个不等式约束在最优解处同时取等号且梯度方向相同,最可能出现的情况是:
- A.两个约束同时活跃且乘子为正
- B.约束退化且乘子不唯一← 正确答案
- C.可行集变为空集无解
- D.两个约束均可安全删除
答案:B。梯度方向相同意味着两面墙并排重叠,LICQ 不成立,平稳性方程组的系数矩阵秩亏,λ 无法唯一分解。这说明约束冗余,应做预处理或正则化,而不是简单删除(可能改变可行域)。
Q7. 下列哪一项不属于 KKT 条件的四个组成部分:
- A.平稳性条件
- B.原始可行性
- C.海森矩阵正定← 正确答案
- D.互补松弛
答案:C。KKT 四条件为平稳性、原始可行性、对偶可行性、互补松弛。海森矩阵正定是二阶充分条件的内容,用于区分极小值与鞍点,并非 KKT 一阶必要条件的组成部分。
Q8. 互补松弛 λᵢgᵢ(x*)=0 允许出现的情形有:
- A.λᵢ>0 且 gᵢ(x*)=0← 正确答案
- B.λᵢ=0 且 gᵢ(x*)<0← 正确答案
- C.λᵢ>0 且 gᵢ(x*)<0
- D.λᵢ=0 且 gᵢ(x*)=0← 正确答案
答案:ABD。乘积为零只要求至少一个因子为 0。A 是活跃约束(贴墙推力正),B 是松弛约束(离墙零推力),D 是边界灰色地带(轻贴未发力),三者都合法。C 中两个因子都非零,乘积不可能为零,违反互补松弛。
Q9. 关于 KKT 条件与最优解关系,下列说法正确的有:
- A.凸问题中满足 KKT 即为全局最优← 正确答案
- B.非凸问题中 KKT 是局部最优的必要条件← 正确答案
- C.所有问题中满足 KKT 都一定是充分条件
- D.乘子可解释为约束的边际价值← 正确答案
答案:ABD。凸问题中 KKT 是充要条件;非凸问题中只保证局部最优的必要性,还需二阶条件辅助判断,故 C 错误。λ 的经济学含义是约束放宽一单位时目标函数的改善量,即影子价格,D 正确。
Q10. 关于 SVM 中互补松弛条件 αᵢ[yᵢ(wᵀxᵢ+b)−1]=0 的几何含义,正确的有:
- A.非支持向量的 α 必为零← 正确答案
- B.α>0 的样本必位于间隔边界上← 正确答案
- C.所有训练样本的 α 都大于零
- D.α>0 的样本构成支撑决策边界的支持向量← 正确答案
答案:ABD。若样本远离间隔边界,则方括号内为正,α 必须为 0;若 α>0,则方括号内必须为 0,即样本恰好在间隔边界上。支持向量正是 α>0 的样本。C 与 A 矛盾,SVM 的稀疏性说明绝大多数 α 为零。