老王要装修新房。设计师捧来一张“理想之家”效果图——沙发比床大、投影占满墙,怎么舒服怎么来。老王一看报价单,笑了:预算不够一半,还砸了承重墙。问题于是从“怎么装最舒服”变成了“预算和规则之内,怎么装最舒服”。这种戴着镣铐跳舞的数学问题,就叫约束优化。巧的是,机器学习里到处是“老王”:SVM 想留出最宽间隔,却被“分类必须全对”卡住;L1 正则想在预算内挑特征,于是把没用的系数砍到零;信贷模型既要准,又要对不同人群一碗水端平;对抗训练希望模型扛得住最坏的小扰动。跟着老王装修一趟,你会发现它们共用同一副骨架——约束优化。

岗位关联

对 AI 从业者来说,约束优化是把 SVM、L1 正则、公平性与对抗训练统一起来的数学骨架;学会建模、对偶与 KKT,你就能设计带约束的模型,也能读懂论文里最硬核的推导。

目录
  1. 可视化演示
  2. 约束优化基础
  3. SVM间隔最大化
  4. L1正则稀疏性
  5. 公平性约束
  6. 对抗扰动球
  7. 拉格朗日对偶
  8. KKT条件
  9. 求解算法
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

展示SVM间隔最大化、L1与L2正则化约束区域对比及KKT最优性条件,交互切换三种模式探索约束优化理论。

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

'+CAPS.mode1+'

约束优化基础

设计师给老王看的“理想之家”效果图,沙发够大、投影够亮,可老王一算账:总价超预算一倍,还碰了承重墙。理想方案好是好,可惜不在“允许范围”内。老王把预算上限、户型红线、物业规定全列出来,这些条件圈出一个允许区域——数学上叫可行域(feasible region)。

机器学习的训练过程也一样:我们要最小化损失函数 f(x),x 是模型参数,但 x 不能乱跑,必须待在约束圈出的可行域里。等式约束 h_i(x)=0 像“家具面积必须恰好占 60%”,不等式约束 g_j(x)≤0 像“花费不能超预算”。深度学习里的权重归一化、正则预算、公平性比例,几乎都能装进这个框架。

写成标准形式就是下面这个优化问题。注意:自由解(不考虑约束的最优点)常常落在可行域之外——这正是约束优化的核心矛盾。

min⁡x∈Rnf(x)s.t.hi(x)=0  (i=1,…,p),gj(x)≤0  (j=1,…,q)\displaystyle \min_{x \in \mathbb{R}^n} f(x) \quad \text{s.t.} \quad h_i(x) = 0\;(i=1,\ldots,p), \quad g_j(x) \leq 0\;(j=1,\ldots,q)

1. min 符号:让目标函数 f(x) 尽可能小,对应装修中让“不满意程度”最低。

min⁡\min

2. 决策变量 x:x 是 n 维向量,在机器学习里就是模型参数(权重),对应老王每件家具的尺寸与位置。

x∈Rnx \in \mathbb{R}^n

3. s.t.:subject to 的缩写,读作“在……的约束之下”,后面的内容就是规则本身。

s.t.\text{s.t.}

4. 等式约束:h_i(x)=0 是必须严格满足的等式,像“儿童房面积必须恰好占全屋 30%”,一条都不能差。

hi(x)=0,  i=1,…,ph_i(x) = 0,\; i = 1, \ldots, p

5. 不等式约束:g_j(x)≤0 是更常见的约束,像“总花费 ≤ 预算”,SVM、L1、公平性里几乎都是它。

gj(x)≤0,  j=1,…,qg_j(x) \leq 0,\; j = 1, \ldots, q

老王盯着效果图叹气:再好的设计,够不着可行域就是废纸。约束优化教他的第一课:先画可行域,再谈最优。

SVM间隔最大化

老王家客厅要同时容纳儿童活动区与会客区。他在地上贴了两条胶带,中间留出一条“安全走道”——走道越宽,孩子跑闹、客人走动就越不容易互相打扰。可走道再宽,总不能把沙发挤到阳台去,于是他要求所有家具都退到胶带外侧至少 30 公分。

