想象一个周末:你打算去爬山,目标是登顶——山峰最高点就是你想要的无约束极值。但景区管理方划了一条观光小路,规定你只能沿着这条路走,不能随便穿越草地和悬崖。这时你的问题就从“哪里最高”变成“在这条路上,哪个位置离峰顶最近、站得最高”。这就是带约束的极值问题。两百多年前,法国数学家拉格朗日想出一个聪明办法:给这条“小路规则”发一张无形的“门票”,把“必须走小路”变成数学上一个可以一起求解的方程。从此,约束不再是障碍,而是被“收编”进目标函数里。这篇文章会用爬山的比喻,带你从零看懂拉格朗日乘子法的每个零件,并看到它在机器学习(尤其是SVM)里的身影。

岗位关联

对AI从业者而言,带约束优化是SVM推导、正则化设计、资源分配类问题的数学地基。搞懂拉格朗日乘子法,你读论文、调模型时能少走三年弯路。

目录
  1. 可视化演示
  2. 约束优化问题
  3. 梯度与等高线
  4. 拉格朗日函数
  5. 乘子几何意义
  6. 等式约束求解
  7. 不等式与KKT
  8. 对偶问题
  9. 机器学习应用
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

展示等式约束下目标函数等高线与约束曲线相切求极值,以及KKT条件处理不等式约束的几何直观。

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

等式约束优化 目标函数f(x,y)的等高线(同心椭圆) 约束曲线g(x,y)=0 最优解:等高线与约束曲线相切点 ∇f = λ·∇g 拉格朗日乘子法:梯度平行处取极值

约束优化问题

先回到爬山。如果景区不设任何限制,你当然会直奔那座山的最高峰——数学上这叫无约束极值问题,求法很直接:找梯度的零点,山峰上坡度为零。但现实里几乎每个任务都有“规矩”:比如景区只开放一条观光小路,你只能沿它前进。这就是约束优化:目标函数照旧是“想站得更高”,但自变量必须落在某条曲线或某个区域内。

把“只能走小路”翻译成数学语言,就成了下面的形式:

所有满足 g(x,y)=0 的点合起来,数学上叫“可行域”。极值只能在这个区域内找,所以先认路,再谈登顶。后面你会发现,拉格朗日乘子法就是为这条“小路”量身定做的指南针。

min⁡x,y  f(x,y)s.t.g(x,y)=0\min_{x,y} \; f(x,y) \quad \text{s.t.} \quad g(x,y)=0
  1. 符号 min 的含义min 是 minimize 的缩写,表示“在允许的范围内,让 f(x,y) 尽量小”(如果想求最大,加个负号即可)。
    min⁡x,y  f(x,y)\min_{x,y} \; f(x,y)
  2. s.t. 的真实身份s.t. 是 subject to 的缩写,意思是“受限于”,它后面写的不是目标,而是规矩本身。
    s.t.\text{s.t.}
  3. 等式约束的结构g(x,y)=0 就是那条观光小路——x 和 y 必须满足这个关系,一步都不能偏离。
    g(x,y)=0g(x,y)=0

梯度与等高线

爬山的人手里都有一张等高线地图:一圈一圈的闭合线代表高度,线越密表示坡越陡。数学里,等高线就是函数值相等的点的连线,记为 f(x,y)=c。有了地图还不够,还要知道该往哪个方向走。梯度就是地图上的箭头,它永远指向函数上升最快的方向,红色箭头往哪指,你就往哪迈。

梯度与等高线之间有一个极美妙的几何关系:在任意一点,梯度方向恰好与等高线的切线垂直。想想就明白——沿着等高线走,高度不变,所以“最陡方向”不可能顺着等高线,而必须垂直地“切开”等高线。

看懂地图和箭头之后,约束优化的几何图像就清楚了:你要在一条固定小路(约束线)上走,同时希望尽量靠近等高线的“圆心”。最优位置就发生在“再往前迈,就会远离峰顶”的那个临界点。

