周末的公园草地上,老张牵着狗绳遛狗。狗看到远处一只猫,拼命往前冲,可绳子绷紧后,它只能在原地打转。狗不明白:目标明明就在前方,为什么我过不去?答案很简单——绳子的长度,就是它活动的边界。 这恰恰是约束优化每天面对的处境:目标函数告诉你“猫在哪里”(无约束最优解),可行域却画出了“绳子允许的范围”。普通梯度下降可以一路狂奔直达猫的位置,但一旦加了约束,这条路往往会被绳子拦腰截断。聪明的解法并不复杂:让狗先按自己的本能冲一小步,如果冲出了界,主人手一紧,把它拉回到界内最近的位置,然后松手再来。这个“先冲一步,再拉回来”的循环,就是投影梯度法的全部哲学。 它既有梯度下降的“顺着最陡方向走”的直觉,又用投影这个优雅的动作保证约束始终不越界。理解它,就等于拿到了处理约束优化问题的第一把钥匙——无论是训练带权重大小的神经网络、分配广告预算,还是让强化学习的策略更新不“跑偏”。

岗位关联

对 AI 从业者而言,约束无处不在:权重裁剪、概率约束、策略更新限制。掌握投影梯度法,你能看懂这些工程里“拉一把”的操作本质,也能在模型训练与部署中快速排查“越界导致的失控”问题。

目录
  1. 可视化演示
  2. 问题定位:狗为何不能乱跑
  3. 投影算子:绳子拉回的那只手
  4. 算法核心:遛狗的三步循环
  5. 步长影响:步子大了会扯到蛋
  6. 方法对比:牵绳与围栏
  7. 工程实践:实战遛狗手册
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示梯度步与投影步两步迭代过程、不同约束集投影算子闭式解、投影法与惩罚法收敛速率对比。

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

梯度步与投影步两步迭代 梯度步沿负梯度方向前进到临时点 投影步将临时点映射回可行集C 迭代序列始终满足约束条件 x+ = P_C(x - η∇f(x)) 两步分解保证约束满足

问题定位:狗为何不能乱跑

周日的公园里,老张牵着狗绳,狗远远看见一只猫,猛地往前冲。绳子绷紧后,狗在原地急得打转。在它看来,目标明明就在远方,可为什么到不了?因为绳子的长度定义了它活动的边界。这个“边界”,在数学里就叫可行域——所有不违反约束的点组成的集合。

约束优化解决的正是这类“被限制的追求”。AI 工程师每天都会撞见它:训练神经网络时希望权重别太大(箱约束,每个权重落在 [l, u] 区间);给广告渠道分配预算时,各渠道占比必须非负且总和为 1(单纯形约束);训练强化学习时,新策略不能偏离旧策略太远(KL 散度约束)。这些约束把原本“一条道奔到黑”的无约束解,拦在了绳子的范围之外。若无视约束直接用普通梯度下降,几步之后迭代点就飞出了可行域,产出一个非法解——就像狗挣脱绳子冲向猫,看似自由,实则失控。

约束分两类,对应绳子的两种系法。等式约束 $h_j(x)=0$ 像绳子两端被钉死在墙上,长度恰好拉直,分毫不差;不等式约束 $g_i(x) \le 0$ 则像一条限长的绳子,只要不拉断就行,留有余地。把两类条件同时满足的点收进一个集合,就得到可行域:

于是核心矛盾浮现:狗想去的方向与主人划定的安全范围发生冲突时,该怎么办?聪明的解法不是禁止奔跑,而是建立一套规则——允许狗冲刺,但冲过头的那一瞬间,把它轻轻拉回来。

C={x∈Rn  |  gi(x)≤0, i=1,…,m;hj(x)=0, j=1,…,p}\displaystyle C = \left\{ x \in \mathbb{R}^n \;\middle|\; g_i(x) \le 0,\ i=1,\ldots,m; \quad h_j(x)=0,\ j=1,\ldots,p \right\}
  1. 决策变量空间$x$ 是 $n$ 维实向量,一个点由 $n$ 个坐标组成,狗的二维位置只是 $n=2$ 的特例。
    x∈Rnx \in \mathbb{R}^n
  2. 不等式约束$g_i(x) \le 0$ 表示“不超过”的关系,比如狗的身高不得超过 1 米。
    gi(x)≤0g_i(x) \le 0
  3. 等式约束$h_j(x) = 0$ 表示“恰好相等”的关系,比如绳子长度必须严格等于 3 米。
    hj(x)=0h_j(x) = 0
  4. 交集构成可行域所有满足两类条件的点共同组成的集合 $C$,就是绳子圈出的安全区。
    C={x∈Rn ∣ 约束全部成立}\displaystyle C = \{ x \in \mathbb{R}^n \,|\, \text{约束全部成立} \}