SVM(支持向量机)做的就是同样的事:给两类样本找一条分界线,使两类之间的“走道”(间隔,margin)最宽。但分界线不能乱画——所有样本必须被正确分类,并且离分界线至少一个单位距离。这个“至少一个单位”就是约束。

把“间隔最大”翻译成数学:分界线 w^T x + b = 0,间隔宽度为 2/||w||,最大化间隔等价于最小化 1/2||w||²。

min⁡w,b12∥w∥2s.t.yi(wTxi+b)≥1,i=1,…,m\displaystyle \min_{w,b} \frac{1}{2}\|w\|^2 \quad \text{s.t.} \quad y_i\bigl(w^T x_i + b\bigr) \geq 1, \quad i = 1, \ldots, m

1. 间隔目标:最大化间隔 2/||w|| 等价于最小化 1/2||w||²,平方与系数是为了求导方便。

min⁡w,b12∥w∥2\min_{w,b} \frac{1}{2}\|w\|^2

2. 法向量 w:w 决定分界线的方向,||w|| 越小间隔越宽,就像走道越宽需要胶带越“直”。

ww

3. 函数间隔:w^T x_i + b 的符号判断样本在哪一侧,绝对值表示离分界线的远近。

wTxi+bw^T x_i + b

4. 标签 y_i:y_i ∈ {+1, −1} 表示两类,乘上函数值后要求 ≥1,等于“必须分对且离分界线至少 1 个单位”。

yi=+1 或 −1y_i = +1 \text{ 或 } -1

5. 逐样本约束:i=1,…,m 表示每个样本都要满足这条不等式,漏掉一个,走道就白划了。

yi(wTxi+b)≥1,  i=1,…,my_i (w^T x_i + b) \geq 1,\; i = 1, \ldots, m

老王发现,决定走道宽度的不是所有家具,而是紧贴胶带的那几件——这就是支持向量。模型参数再多,真正“卡住”约束的只有少数几个样本。

L1正则稀疏性

预算被砍一半,老王重新选家具。方案 A:沙发、投影、餐桌全换成便宜款,每样都降级。方案 B:把投影仪和跑步机直接划掉,集中预算买一张好沙发。老王选了 B——家里东西少了,反而清爽。

方案 A 是 L2 正则:所有系数等比缩小,谁也不清零。方案 B 是 L1 正则:部分系数直接被压成 0,得到“稀疏解”。写成优化问题:求回归系数 w 时,给 w 加一个“预算帽” ||w||₁ ≤ C。

为什么 L1 会归零而 L2 不会?因为可行域形状不同。L1 的 ||w||₁ ≤ C 是菱形,有尖角立在坐标轴上;L2 的 ||w||₂² ≤ C 是圆球,处处圆滑。损失函数的等高线第一次碰到可行域时,碰到菱形多半在尖角上——尖角处某些 w_j=0。

min⁡w12∥y−Xw∥2s.t.∥w∥1≤C\displaystyle \min_{w} \frac{1}{2}\|y - Xw\|^2 \quad \text{s.t.} \quad \|w\|_1 \leq C

1. 拟合损失:||y − Xw||²/2 是预测与真实的残差平方和,衡量模型拟合得好不好。

min⁡w12∥y−Xw∥2\min_w \frac{1}{2}\|y - Xw\|^2

2. 系数向量 w:每个 w_j 表示第 j 个特征的重要性,是老王购物清单上的每件家具。

w=(w1,…,wd)Tw = (w_1, \ldots, w_d)^T

3. L1 范数:||w||₁ = Σ|w_j|,把所有系数的绝对值加起来,相当于装修总预算。

∑j=1d∣wj∣\sum_{j=1}^{d} |w_j|

4. 预算上限 C:C 越小,模型越穷,越必须砍掉不重要的特征,稀疏解越明显。

∥w∥1≤C\lVert w \rVert_1 \leq C