∇f=(∂f∂x,  ∂f∂y)\nabla f = \left( \frac{\partial f}{\partial x}, \; \frac{\partial f}{\partial y} \right)
  1. 偏导数的直觉∂f/∂x 表示“只让 x 动一点点,函数值变多少”,相当于只朝东迈一小步时海拔的变化量。
    ∂f∂x\frac{\partial f}{\partial x}
  2. 梯度的组装把 x 和 y 两个方向的变化率拼成一个向量,这个向量就是梯度 ∇f,它指向最陡上升方向。
    ∇f=(∂f∂x,∂f∂y)\nabla f = \left( \frac{\partial f}{\partial x}, \frac{\partial f}{\partial y} \right)
  3. 等高线与梯度垂直沿等高线方向 f 不变,说明等高线切线与梯度点积为零,即两者垂直。
    ∇f⋅t=0\nabla f \cdot \mathbf{t} = 0

拉格朗日函数

前面我们手里有两样东西:想爬高的目标 f(x,y),和必须走的小路 g(x,y)=0。拉格朗日的天才创意是:给小路发一张“门票”,设票价为 λ。买了票之后,你和景区之间不再有“路规”这个外部约束,因为路规的代价已经被折算进了你登顶的收益里。这张门票价格 λ 是一个待定系数,也叫拉格朗日乘子。

技术上的做法是构造一个新的函数,把目标和约束打包在一起:

为什么这样做能行?因为接下来对 L 分别对 x、y、λ 求偏导并令其为零,你会惊奇地发现:第三个方程恰好就是 g(x,y)=0。也就是说,“买票”这个操作把一条外部路规,完美地变成了内部方程组的一部分。

L(x,y,λ)=f(x,y)+λ g(x,y)L(x,y,\lambda) = f(x,y) + \lambda \, g(x,y)
  1. 原目标项保留f(x,y) 还是原来那个“想站多高”的函数,它是主角不动摇。
    f(x,y)f(x,y)
  2. 门票项的作用λg(x,y) 是“路规的价格”。当你不守规矩(g≠0)时,这项会惩罚总得分;只有守规矩(g=0)时,它才完全没有存在感。
    λ g(x,y)\lambda \, g(x,y)
  3. 为什么要加这一项把两个敌人变成一家人——对 L 求极值的同时,求极值的必须条件会自然逼出约束 g=0。
    L(x,y,λ)=f(x,y)+λg(x,y)L(x,y,\lambda)=f(x,y)+\lambda g(x,y)

乘子几何意义

现在把地图摊开。灰色等高线一圈圈包裹着峰顶,红色小路斜斜地穿过山坡。你沿路从东走到西,海拔不断变化。请问:什么时候你站得最高?答案藏在“相切”里——当你脚下的路与某一条等高线恰好相切时,你再往前走一步,就会顺着这条等高线的内侧下坡,高度开始下降。这个切点,就是约束下的最优点。

相切在数学上怎么表达?两条曲线在某点相切,意味着它们在该点的切向一样,于是它们各自的法线(也就是梯度方向)就应该在同一条直线上。换句话说,目标函数的梯度与约束函数的梯度共线:

这个“相切一刻”就是整座山的转折点。几何意义搞懂了,拉格朗日乘子法就不再是死记公式,而是“找到路与等高线的切点”这个直观动作的代数化。

∇f+λ∇g=0\nabla f + \lambda \nabla g = \mathbf{0}
  1. 梯度共线的含义∇f 与 ∇g 方向平行,说明想往高处走的推力与小路“拉你回来”的力正好在一条线上。
    ∇f  ∥  ∇g\nabla f \;\parallel\; \nabla g
  2. 比例系数 λ平行不一定等长,所以需要一个系数 λ 把它们扯平,于是写成加法形式 \nabla f + \lambda \nabla g=0。
    ∇f=−λ∇g\nabla f = -\lambda \nabla g
  3. λ 等于零的特例如果小路恰好穿过峰顶,约束回路毫无影响,此时 λ=0;λ 越大,说明这条路逼你偏离自由登顶路线越远,“门票”越贵。
    λ=0  ⟺  约束不影响解\lambda=0 \iff \text{约束不影响解}

等式约束求解