投影算子:绳子拉回的那只手

老张手里的绳子不是一根死板的铁链。狗冲出去时,绳子会先绷紧,然后主人手腕一抖,狗就落回界内某个位置。关键问题是:落到哪儿? 答案很符合直觉——落在离刚才越界点最近的那个界内点。

这个“界内最近点”在数学上叫投影。它回答的问题是:给定一个可行域 $C$ 和任意一点 $x$(可能已经越界),在 $C$ 内找哪个点 $y$ 离 $x$ 的欧氏距离平方最小:

投影的美妙之处在于:当可行域形状规整时,这个求最小值的“子问题”有闭式解——代数公式一行就能算出来。比如非负象限(所有坐标必须 $\ge 0$)的投影就是 $P_C(x)_i = \max(0, x_i)$,负坐标直接清零;箱约束的投影就是逐维裁剪 clip(x, l, u);超平面(一个等式约束)的投影则是沿法向量把点平移回去。这些都是 O(1) 或 O(n) 的廉价操作。但如果可行域是个“异形院”(一般凸集),投影本身就是一个小型优化问题,成本陡增——这也是工程中优先使用简单约束的原因。

对狗而言,“界内最近点”是所有人能接受的最小干预:绳子拉回的距离最短,狗不觉得疼,主人也不费劲。距离越短,意味着狗的本能意愿被保留得越多。

PC(x)  =  arg⁡min⁡y∈C  ∥x−y∥2\displaystyle P_C(x) \;=\; \mathop{\arg\min}\limits_{y \in C} \; \| x - y \|^2
  1. argmin 的含义它表示“在可行范围内,挑选使括号里数值最小的那个 $y$”——即找最优点而不是最优值。
    arg⁡min⁡y∈C\displaystyle \mathop{\arg\min}\limits_{y \in C}
  2. 候选点范围$y$ 必须来自可行域 $C$,也就是说绳子以内的点才有资格当选。
    y∈Cy \in C
  3. 欧氏距离平方$\| x - y \|^2$ 衡量当前越界点 $x$ 与候选点 $y$ 的直线距离平方,平方操作保证距离为正且放大远点差异。
    ∥x−y∥2\| x - y \|^2
  4. 投影的完整含义在可行域内找离当前点最近的那个点,这个过程就叫向 $C$ 做投影。
    PC(x)P_C(x)

算法核心:遛狗的三步循环

老张有一套训练有素的遛狗流程:第一步,松开手,让狗按自己的意愿跑一小步;第二步,探头看看狗有没有跨过安全线;第三步,如果越界,手腕一紧,把它拉回界内最近点。然后松手,再来一轮。“跑一步 → 查越界 → 拉回来” 这个循环,就是投影梯度法的全部结构。

把每一步翻译成数学符号,就是大名鼎鼎的投影梯度迭代式:

至于什么时候停?常用停止条件有三个:梯度范数接近零(狗没什么冲劲了)、相邻两步迭代点距离小于阈值(狗基本不动了)、目标函数值变化很小(收益趋零)。值得注意:在约束优化里,收敛后迭代点常常就停在边界上,此时梯度仍指向域外,但投影把它抵消了——这正对应“狗贴着绳边趴下,既不越界也够到了最远能及的地方”,数学上称为互补松弛。

这个循环看起来简单,却同时保证了两个目标:沿最速下降方向逼近最优值(能量不浪费在绕路上),投影保证每一步的落点都是合法解(约束恒成立)。老张遛狗千百轮,狗终于停在边界上那个最舒服的位置——那正是约束最优解。