“断舍离”让老王的钱花在刀刃上,L1 让模型把能力集中在真正有信息的特征上——顺便带来了可解释性。这就是为什么高维场景首选 L1。

公平性约束

老王有两个孩子,分房必须公平。他定了死规矩:不管总面积多大,两个孩子房间面积必须一模一样。这条规矩让设计师挠头——但它不是道德口号,而是一条硬性约束,写进合同。

机器学习里的公平性约束同理。比如信贷模型预测“是否放贷”,如果对男女群体给出不同的正预测率,就涉嫌歧视。把“公平”公式化:让不同受保护属性组 A 的正预测概率相等,这就是统计均等(Statistical Parity)。

于是训练变成:在损失最小化的同时,限制模型在两组间的预测差异。更严格的机会均等(Equalized Odds)还要求“真实标签相同的人,预测表现也相同”。

min⁡θL(θ)s.t.P(y^=1∣A=0)=P(y^=1∣A=1)\displaystyle \min_{\theta} \mathcal{L}(\theta) \quad \text{s.t.} \quad \mathrm{P}\bigl(\hat{y}=1 \mid A=0\bigr) = \mathrm{P}\bigl(\hat{y}=1 \mid A=1\bigr)

1. 训练损失:L(θ) 是模型在训练集上的损失(如交叉熵),对应“客厅舒适度”。

min⁡θL(θ)\min_\theta \mathcal{L}(\theta)

2. 预测 ŷ:ŷ=1 表示模型给出正预测(如“批准贷款”)。

y^=1\hat{y} = 1

3. 受保护属性 A:A 是性别、族群等敏感属性,A=0 与 A=1 是两组对照人群。

A∈{0,1}A \in \{0, 1\}

4. 统计均等:约束 A=0 组与 A=1 组的正预测率相等,就是“房间面积必须一样”的数学写法。

P(y^=1∣A=0)=P(y^=1∣A=1)\mathrm{P}(\hat{y}=1 \mid A=0) = \mathrm{P}(\hat{y}=1 \mid A=1)

老王发现,公平约束和“客厅最舒适”经常打架:面积一样,功能就受限。约束优化不消除矛盾,而是给出矛盾的最优折中点——影子价格会告诉你公平到底“值多少钱”。

对抗扰动球

老王所在城市多地震,装修公司建议:家具上防震支架,花瓶加固定胶。老王的逻辑很简单——花小钱,保证地震轻晃时整屋不乱。他不是随便晃一晃测试,而是按“最坏晃动”来加固。

对抗训练(adversarial training)同理:模型在干净数据上再准,输入加一点肉眼不可见的扰动 δ 就可能认错。攻击者在扰动球 ||δ||_p ≤ ε 内寻找最坏扰动;防御者(模型)要在最坏扰动下仍然损失最小。这就是 min-max 结构。

写成目标函数:外层 min 是训练参数,内层 max 是寻找最坏扰动。这个结构和“老王按最坏地震波做加固”是同一个逻辑。

min⁡θE(x,y)∼D[max⁡∥δ∥p≤εℓ(fθ(x+δ),y)]\displaystyle \min_{\theta} \mathbb{E}_{(x,y)\sim\mathcal{D}}\left[\max_{\|\delta\|_p \leq \varepsilon} \ell\bigl(f_\theta(x+\delta), y\bigr)\right]

1. 期望损失:对所有训练样本 (x,y) 求平均损失,是模型在数据分布上的整体表现。

E(x,y)∼D[ ⋅ ]\mathbb{E}_{(x,y) \sim \mathcal{D}}[\,\cdot\,]

2. 内层 max:攻击者在扰动球内寻找让损失最大的 δ,代表“按最坏的地震波测试”。

max⁡∥δ∥p≤εℓ(fθ(x+δ),y)\max_{\|\delta\|_p \leq \varepsilon} \ell(f_\theta(x+\delta), y)

3. 扰动球约束:||δ||_p ≤ ε 限定扰动很小,肉眼不可见但足以骗过模型。