有了门票 L 和相切条件,解题就变成三步走。第一步:把 L 对 x、y、λ 分别求偏导;第二步:令三个偏导都等于零,得到一个方程组;第三步:解方程组,得到候选最优点。这套流程好比登山者按路牌三步登顶:看坡度、找方向、验海拔。

把前面讲过的几何直觉写成方程,就是:

来一道经典例题感觉一下:设 f(x,y)=x²+y²,约束 g(x,y)=x+y-1=0,求最小值。三个方程分别是 2x+λ=0、2y+λ=0、x+y-1=0。前两式相减得到 x=y,代入第三式得 x=y=0.5,再代回第一式得 λ=-1。答案:最优点是 (0.5,0.5),最小函数值 0.5,乘子 λ=-1。

三步走完,答案自然浮现。你甚至还能用 λ=-1 反向验证:λ 是负数说明该约束在把解往“下山方向”推——这里的负号只是 λ 定义符号的选择问题,几何上它照样代表“路与等高线相切”。

{∂L∂x=0,∂L∂y=0,∂L∂λ=g(x,y)=0.\begin{cases}\dfrac{\partial L}{\partial x} = 0, \\[6pt]\dfrac{\partial L}{\partial y} = 0, \\[6pt]\dfrac{\partial L}{\partial \lambda} = g(x,y) = 0.\end{cases}
  1. 对 x 求偏导把 y、λ 当常数,L 对 x 求导并令其为零——这是“x 方向上不能更好了”的信号。
    ∂L∂x=0\frac{\partial L}{\partial x}=0
  2. 对 y 求偏导同理,y 方向上也必须“到底了”,两个方向都为零才是真正的高度极值。
    ∂L∂y=0\frac{\partial L}{\partial y}=0
  3. 对 λ 求偏导把 x、y 当常数,得到的就是约束 g(x,y)=0 本身——门票账单核销,路规生效。
    min⁡x2+y2s.t.x+y−1=0  ⇒  x=y=12,  λ=−1\min x^2+y^2 \quad \text{s.t.} \quad x+y-1=0 \;\Rightarrow\; x=y=\tfrac12,\; \lambda=-1

不等式与KKT

现实里的约束不一定都是一条精确的“钢丝绳”——更多时候是一堵“围墙”。比如景区说“不许越过这条红线”,你在线内怎么走都行,只有贴墙时才受限制。数学上,等式约束写 g=0,而不等式约束写成 g(x,y)≤0。处理这种约束,不能再用老版拉格朗日,需要升级成 KKT 条件(Karush–Kuhn–Tucker 条件)。

KKT 的核心是回答一个直觉问题:围墙到底撞没撞到你?如果人站在墙内,墙形同虚设,对应的“门票”λ 就应该等于零;如果人正好贴在墙上,约束才真正起效,此时 λ≥0 且约束取等号。两者必居其一,相乘必然为零:

KKT 的四个方程放在一起,就是“带围墙爬山”的完整说明书。SVM 里的分类边界约束、资源分配里的预算不等式,全部靠这套条件来“收编”。

{∇f+λ∇g=0,g(x,y)≤0,λ≥0,λ g(x,y)=0.\begin{cases}\nabla f + \lambda \nabla g = 0,\\[4pt]g(x,y) \le 0,\\[4pt]\lambda \ge 0,\\[4pt]\lambda \, g(x,y) = 0.\end{cases}
  1. 梯度平稳条件与等式版本相同,最优处目标梯度与约束梯度达成平衡。
    ∇f+λ∇g=0\nabla f + \lambda \nabla g = 0
  2. 原始可行条件解必须待在围墙以内,不能越界。
    g(x,y)≤0g(x,y) \le 0
  3. 乘子非负条件墙只能把你往墙内推,所以 λ 不能为负。
    λ≥0\lambda \ge 0
  4. 互补松弛条件要么墙内漫步(λ=0),要么贴墙借力(g=0),乘积恒为零。
    λ g(x,y)=0\lambda \, g(x,y)=0

对偶问题

有时候直接沿着小巷找最高点很难,换个角度却豁然开朗:与其问“我该走哪条路”,不如问“这条路值多少过路费”。原始问题是从山路直接找极值;对偶问题则是先假想一个过路费 λ,然后看“在收费 λ 的情况下,我愿意付出的最大代价是多少”。这就是拉格朗日对偶。

对偶函数的形式是先把 λ 固定住,对 x、y 求 L 的最小值:

对偶问题的妙处在于:当原始问题变量很多、约束很复杂时,对偶问题往往更好解。SVM 之所以能风靡多年,正是因为它把“找最大间隔平面”这个高维问题,通过拉格朗日对偶变成了一个只有样本数量级的二次规划。

q(λ)=min⁡x,y  L(x,y,λ)q(\lambda) = \min_{x,y} \; L(x,y,\lambda)
  1. 固定 λ 求内层最小把门票价定死,登山者只能在这个价格下寻找让自己最舒服的位置。
    min⁡x,yL(x,y,λ)\min_{x,y} L(x,y,\lambda)
  2. 对偶问题再求最大景区想抬高门票,但抬太高就没人进来,所以最终对 λ 求最大值。
    max⁡λ  q(λ)\max_{\lambda} \; q(\lambda)
  3. 弱对偶与强对偶对偶问题给出的值永远不超过原始问题最小值(弱对偶);在凸优化等条件下两者恰好相等(强对偶)。
    q∗≤p∗(weak),q∗=p∗(strong)q^* \le p^* \quad \text{(weak)}, \qquad q^* = p^* \quad \text{(strong)}

机器学习应用

现在把拉格朗日乘子法从山野带回算法世界。支持向量机 SVM 要做的事,是在两类点之间找一条最宽的“隔离带”:把两类点正确分开是硬性约束,让隔离带尽量宽是优化目标。这正是典型的带不等式约束的极值问题。目标函数是 1/2‖w‖²(希望间隔大),约束是每个样本都得分类正确。

用拉格朗日对偶把 SVM 的原始问题改写,会得到一个关于 α(每个样本一个拉格朗日乘子)的漂亮目标:

解完这个对偶问题后你会发现:大量 αᵢ 等于零,只有少数“贴着隔离带边缘”的样本 αᵢ>0——它们就是支持向量。拉格朗日乘子法在这里不只是解题工具,更揭示了“哪些数据点真正影响模型”这个本质问题。

max⁡α∑i=1nαi−12∑i=1n∑j=1nαiαjyiyj⟨xi,xj⟩\max_{\alpha} \sum_{i=1}^{n} \alpha_i - \frac{1}{2} \sum_{i=1}^{n} \sum_{j=1}^{n} \alpha_i \alpha_j y_i y_j \langle x_i, x_j \rangle
  1. 每个样本一个乘子 αᵢ原问题的 λ 推广成向量 α,每个训练样本都有一张“分类门票”。
    αi\alpha_i
  2. 线性项求总和一堆门票收入加起来,代表“尽量充分利用每个支持向量”。
    ∑i=1nαi\sum_{i=1}^{n} \alpha_i
  3. 二次项内积两两样本的相似度乘以各自标签,构成耦合惩罚,约束分类间隔。
    12∑i,jαiαjyiyj⟨xi,xj⟩\frac{1}{2}\sum_{i,j} \alpha_i \alpha_j y_i y_j \langle x_i, x_j \rangle
  4. 隐藏约束KKT 还要求 α≥0 且 \sum αᵢyᵢ=0,这些条件让解只跟少数“贴着墙”的点有关。
    αi≥0,∑i=1nαiyi=0\alpha_i \ge 0, \quad \sum_{i=1}^{n} \alpha_i y_i = 0

AI 应用场景

SVM 分类器训练

阶段:模型训练 / 数学推导

解决的问题:传统感知机只求“分对”,不关心分类边界稳不稳,导致对新样本泛化差。AI 需要一条与两组数据距离都尽可能远的“最宽马路”——这正是带不等式约束的优化问题。拉格朗日对偶将原问题转化为只依赖样本内积的二次规划,避开高维特征空间的显式计算。

具体案例:银行做信用评分,有两类客户(守约/违约),特征是人月收入、负债率。SVM 通过拉格朗日对偶求出最大间隔超平面,模型只保留违约边界附近的少数支持向量,新客户来时只需计算与支持向量的内积即可判定风险。

金融投资组合优化

阶段:策略优化 / 数学建模

解决的问题:传统人工配资靠拍脑袋或等权重,风险不可控。现代组合优化要求在“期望收益达到某目标”的等式约束下,最小化组合方差(风险),这正是拉格朗日乘子法的标准战场。

具体案例:量化基金配置三只股票,目标是年化收益不低于 12%,在此约束下求夏普比率最高的权重组合。用拉格朗日乘子法求偏导方程组,得到各股票的最优仓位,再结合 KKT 处理“单只股票仓位不超过 40%”的不等式约束,形成可落地的风控方案。

广告预算分配

阶段:优化决策 / 资源配置

解决的问题:营销团队要在总预算固定的等式约束(花完钱)和单渠道预算上限的不等式约束(不能超投)下,最大化整体投放 ROI。直接用业务直觉调预算耗时且无法保证最优;拉格朗日乘子法把预算约束写成 g≤0,用 KKT 判断哪些渠道“顶到上限”(边界生效)、哪些渠道“还有余量”(墙内漫步)。

具体案例:某电商大促预算 100 万,分投搜索、信息流、短视频三个渠道。每个渠道 ROI 曲线不同,构建拉格朗日函数后解方程组,得到各渠道最优分配为 40/35/25 万,并发现短视频渠道的 λ 为零——说明多给它预算也不会带来额外收益。

Python 演示

python45 行
import numpy as npfrom scipy.optimize import fsolve # 目标函数 f(x, y) = x^2 + y^2, 目标是让函数值尽量小def objective(v):    x, y = v    return x * x + y * y # 等式约束 g(x, y) = x + y - 1 = 0, 只能走这条"小路"def constraint(v):    x, y = v    return x + y - 1.0 # 拉格朗日函数 L = f + lambda * g 的 KKT 方程组def kkt_system(vars_):    x, y, lam = vars_    return [        2.0 * x + lam,      # dL/dx = 0        2.0 * y + lam,      # dL/dy = 0        x + y - 1.0         # dL/dlambda = 0, 还原约束    ] sol = fsolve(kkt_system, [0.0, 0.0, 0.0])x_opt, y_opt, lam_opt = solf_opt = objective([x_opt, y_opt])g_opt = constraint([x_opt, y_opt]) print("最优点: x=%.4f, y=%.4f" % (x_opt, y_opt))print("目标函数值: f = %.4f" % f_opt)print("约束残差: g = %.2e" % g_opt)print("拉格朗日乘子: lambda = %.4f" % lam_opt) # 数值梯度验证: 最优处 grad_f + lambda * grad_g 应接近零def numerical_gradient(func, v, h=1e-6):    grad = np.zeros_like(v)    for i in range(len(v)):        vp = v.copy(); vp[i] += h        vm = v.copy(); vm[i] -= h        grad[i] = (func(vp) - func(vm)) / (2.0 * h)    return grad grad_f = numerical_gradient(objective, [x_opt, y_opt])grad_g = numerical_gradient(constraint, [x_opt, y_opt])residual = grad_f + lam_opt * grad_gprint("梯度检验: grad_f + lambda*grad_g =", residual)
目的:用 scipy 的 fsolve 数值求解拉格朗日乘子法的 KKT 方程组,验证最优点与乘子,并用数值梯度做二次检验。
  1. from scipy.optimize import fsolve引入求解非线性方程组的数值工具,相当于“自动解方程组的计算器”
  2. def kkt_system(vars_):定义 KKT 的三个方程:两个梯度条件加一个约束还原
  3. fsolve(kkt_system, [0.0, 0.0, 0.0])从初始猜测 (0,0,0) 出发迭代,找到 x、y、λ 的数值解
  4. numerical_gradient(func, v, h=1e-6)用中心差分算梯度,不依赖手推导数,适合任意黑盒函数
  5. residual = grad_f + lam_opt * grad_g检验最优解处梯度共线条件:结果接近零说明拉格朗日条件确实成立

常见误区

误区拉格朗日乘子 λ 就像正则化惩罚系数,越大说明我对约束的重视程度越高,所以要给它设一个合适的“惩罚强度”。

正解λ 不是我们手动调的惩罚权重,而是方程组的解,它衡量“约束对最优值的影响大小”,本质是约束的边际价值(影子价格)。λ 越大,说明这个约束把解“推开”得越远,而不是“约束越弱”。λ=0 才意味着约束对最优解毫无影响——比如小路恰好穿过峰顶。

为何常见:因为 λ 经常和正则化里的 C 放在一起讲,初学者容易把“乘子”混同为“正则化系数”,忽视了它其实是解出来的未知量。

误区不等式约束不就是把 g=0 改成 g≤0 嘛?把拉格朗日函数抄过来,求偏导为零就完事了。

正解KKT 比等式版本多了三个新内容:乘子非负 λ≥0、约束不等式 g≤0、互补松弛 λg=0。尤其互补松弛是等式版本完全没有的新思想——它精确描述“墙内不如墙边”的切换逻辑。直接用老版拉格朗日处理不等式,会漏掉边界激活判断,求出的“最优点”可能根本不合法。

为何常见:KKT 的四个方程看起来只是拉格朗日方程的加长版,大家容易忽略新增条件的必要性,只有实际算错过一个不等式案例才会真正记住。

误区既然原始问题和对偶问题是一个硬币的两面,那它们的解一定相等,随便解哪个都行。

正解弱对偶 q*≤p* 是永远成立的,但强对偶 q*=p* 需要额外条件(通常是凸优化加 Slater 约束规范)。对于非凸问题(比如神经网络损失函数),对偶间隙可以严格大于零,此时对偶问题只能给出一个下界,不能直接当作原始解。

为何常见:教材和公开课里最常展示的是凸问题案例,处处强对偶成立,给初学者造成了“永远相等”的错觉。

误区SVM 对偶里看到 α_i,再看拉格朗日乘子法的 λ,觉得就是同一个东西换个字母。

正解SVM 的 α 确实是每个样本对应的拉格朗日乘子,但多了两条专门的约束:α≥0 和 \sum αᵢyᵢ=0。前者来自不等式约束的非负性,后者则来自原始问题中的决策边界参数 b 对应的梯度条件。α 的含义也从“一条路的门票”细化成“每个样本的边界价值”。

为何常见:符号从 λ 变成 α 会让人误以为只是记号差异,实际是约束结构不同,导致解的性质完全不同——大部分 α 稀疏为零,这正是支持向量的由来。

面试题

Q1. 拉格朗日乘子法中,新引入的变量 λ 的主要作用是什么?

单选题 · easy

  • A.反应约束松紧的待定系数← 正确答案
  • B.控制学习步长的超参数
  • C.惩罚离群点的正则强度
  • D.决定收敛速度的动量值

答案:A。λ 是拉格朗日乘子,是把约束 g=0 并进目标函数时引入的待定系数,几何上代表约束的松紧程度。它不是学习率、正则强度或动量,那些是优化算法的概念,与约束极值无关。

Q2. 在等式约束的极值点处,目标函数梯度与约束函数梯度满足什么关系?

单选题 · easy

  • A.两者相互垂直
  • B.两者方向共线← 正确答案
  • C.两者没有关联
  • D.两者大小相等

答案:B。最优处等高线与约束曲线相切,切线的法线即梯度方向,因此 ∇f 与 ∇g 共线(方向相同或相反)。垂直意味着沿约束走还能改变函数值,那就不是极值点;大小相等并非必要,因为还有 λ 这个比例系数兜底。

Q3. 对拉格朗日函数 L=f+λg 求 ∂L/∂λ=0 时,等价于什么?

单选题 · easy

  • A.约束函数等于零← 正确答案
  • B.目标函数等于零
  • C.乘子数值等于零
  • D.梯度模长等于零

答案:A。L 对 λ 求偏导时,f 不含 λ 所以为零,剩下恰好是 g(x,y)。令其为零就是让约束 g=0 成立,也就是“门票账单核销,路规生效”。这一步把外部约束原封不动地变回方程组的一员。

Q4. 若约束曲线恰好经过无约束最优点,此时拉格朗日乘子 λ 的数值是多少?

单选题 · mid

  • A.弹性系数必须大于零
  • B.乘子数值恰好为零← 正确答案
  • C.约束强度达到无穷
  • D.可行域缩小为一点

答案:B。当约束不改变原始最优解时,约束“形同虚设”,它对最优值的影响为零,因此 λ=0。几何上,小路直接穿过峰顶,在山顶处等高线与路相交但不需要额外的力把解拉偏,门票价格为零。

Q5. 关于 KKT 互补松弛条件 λg=0 的正确理解是?

单选题 · mid

  • A.墙永远约束着解
  • B.有且仅有一个为零← 正确答案
  • C.目标函数必为零
  • D.约束函数必为零

答案:B。互补松弛说的是 λ 和 g 的乘积为零,即要么约束没激活(g<0 时 λ=0),要么约束激活且取边界(g=0 时 λ≥0),至少一个为零,也可能同时为零。它还保证 “墙内漫步” 与 “贴墙借力” 两种状态互斥且完备。

Q6. 强对偶 q*=p* 一般需要什么前提条件?

单选题 · mid

  • A.目标函数必须非凸
  • B.凸优化且满足约束← 正确答案
  • C.去掉全部约束条件
  • D.乘子取负数即可

答案:B。强对偶需要原始问题是凸优化(目标凸、约束可行域凸),且满足 Slater 条件等约束规范。非凸问题通常只有弱对偶 q*≤p*,对偶间隙大于零,不能简单用对偶解代替原始解。去掉约束就退回无约束问题,与对偶无关。

Q7. SVM 对偶问题中,拉格朗日乘子 αᵢ>0 对应的训练样本叫什么?

单选题 · hard

  • A.正则项惩罚样本
  • B.支持向量样本点← 正确答案
  • C.训练噪声异常点
  • D.无关背景样本点

答案:B。KKT 互补松弛决定,只有贴着间隔边界的样本才满足松弛条件取等号,这些样本的 αᵢ 非零,叫支持向量。它们真正决定分类超平面的位置,删掉其他样本模型不变,删掉任何一个支持向量模型都会改变。

Q8. 拉格朗日乘子法的适用场景有哪些?

多选题 · easy

  • A.带等式约束的极值← 正确答案
  • B.带不等式约束优化← 正确答案
  • C.无约束线性回归算法
  • D.求解简单一次方程

答案:AB。等式约束用经典拉格朗日函数,不等式约束用 KKT 推广版本,两者本质上都是拉格朗日乘子法的领地。无约束问题不需要乘子,直接梯度为零即可;一次方程求解不涉及极值优化,与拉格朗日无关。

Q9. 关于原始问题与对偶问题的关系,哪些说法正确?

多选题 · mid

  • A.弱对偶关系恒成立← 正确答案
  • B.强对偶时间隙为零← 正确答案
  • C.对偶问题一定更简单
  • D.对偶函数必然递增

答案:AB。弱对偶 q*≤p* 对任何问题都成立;强对偶等价于对偶间隙为零。对偶问题“通常”更简单但不是必然,比如某些问题对偶形式反而更复杂。对偶函数是凹函数(在凸问题中),但不一定单调递增。

Q10. KKT 条件包含以下哪些内容?

多选题 · hard

  • A.梯度与约束方向共线← 正确答案
  • B.原始约束必须满足← 正确答案
  • C.乘子数值必须非负← 正确答案
  • D.互补松弛条件成立← 正确答案

答案:ABCD。KKT 的四个条件缺一不可:∇f+λ∇g=0(梯度平稳)、g≤0(原始可行)、λ≥0(对偶可行)、λg=0(互补松弛)。这四者共同刻画了“带围墙爬山”的最优性,少了任何一个都可能把墙外或墙内的错误点误判为最优点。