xk+1  =  PC(xk−ηk∇f(xk))\displaystyle x_{k+1} \;=\; P_C\left( x_k - \eta_k \nabla f(x_k) \right)
  1. 当前位置$x_k$ 是第 $k$ 轮迭代开始时狗所站的位置,也就是当前解。
    xkx_k
  2. 梯度方向$\nabla f(x_k)$ 是目标函数在 $x_k$ 处的梯度,它的方向是“最想冲的方向”;沿它的负方向走,目标值会下降。
    ∇f(xk)\nabla f(x_k)
  3. 步长系数$\eta_k$ 是正步长,控制狗每次冲出多远;$\eta_k > 0$,通常随迭代递减。
    −ηk∇f(xk)-\eta_k \nabla f(x_k)
  4. 无约束试探步$x_k - \eta_k \nabla f(x_k)$ 先完全不顾约束,沿负梯度冲一步。这一步可能在界内,也可能出界。
    xk−ηk∇f(xk)x_k - \eta_k \nabla f(x_k)
  5. 投影拉回外层 $P_C(\cdot)$ 把试探步的结果投影回可行域;若已经在界内,投影等于没做,若越界则被拉回。得到下一轮点 $x_{k+1}$。
    PC(⋅)P_C(\cdot)

步长影响:步子大了会扯到蛋

循环中的步长 $\eta_k$,就是狗每次冲出多远。这一步的抉择直接决定遛狗体验:步长太小,狗在原地磨蹭,半天挪不动,像只树懒;步长太大,狗狠狠撞向绳子再被拉回,由于冲得太猛,拉回后还可能朝反方向乱窜,来回震荡甚至彻底失控。一个合适的步长,让狗平稳滑行、在边界处优雅收脚。

这种直觉在理论上也有精确刻画。当目标函数是凸函数、且梯度的变化被常数 $L$ 控制(即 $L$-光滑),取固定步长 $\eta = 1/L$,投影梯度法的收敛率为:

这个 $O(1/k)$ 的速率,与无约束梯度下降同阶——换句话说,额外做一次投影,没有拖慢收敛的“量级”。工程上更常用递减步长(如 $\eta_k = \eta_0 / \sqrt{k}$)或线性搜索来自适应调整,这两种策略在投影梯度下依然有效,原因在于投影算子有一个重要的性质——非扩张性:拉回动作不会放大任意两点之间的距离。绳子只会缩短距离,不会增加混乱。

好主人不会每次都放同样长的绳,而是根据地形调整放手距离:平路多放些,拐弯处收着点。步长表,就是这套“放手策略”的量化版本。

f(xk)−f∗  ≤  L2k∥x0−x∗∥2\displaystyle f(x_k) - f^* \;\le\; \frac{L}{2k} \left\| x_0 - x^* \right\|^2
  1. 目标差距$f(x_k) - f^*$ 表示第 $k$ 步的目标函数值与全局最优值之间的差距,这是衡量进度最直接的指标。
    f(xk)−f∗f(x_k) - f^*
  2. 光滑常数$L$ 描述地形的“起伏幅度”,$L$ 越大说明梯度变化越剧烈,狗越容易跑偏,在最坏情况下收敛也越慢。
    LL
  3. 初始距离平方$\| x_0 - x^* \|^2$ 是出发点与最优点的距离平方,它决定“这段路有多长”。
    ∥x0−x∗∥2\left\| x_0 - x^* \right\|^2
  4. 迭代次数分母分母上的 $2k$ 说明差距随迭代轮数反比例缩小——每多跑一圈,差距大约缩小一圈分之一。
    12k\frac{1}{2k}

方法对比:牵绳与围栏

有人不喜欢牵绳,索性把整个院子围起来——这就是惩罚法的思路。它不试图把狗拉回界内,而是让狗一靠近边界就感到“无形的电击”:在目标函数里加一项“距可行域距离的平方”,系数 $\lambda$ 越大,电击越强。狗为了不挨电,自己就学会不越界了。数学上,惩罚法求解的是:

两者对比十分鲜明。惩罚法的优点是普适:只要会算“到边界的距离”,任意复杂可行域都能处理,不需要设计专门的投影算法。缺点是约束只是近似满足,且 $\lambda$ 像个跷跷板——调小了约束被破坏,调大了数值病态,每次新问题都要重新调参。投影法则相反:约束被严格满足,每一步迭代点都合法,无需调惩罚系数;代价是它需要投影算子有高效实现,而这只有“形状规整”的简单约束才做得到。

工程选择的逻辑很清楚:简单约束用投影法,复杂约束用惩罚法。前者像牵绳,干净利落但绳子得顺手;后者像围栏,普适性强但总留缝隙。真正的资深工程师会先问一句:可行域长什么样,再来选工具。