∥δ∥p≤ε\|\delta\|_p \leq \varepsilon

4. 外层 min:训练参数 θ,让最坏扰动下的损失也尽量小,这就是“防震加固”。

min⁡θE[max⁡ℓ]\min_\theta \mathbb{E}\bigl[\max \ell\bigr]

老王多花两千块买防震支架,换来的是地震时整屋资产安全;对抗训练多花几倍算力,换来的是恶意输入下模型依然可用。扰动球半径 ε 就像防震等级,定得越大越稳,也越贵。

拉格朗日对偶

老王老婆问:如果预算再砍一万块,舒适度要损失多少?老王算了半天,挤出两个字:“心疼”。其实这个“每单位资源对应的价值变化”有个数学名字——影子价格。在约束优化里,它就是拉格朗日乘子。

把每个约束乘以对应的乘子,再加进目标函数,就得到拉格朗日函数 L。原本“目标 + 约束”的难题,被改造成一个无约束问题。对偶理论更进一步:先固定乘子对 x 求最小,再对乘子求最大,得到的对偶问题常常比原问题好解。

对偶问题始终给出原问题最优值的下界;当强对偶成立(凸问题 + 约束规格),对偶间隙为零,两个问题完全等价。

L(x,λ,μ)=f(x)+∑i=1pλihi(x)+∑j=1qμjgj(x)\displaystyle L(x,\lambda,\mu) = f(x) + \sum_{i=1}^{p} \lambda_i h_i(x) + \sum_{j=1}^{q} \mu_j g_j(x)

1. 拉格朗日函数:把约束乘以乘子后加进目标,得到一个无约束的 L。

L(x,λ,μ)=f(x)+∑i=1pλihi(x)+∑j=1qμjgj(x)L(x, \lambda, \mu) = f(x) + \sum_{i=1}^{p} \lambda_i h_i(x) + \sum_{j=1}^{q} \mu_j g_j(x)

2. 等式乘子 λ:λ_i 可正可负,表示“面积红线”这条等式约束每紧一单位带来的价值变化。

λi∈R\lambda_i \in \mathbb{R}

3. 不等式乘子 μ:μ_j ≥ 0,表示“预算约束”的影子价格,只有约束绷紧才有正价格。

μj≥0\mu_j \geq 0

4. 对偶问题:先对 x 求最小、再对乘子求最大,给出原问题最优值的下界。

max⁡λ,μ≥0min⁡xL(x,λ,μ)\max_{\lambda, \mu \geq 0} \min_x L(x, \lambda, \mu)

老王从此会算账:影子价格高,说明预算卡得太紧,“借钱装修”值得;影子价格低,说明约束宽松,不必为它折腾。对偶就是帮工程师判断“哪个约束值得优化”。

KKT条件

装修验收那天,老王请了三个检查员。第一个查“力平衡”:你明明想继续往理想方案方向挪家具,墙的反推力是否正好顶住你?第二个查“不越界”:有没有超预算、砸承重墙?第三个查“松紧”:如果某项预算还没用完,对应的“心疼程度”必须为零。

这三个检查员在优化理论里合称 KKT 条件,是约束最优点的“竣工验收标准”。满足它们,x* 才可能是最优点;在凸问题里,满足 KKT 就一定是最优点。

KKT 有四条:平稳性(stationarity)、原问题可行性、对偶可行性、互补松弛(complementary slackness)。

{∇f(x∗)+∑i=1pλi∇hi(x∗)+∑j=1qμj∇gj(x∗)=0hi(x∗)=0,  gj(x∗)≤0μj≥0μjgj(x∗)=0\displaystyle \begin{cases} \nabla f(x^*) + \sum_{i=1}^{p}\lambda_i \nabla h_i(x^*) + \sum_{j=1}^{q}\mu_j \nabla g_j(x^*) = 0 \\[2mm] h_i(x^*) = 0,\; g_j(x^*) \leq 0 \\[2mm] \mu_j \geq 0 \\[2mm] \mu_j g_j(x^*) = 0 \end{cases}

1. 平稳性:在最优处,目标梯度与所有约束梯度的加权和抵消——墙的反推力顶住了你前进的力。

∇f(x∗)+∑iλi∇hi(x∗)+∑jμj∇gj(x∗)=0\nabla f(x^*) + \sum_i \lambda_i \nabla h_i(x^*) + \sum_j \mu_j \nabla g_j(x^*) = 0

2. 原问题可行:x* 必须在可行域内/边界上,没超预算、没砸承重墙。

hi(x∗)=0,  gj(x∗)≤0h_i(x^*) = 0,\; g_j(x^*) \leq 0

3. 对偶可行:所有不等式乘子非负,罚款单价不能是负数。

μj≥0\mu_j \geq 0

4. 互补松弛:μ_j 与 g_j(x*) 至少一个为 0——约束没绷紧不收钱,绷紧了才定价。

μjgj(x∗)=0\mu_j g_j(x^*) = 0

三个检查员一盖章,老王才签收。KKT 的好处是:不用穷举所有方案,只要检查这四条,就能确认当前方案是否“在规则内做到了最好”。

求解算法

方案定了,怎么施工?老王有三种办法。办法一:每挪一步家具就量一下尺,出界就退回来——投影梯度法。办法二:在账本上写“超预算每万元罚一千块”——惩罚法。办法三:老王管设计,老婆管预算,各改各的清单,每晚对一次账——ADMM。

投影梯度法最直观:先按梯度下降更新参数,再把点“投影”回可行域。公式一眼就能看懂——先走一步,踩线就退回界内。

惩罚法把约束变成损失里的惩罚项,罚得越狠越接近硬约束;ADMM 把大问题拆成子问题交替求解,适合大规模分布式场景。实践中 SVM 常用 SMO,L1 常用坐标下降/近端梯度,本质都是“在可行域附近做文章”。

xk+1=PC(xk−ηk∇f(xk))\displaystyle x_{k+1} = \mathcal{P}_{\mathcal{C}}\bigl(x_k - \eta_k \nabla f(x_k)\bigr)

1. 当前方案 x_k:第 k 轮迭代的参数,老王第 k 版家具布置图。

xkx_k

2. 梯度 ∇f(x_k):损失下降最快的方向,告诉老王“该往哪挪”。

∇f(xk)\nabla f(x_k)

3. 梯度下降步:沿负梯度走一小步 η_k,得到新方案;这一步可能出界。

xk−ηk∇f(xk)x_k - \eta_k \nabla f(x_k)

4. 投影算子 P_C:把出界的点拉回可行域,像“踩线就退回界内”。

PC(⋅)\mathcal{P}_{\mathcal{C}}(\cdot)

5. 完整迭代:先走再投影,反复进行直到收敛到边界上的最优。

xk+1=PC(xk−ηk∇f(xk))x_{k+1} = \mathcal{P}_{\mathcal{C}}\bigl(x_k - \eta_k \nabla f(x_k)\bigr)

老王和老婆对账三天,终于达成一致:不超预算,又接近理想。好的求解算法就是让“理想”与“规则”两个力反复拉锯,最后收敛到可行域边界上那个唯一的平衡点。

AI 应用场景

银行信贷的公平性约束

阶段:模型训练与部署前评估

解决的问题:传统评分卡用历史数据训练,容易把历史偏见学进模型(如对特定群体放贷率偏低)。AI 的做法是把“统计均等/机会均等”写成硬约束,训练时在损失函数和公平性之间求最优折中,而不是等模型上线后才发现歧视。就像老王把“房间面积相等”写进合同,而不是事后补救。

具体案例:某消费金融公司在信贷模型中加机会均等约束后,不同性别组获批率差从 18% 降到 3%,同时整体 AUC 仅下降 0.02,模型在监管审计中顺利通过。

自动驾驶的对抗鲁棒性

阶段:模型鲁棒性训练(对抗训练)

解决的问题:普通训练只保证“平均输入”上表现好,面对恶意贴纸、雨雪光照扰动时准确率断崖。用扰动球 + min-max 训练,让模型在最坏扰动下依然稳定,相当于装修时按“最坏地震波”加固,而不是“随便晃一晃”。

具体案例:某自动驾驶团队对交通标志识别模型做 PGD 对抗训练(ε=0.05),在物理攻击测试中准确率从 47% 提升到 89%,且对随机噪声的鲁棒性同步提升。

高维特征选择(L1 约束)

阶段:特征工程与模型压缩

解决的问题:基因表达、文本词袋等场景特征维度可达数万甚至数十万,直接训练既过拟合又不可解释。用 L1 约束的回归(LASSO 的约束形式)把无关特征系数压到 0,留下的特征就是“预算内值得买的家具”。

具体案例:某生物信息团队在 2 万维基因表达数据上用 L1 约束回归筛出 23 个关键基因,模型解释性和 AUC 都优于全特征模型,且训练时间减少 70%。

Python 演示

python31 行
import numpy as np def project_l1_ball(w, budget):    """把 w 投影到 L1 球 {w : ||w||_1 <= budget} 内"""    if np.abs(w).sum() <= budget:        return w    mu = np.sort(np.abs(w))[::-1]    cum = np.cumsum(mu)    rho = np.nonzero(mu * np.arange(1, len(mu) + 1) > cum - budget)[0][-1]    theta = (cum[rho] - budget) / (rho + 1)    return np.sign(w) * np.maximum(np.abs(w) - theta, 0) def l1_constrained_sgd(X, y, budget, lr=0.01, n_iter=500):    """投影梯度法求解: min ||Xw - y||^2  s.t. ||w||_1 <= budget"""    n = X.shape[1]    w = np.zeros(n)    for _ in range(n_iter):        grad = 2 * X.T @ (X @ w - y)        w = project_l1_ball(w - lr * grad, budget)    return w if __name__ == "__main__":    np.random.seed(42)    X = np.random.randn(200, 10)    w_true = np.zeros(10)    w_true[:3] = [3.0, -2.0, 1.5]    y = X @ w_true + 0.1 * np.random.randn(200)    w = l1_constrained_sgd(X, y, budget=3.0)    print("权重:", np.round(w, 3))    print("非零特征数:", int((np.abs(w) > 1e-6).sum()))    print("L1 范数:", round(np.abs(w).sum(), 3))
目的:用投影梯度法求解带 L1 预算约束的线性回归,演示“先走一步、踩线退回”的完整流程,输出稀疏权重。
  1. grad = 2 * X.T @ (X @ w - y)残差平方和的梯度闭式解,告诉模型“该往哪挪”。
  2. w = project_l1_ball(w - lr * grad, budget)先做梯度下降,再投影回 L1 球,这就是投影梯度法的核心。
  3. mu = np.sort(np.abs(w))[::-1]把权重绝对值从大到小排序,准备计算“该砍到哪一档”。
  4. rho = np.nonzero(...)[0][-1]找到“预算刚好够用”的拐点位置,即满足条件的最大下标。
  5. theta = (cum[rho] - budget) / (rho + 1)算出统一收缩量,高于这个量的系数被削到 0,低于的保留。

常见误区

误区“我早就用过约束优化了,训练时加个 L2 正则项不就是吗?”

正解惩罚项是把约束“软化”进目标:λ 给多大效果差很多,而且只能近似满足约束。真正的硬约束(如 ||w||₁ ≤ C、公平性等式)要求解必须严格落在可行域内。L1 正则的拉格朗日形式与约束形式有对应关系(每个 C 对应一个 λ),但工程上要区分“软约束调超参”与“硬约束必须满足”——就像“罚超支的钱”和“根本不许超支”是两码事。

为何常见:因为深度学习框架里正则项最常见,而显式约束的 API 少,大家容易把两者混为一谈。

误区“反正都是往损失里加一个惩罚,L1、L2 选哪个都行。”

正解差别在可行域形状:L1 的菱形有“尖角”立在坐标轴上,等高线一旦碰到尖角,某些系数恰好为 0,得到稀疏解;L2 的球形处处圆滑,只会把所有系数等比缩小。用装修比喻:L1 是预算砍掉后“断舍离”,L2 是“每样都买便宜款”。选错会导致模型要么该砍的没砍、要么整组特征被误杀。

为何常见:初学时常只听说“正则化防止过拟合”,没去看约束球几何,于是忽略了稀疏 vs 收缩的本质差异。

误区“只要满足 KKT 就是全局最优,所以放心大胆用。”

正解KKT 是约束最优的必要条件;只有目标函数凸 + 约束规格(如 Slater 条件)才构成充要条件。在深度学习的非凸世界里,满足 KKT 只代表到了一个驻点(可能是鞍点或局部最优)。就像装修验收:检查员盖章只代表“这个方案没违规且站得住”,不代表全宇宙没有更舒服的方案。

为何常见:教材多在凸优化语境讲 KKT,学习者没注意前提条件就到处套用。

误区“我把统计均等写成约束,训练完就绝对公平了。”

正解首先约束只保证训练集上的统计均等,测试集/分布漂移后可能失效;其次统计均等不等于机会均等,可能通过压制整体准确率“强行拉平”;而且公平性约束常与损失函数冲突,影子价格就是冲突的量化。约束只是把“公平”从口号变成可计算的硬条件,是否真公平还要看指标与场景——就像“房间面积一样”不等于“两个孩子都满意”。

为何常见:因为把数学约束当成了道德保障,没意识到公平是多指标、多语境的概念。

误区“给训练样本加高斯噪声,模型就抗对抗攻击了。”

正解普通加噪是“平均意义上的鲁棒”,而对抗训练是 min-max 结构:内层主动搜索扰动球内让损失最大的最坏扰动(如 PGD 攻击),外层再让模型在这个最坏输入上最小化损失。这相当于装修时不是“随便晃一晃”,而是“按最坏的地震波来加固”。两者鲁棒性差距巨大。

为何常见:因为随机加噪实现简单,看起来像“加扰动”,但没理解“最坏扰动”才是对抗的核心。

面试题

Q1. 约束优化中,可行域(feasible region)指的是?

单选题 · easy

  • A.目标函数取最小值的点的集合
  • B.满足所有约束条件的决策变量的集合← 正确答案
  • C.拉格朗日乘子的取值范围
  • D.训练数据的分布空间

答案:B。可行域是所有满足约束的点的集合。想象老王装修,“预算内能买的家具组合”才是可行域;A 是最优解集合,C 是乘子域,D 是数据分布,都与可行域无关。

Q2. SVM 的间隔最大化目标中,约束 y_i(w^T x_i + b) ≥ 1 的含义是什么?

单选题 · easy

  • A.所有样本必须落在分界线上
  • B.所有样本都被正确分类且函数间隔至少为 1← 正确答案
  • C.支持向量个数至少为 1
  • D.权重向量的范数不小于 1

答案:B。该约束要求每个样本都被分对且离分界线至少 1 个单位,就像老王要求家具离走道胶带至少 30 公分。A 说“落在线上”恰好是约束禁止的;C 是结论不是约束;D 与范数无关。

Q3. 关于 L1 正则产生稀疏解的机制,下列说法正确的有哪些?

多选题 · mid

  • A.L1 约束的可行域是菱形,顶点立在坐标轴上← 正确答案
  • B.L1 正则会让所有系数等比缩小
  • C.等高线与菱形顶点相交时,某些系数恰好为 0← 正确答案
  • D.L1 与 L2 产生相同形状的可行域

答案:AC。A 正确,菱形尖角是稀疏的关键;C 正确,等高线碰到尖角产生零系数。B 是 L2 的行为;D 错误——L2 是圆球,形状完全不同。老王的“断舍离”只会砍掉部分家具,而不是每样都降级。

Q4. 不等式约束 g_j(x) ≤ 0 对应的拉格朗日乘子 μ_j 在对偶问题中必须满足什么条件?

单选题 · mid

  • A.可以为任意实数
  • B.必须非负← 正确答案
  • C.必须为正整数
  • D.必须等于 0

答案:B。对偶可行性要求 μ_j ≥ 0,这是“罚款单价不能是负数”的数学表达——不能“罚着罚着还倒贴钱”。A 允许负数会破坏下界性质;C 把连续域错当整数域;D 只在约束失效时才成立。

Q5. 互补松弛条件 μ_j g_j(x*) = 0 的直观含义是什么?

单选题 · mid

  • A.约束值和自变量一定相等
  • B.约束没绷紧时乘子为 0,约束绷紧到边界时才可能有正乘子← 正确答案
  • C.乘子必须小于约束值
  • D.目标函数一定为零

答案:B。互补松弛指 μ_j 与 g_j(x*) 至少一个为 0:要么这条约束松松垮垮(预算没用完,“心疼程度”为零),要么它被绷紧到边界(预算花光,影子价格浮现)。A、C、D 都没有对应意义。

Q6. 关于对抗训练中的 min-max 结构,下列说法正确的有哪些?

多选题 · hard

  • A.内层 max 在扰动球内寻找让损失最大的最坏扰动← 正确答案
  • B.外层 min 让模型在最坏扰动下的损失最小← 正确答案
  • C.扰动球半径 ε 越大,训练一定越容易
  • D.扰动球约束体现了“输入只能在小范围内变化”的鲁棒性要求← 正确答案

答案:ABD。A 描述攻击者,B 描述防御者,D 说明 δ 被限定在 ||δ||_p ≤ ε 的小球内,都是对的。C 错误:ε 越大最坏扰动越强,训练反而更难、准确率往往下降——防震等级越高,加固成本越大。

Q7. 公平性约束 P(ŷ=1 | A=0) = P(ŷ=1 | A=1) 描述的是什么?

单选题 · mid

  • A.两组样本数量必须相同
  • B.不同受保护属性组获得正预测的概率相等(统计均等)← 正确答案
  • C.两组特征分布完全相同
  • D.模型参数必须相等

答案:B。这是统计均等的定义:无论 A 取 0 还是 1,正预测率一致,就像老王要求两个孩子房间面积一样。A 说的是样本量,C 是特征分布,D 是参数,都和该约束无关。

Q8. 投影梯度法中,每次迭代的核心操作是什么?

单选题 · hard

  • A.先投影再计算梯度
  • B.梯度下降更新后,把点投影回可行域← 正确答案
  • C.只沿可行域边界移动
  • D.随机重置到可行域内

答案:B。投影梯度法是“先走一步、踩线退回”:先做标准梯度下降 x_k − η∇f,再投影 P_C 拉回可行域。A 顺序反了;C 只在边界滑动会漏掉可行域内部的收敛路径;D 重置是随机重启,不是投影。

Q9. 强对偶成立时,对偶问题最优值与原问题最优值的关系是什么?

单选题 · easy

  • A.对偶值永远更大
  • B.二者相等(对偶间隙为零)← 正确答案
  • C.对偶值严格小于原问题
  • D.没有任何确定关系

答案:B。强对偶成立时对偶间隙为零,两个最优值相等,就像“最低成本契约价”与“实际成交价”完全一致。弱对偶只保证对偶值 ≤ 原问题值,强对偶才取等号。

Q10. KKT 条件包含以下哪些部分?

多选题 · hard

  • A.梯度平稳性(stationarity)← 正确答案
  • B.原问题可行性与对偶可行性← 正确答案
  • C.互补松弛(complementary slackness)← 正确答案
  • D.目标函数必须是凸函数

答案:ABC。KKT 四条 = 平稳性 + 原问题可行 + 对偶可行 + 互补松弛。D 的凸性不是 KKT 的一部分——凸性 + 约束规格的作用是让 KKT 从“必要条件”升级为“充要条件”,不要混为一谈。