min⁡x  f(x)+λ2dist⁡(x,C)2,λ→∞\displaystyle \min_{x} \; f(x) + \frac{\lambda}{2} \operatorname{dist}(x, C)^2, \qquad \lambda \to \infty
  1. 违反程度度量$\operatorname{dist}(x, C)^2$ 是点 $x$ 到可行域最近点的距离平方,狗离院子边界越远,这个值越大。
    dist⁡(x,C)2\operatorname{dist}(x, C)^2
  2. 惩罚强度$\lambda$ 是惩罚系数,相当于围栏的高度;$\lambda$ 越大,越界付出的“代价”越大。
    λ2\frac{\lambda}{2}
  3. 极限逼近$\lambda \to \infty$ 表示惩罚无限强时,约束趋近于严格满足。
    λ→∞\lambda \to \infty
  4. 代价与矛盾惩罚法得到的解是“近似可行”的——围栏再高也有跳过去的可能;且 $\lambda$ 太大时目标函数严重变形,数值优化困难。
    min⁡x  f(x)+λ2dist⁡(x,C)2\min_x \; f(x) + \frac{\lambda}{2}\operatorname{dist}(x,C)^2

工程实践:实战遛狗手册

实战遛狗先认院子,再选绳子。工作里最常见的两类约束,一类是箱约束,一类是概率单纯形约束。

箱约束最常出现,它的投影算子是一行代码的事。设可行域为 $C=[l, u]^n$(每一维的取值被限制在 $l_i$ 和 $u_i$ 之间),则投影就是逐分量的“裁剪”:

一个经典实例是 WGAN 训练:为了让判别器满足 Lipschitz 连续条件,每轮参数更新后把所有权重裁剪到 $[-c, c]$——这就是箱约束投影梯度法的直接应用。概率单纯形约束($\sum_i x_i = 1$ 且 $x_i \ge 0$)稍复杂,需要借助“排序 + 累计阈值”在 $O(n\log n)$ 时间内完成投影,常用于广告预算分配、投资组合权重更新等场景。

工程调试有个实用技巧:统计投影被激活的频率。如果每轮迭代都在做投影,说明最优解就在边界上,约束是“紧”的,拉回动作是算法的主旋律;如果几乎从不投影,说明约束形同虚设,可以考虑放宽或删除。此外还要警惕计算瓶颈——投影看似简单,但单纯形投影里的排序操作在千万维参数上并不便宜,必要时可用近似投影替代。

拴好绳、看紧方向、记录多久拉一次绳——当这三步都成为肌肉记忆,你就真正掌握了投影梯度法的工程心法:约束不是敌人,而是一道可以借力的墙。

(PC(x))i  =  min⁡(max⁡(xi, li), ui)\displaystyle \left( P_C(x) \right)_i \;=\; \min\left( \max(x_i,\ l_i),\ u_i \right)
  1. 逐分量操作$\left( P_C(x) \right)_i$ 表示投影结果的第 $i$ 个坐标,各维度独立处理互不干扰。
    (PC(x))i\left( P_C(x) \right)_i
  2. 下限修剪$\max(x_i, l_i)$ 把低于下限的坐标强行抬回下限 $l_i$,相当于把狗从线外拽回线内。
    max⁡(xi,li)\max(x_i, l_i)
  3. 上限修剪外层的 $\min(\cdot, u_i)$ 再把超过上限的坐标压回上限 $u_i$,上下两刀,箱约束投影完成。
    min⁡(max⁡(xi,li),  ui)\min\left( \max(x_i, l_i),\; u_i \right)

AI 应用场景

权重裁剪稳定 GAN 训练

阶段:模型训练

解决的问题:原生 GAN 训练中判别器梯度过大,容易导致模式崩溃和训练震荡。传统做法是拼命调学习率、换网络结构,治标不治本。投影梯度法提供了一条硬约束路径:每次更新后把判别器权重投影到箱约束 $[-c, c]$ 内,强制满足 Lipschitz 条件($c$ 通常取 0.01 或 0.02)。

具体案例:WGAN 论文中,作者就是用这一行 clip 操作稳定了原本极易崩溃的对抗训练,让生成样本质量大幅提升。你在 PyTorch 里写 w = w.clamp(-c, c),本质上就是一个箱约束投影。

广告预算分配中的概率单纯形投影

阶段:在线决策优化

解决的问题:广告主在多个渠道投放预算,各渠道占比必须非负且和为 1。普通梯度下降更新后,分配可能变成负值或总和不再为 1(预算超支或浪费)。投影梯度法在每次更新后把权重拉回单纯形,保证预算永远合法。

具体案例:某营销算法团队做多触点归因时,用投影梯度法在 权重非负且和为 1 的约束下学习渠道贡献度,每次迭代后调用单纯形投影算子(排序 + 阈值裁剪),模型收敛稳定且分出的预算始终跑得通业务校验。

强化学习中的保守策略更新

阶段:策略优化

解决的问题:策略梯度更新幅度太大时,新策略可能瞬间崩坏。TRPO 将问题建模为“新旧策略的 KL 散度不超过阈值”的不等式约束,再用约束优化的思路(共轭梯度 + 线性搜索)找到最陡且不越界的更新方向。

具体案例:在机器人控制任务中,TRPO 通过约束策略更新的“步长”,让机械臂的策略在每次迭代后依然稳定,最终学会流畅的抓取动作。虽然实现细节复杂,但其思想内核正是投影梯度法:顺着最想走的方向,但别越界。

Python 演示

python31 行
import numpy as np # 目标函数: 椭圆凸函数, 无约束最优在 (3, -2)# 箱约束: x[0] in [-1, 1], x[1] in [-1, 1]def f(x):    return 2 * (x[0] - 3) ** 2 + 3 * (x[1] + 2) ** 2 def grad_f(x):    return np.array([4 * (x[0] - 3), 6 * (x[1] + 2)]) def proj_box(x, lo, hi):    return np.clip(x, lo, hi) def projected_gd(start, eta=0.1, iters=40, tol=1e-6):    x = np.array(start, dtype=float)    lo, hi = np.array([-1.0, -1.0]), np.array([1.0, 1.0])    history = [x.copy()]    for _ in range(iters):        x_tmp = x - eta * grad_f(x)        x_new = proj_box(x_tmp, lo, hi)        history.append(x_new.copy())        if np.linalg.norm(x_new - x) < tol:            break        x = x_new    return x, history opt, hist = projected_gd(start=[-2.0, 2.0])print("约束最优解:", opt)print("目标值:", f(opt))print("迭代步数:", len(hist) - 1)print("末两步距离:", np.linalg.norm(hist[-1] - hist[-2]))
目的:用投影梯度法求解一个带箱约束的最小化问题,完整演示“先冲一步,再拉回界内”的三步循环,并输出约束最优解与迭代信息。
  1. def grad_f(x):手动推导目标函数的梯度闭式公式,即“狗最想冲的方向”。
  2. np.clip(x, lo, hi)箱约束的投影算子,一次完成所有维度的裁剪,即“绳子拉回”。
  3. x_tmp = x - eta * grad_f(x)先无条件地沿负梯度方向冲一步,可能越界。
  4. x_new = proj_box(x_tmp, lo, hi)把越界点拉回可行域,保证落点合法。
  5. if np.linalg.norm(x_new - x) < tol:用相邻两步的距离判断是否收敛,狗不动了就收工。
  6. history.append(x_new.copy())记录每轮迭代点,方便事后画收敛轨迹或做分析。

常见误区

误区“投影不就是每步更新后加一行 `np.clip` 嘛,相当于临时打个补丁,加不加应该影响不大?”

正解投影不是补丁,而是算法公式里的必要算子,它直接嵌入迭代式 $x_{k+1}=P_C(x_k-\eta\nabla f(x_k))$,决定了每轮迭代的落点,也因此决定了收敛路径与最终解。去掉投影,约束立刻被破坏,迭代点会一路冲出界外无法收敛。它就像狗绳本身——不是事故后的补救,而是赛跑规则的一部分。

为何常见:因为 clip 写法太像一个“if 越界就纠偏”的小动作,容易让人低估它在算法中的结构地位,尤其在 PyTorch 里它常被封装成一个 hook。

误区“既然只是多一步投影,那普通梯度下降的资料我都能直接用,收敛分析和步长选择也一样。”

正解投影梯度法沿用了梯度下降的整体框架,收敛阶确实同为 $O(1/k)$,但它有自己独立的分析体系:投影算子的非扩张性是证明的关键,步长选择也受约束集形状与 Lipschitz 常数共同影响,投影本身还会带来额外的每轮计算开销。直接套用无约束结论,可能在步长调大时忽略“投影引发的边界震荡”。

为何常见:直觉上“多一步操作”容易被理解成“几乎一样”,掩盖了投影对迭代点轨迹的实质干预。

误区“惩罚法啥约束都能加,加个距离项就行。投影法还要推导闭式解,多麻烦,学它干嘛?”

正解惩罚法的“任意可行域”能力是拿约束精度换来的——惩罚系数 $\lambda$ 有限时解是近似可行的,$\lambda$ 太大又会导致目标函数畸形、数值困难。投影法在简单约束上给出的是严格可行解,且无需调 $\lambda$,收敛行为更可控。二者是互补关系:简单约束首选投影法,复杂约束才退而求其次用惩罚法。

为何常见:初学者刚接触惩罚法时会被它“放之四海而皆准”的表象吸引,却忽略了工程里“严格满足约束”往往是硬性需求。

误区“箱约束能 `clip`,那别的约束也差不多吧?随便写个归一化或截断就行?”

正解投影的优秀性质(如欧氏距离、非扩张性)只在特定范数下成立,而闭式解只有形状规整的简单集才有:箱约束、非负象限、半空间、概率单纯形。对于一般凸集,投影本身就是一个需要迭代求解的优化问题,计算量可能超过主体算法。工程上若可行域复杂,常见做法是换成惩罚法或把投影改成近似算法。

为何常见:教程里反复出现“闭式解”的例子让人产生“皆可闭式”的错觉,实际上那些例子都是精心挑选的“标准绳形”。

面试题

Q1. 在投影梯度法的迭代中,投影操作发生在哪个环节?

单选题 · easy

  • A.初始化时一次性执行
  • B.每次梯度更新之后,把试探点拉回可行域← 正确答案
  • C.只在最终输出时做一次
  • D.计算目标函数值之前

答案:B。投影梯度法的核心迭代式是先做无约束梯度更新 $x_k-\eta_k\nabla f(x_k)$,再用投影 $P_C(\cdot)$ 把试探点拉回可行域,得到 $x_{k+1}$。投影不是初始化的设置,也不是收尾动作,而是每轮迭代的必经步骤。只有迭代点碰巧已在界内时,投影才等效于“什么都不做”。

Q2. 对非负象限 $\mathbb{R}_+^n$ 做投影时,正确的闭式解是?

单选题 · easy

  • A.$\max(0, x_i)$← 正确答案
  • B.$\min(1, x_i)$
  • C.$|x_i|$
  • D.$x_i^2$

答案:A。非负象限要求所有坐标 $\ge 0$。对每个坐标,若为负则拉回到 0,若本就非负则保持不变,这正是 $\max(0, x_i)$ 的作用,即“负值清零”。$\min(1, x_i)$ 是上界 1 的约束,$|x_i|$ 会把负数翻成正值而非清零,$x_i^2$ 完全改变了数值,均不正确。

Q3. 关于投影梯度迭代式 $x_{k+1}=P_C(x_k-\eta_k\nabla f(x_k))$,下列说法正确的有?

多选题 · mid

  • A.$\nabla f(x_k)$ 是目标上升方向,更新应沿其负方向进行← 正确答案
  • B.$\eta_k > 0$ 是步长,控制每次移动幅度← 正确答案
  • C.$P_C$ 将迭代点投影回可行域,保证约束满足← 正确答案
  • D.$P_C$ 可以用任意函数替代,不影响算法正确性

答案:ABC。梯度指向目标上升方向,所以下降应沿 $-\eta_k\nabla f(x_k)$ 走,A 对。步长为正,B 对。投影算子保证迭代点落在可行域 $C$ 内,C 对。$P_C$ 必须是向可行域的投影,任意函数替代会破坏可行性甚至收敛性,D 错。

Q4. 投影算子 $P_C(x)=\arg\min_{y\in C}\|x-y\|^2$ 中,候选点 $y$ 的取值范围是?

单选题 · mid

  • A.全空间 $\mathbb{R}^n$
  • B.可行域 $C$← 正确答案
  • C.以 $x$ 为球心的单位球
  • D.负梯度方向上的点

答案:B。投影的定义明确写有 $y \in C$,即只能在可行域内挑选离 $x$ 最近的点,这正是“绳子圈内找最近落点”的含义。若 $y$ 可取全空间,最近点就是 $x$ 自身,投影失去意义;单位球或负梯度方向都不是可行域的刻画。

Q5. 箱约束 $[l, u]$ 的投影在工程上等价于哪种操作?

单选题 · mid

  • A.除以向量的 L2 范数
  • B.逐分量裁剪,低于下限抬到下限、高于上限压到上限← 正确答案
  • C.所有分量置零
  • D.每个分量加一个常数

答案:B。箱约束的取值区间是逐维独立的,投影时每个坐标单独处理,越界就修剪到边界上——这正是 np.clip 做的事。除以范数是球面投影,置零和加常数都会把原本合法的点也改动掉,均不符合“离原最近点”的定义。

Q6. 关于惩罚法与投影梯度法的对比,下列说法正确的有?

多选题 · mid

  • A.惩罚法得到的解通常是近似可行← 正确答案
  • B.投影法保证迭代点严格落在可行域内← 正确答案
  • C.惩罚系数 $\lambda$ 越大,数值优化越稳定
  • D.投影法要求投影算子有高效实现← 正确答案

答案:ABD。惩罚法通过有限的 $\lambda$ 施加软约束,除非 $\lambda\to\infty$,否则只是近似可行,A 对。投影法每次迭代都执行 $P_C$,落点必然在可行域内,B 对。$\lambda$ 过大时目标函数病态、优化困难,C 错。投影法的实用性高度依赖闭式解或高效算法,D 对。

Q7. 在凸且 $L$-光滑的目标函数上,固定步长 $\eta=1/L$ 时投影梯度法的典型收敛率是?

单选题 · hard

  • A.$O(1/k)$← 正确答案
  • B.$O(k^2)$
  • C.$O(1/\sqrt{k})$
  • D.完全不收敛

答案:A。标准结论是 $f(x_k)-f^* \le \frac{L}{2k}\|x_0-x^*\|^2$,即差距随迭代次数线性反比下降,属 $O(1/k)$。$O(1/\sqrt{k})$ 是次梯度法的速率,$O(k^2)$ 是发散的符号,而该条件下算法必收敛,故排除其它选项。

Q8. 投影算子的直观含义是?

单选题 · easy

  • A.在可行域内任意取一个点
  • B.在可行域内找离当前点最近的点← 正确答案
  • C.找目标函数梯度为零的点
  • D.找可行域的重心

答案:B。投影的定义是 $\arg\min_{y\in C}\|x-y\|^2$,它要求“距离平方最小”,即离当前点最近的可行域点。任意取点、找重心都与距离最小化无关,找梯度为零的点是无约束最优解的定义,而非投影。

Q9. 关于投影算子的性质,下列说法正确的有?

多选题 · hard

  • A.若 $x \in C$,则 $P_C(x)=x$← 正确答案
  • B.投影算子是 1-Lipschitz 的(非扩张)← 正确答案
  • C.对任意 $x$ 和 $z \in C$,投影点满足变分不等式 $\langle P_C(x)-x,\ z-P_C(x)\rangle \ge 0$← 正确答案
  • D.投影结果依赖目标函数的具体形状

答案:ABC。界内点的最近点就是它自己,A 对。投影不放大任意两点距离,$\|P_C(x)-P_C(y)\|\le\|x-y\|$,B 对。变分不等式是凸投影的本质刻画,C 对。投影只依赖可行域 $C$ 和点 $x$ 的几何位置,与目标函数形状无关,D 错。

Q10. 概率单纯形约束($\sum_i x_i=1, x_i\ge0$)的投影相比箱约束投影,正确的说法是?

单选题 · mid

  • A.更简单,直接逐维 clip 即可
  • B.需要排序 + 累计阈值裁剪,复杂度约为 $O(n\log n)$← 正确答案
  • C.完全无法计算
  • D.等价于 L2 归一化

答案:B。概率单纯形有两个条件同时生效:非负与和为 1,逐维 clip 无法保证和为 1。标准做法是把向量降序排序,用累计和找出阈值,再裁剪并统一平移到和为 1,复杂度 $O(n\log n)$,故 B 对、A 错。它有成熟算法并非“无法计算”,C 错;L2 归一化保证的是范数为 1,不是和为 1,D 错。