优化方法选型 — 先问凸不凸,再谈用什么法
R — 原文 (Reading)
来源说明: 本 skill 属扩充批D——主题超出西瓜书覆盖范围(西瓜书附录 B 仅给出拉格朗日乘子法的最简形式),R 段改引优化领域公认文献并标注来源性质;凡无法保证逐字精确处一律标(转述)。
If the objective and constraint functions are all convex, then any locally optimal point is (globally) optimal, and problems can be solved to high accuracy with efficient algorithms.(转述)
— 转述自 Boyd & Vandenberghe《Convex Optimization》(Cambridge University Press, 2004), Ch.1(来源性质:教科书公认表述)
Newton's method uses second-order (curvature) information and converges rapidly near a solution, but each step requires forming and factoring the Hessian—prohibitive for very large problems. Quasi-Newton methods such as BFGS/L-BFGS approximate this curvature from gradient history at far lower cost.(转述)
— 转述自 Nocedal & Wright《Numerical Optimization》(Springer, 2nd ed. 2006), Ch.3/6-7(来源性质:教科书公认表述)
I — 方法论骨架 (Interpretation)
优化方法的选型不是背一张"算法清单",而是回答三个前置问题后的自然结果:
- 第一问·凸性: 目标函数和可行域是不是凸的?凸问题里局部最优就是全局最优,且有多项式时间的可靠求解器(内点法等);一旦非凸,一切全局保证作废,选型逻辑从"求精确解"变成"在预算内找足够好的点"。所以凸性判定永远是第一步。
- 第二问·约束: 有没有约束?无约束直接上迭代法;有约束的标准语言是拉格朗日函数——把约束以乘子为代价并入目标,其驻点条件即 KKT 条件(可行、平稳、互补松弛)。KKT 既是最优性的必要条件(凸问题下充分),也是"哪个约束真正起作用"的诊断器。
- 第三问·导数成本: 梯度多贵、维度多大?一阶方法只用梯度、每步便宜,适合超高维与随机场景(SGD 族是深度学习的默认);牛顿法用 Hessian 曲率信息、收敛快但每步 O(n³),只在中小规模划算;L-BFGS 用梯度历史隐式近似曲率,是"想要二阶收益又付不起二阶价格"的折中。
- 学习率与收敛诊断: 步长太大震荡发散、太小龟速爬行;看 loss-迭代曲线的形态(单调降/锯齿/平台)就能反推病根。
- 高维的真实面貌: 现代认识修正了"局部最优陷阱"直觉——高维非凸景观中严格局部极小很少,大量临界点是鞍点(某些方向向上、某些方向向下),沿负曲率方向即可逃逸;真正拖慢训练的是平坦区域(plateau)与病态曲率,而非困在假极小。
一句话:凸性定天花板(有无全局解)、导数成本定方法族(一阶/二阶/拟牛顿)、约束形态定数学语言(KKT/对偶)、曲线形态定调参方向。
A1 — 文献中的经典应用 (Past Application)
(本批主题超出西瓜书覆盖范围,A1 改引奠基文献的经典案例,均为学界公认的原始工作叙述)
案例 1: SVM 的对偶视角(回扣西瓜书第 6 章)
- 问题: 原始形式的软间隔 SVM 是带不等式约束的二次规划,直接数值求解既慢又无法处理"样本只能以内积形式访问"的情形。
- 方法论的使用: 写出拉格朗日函数并求 KKT 条件,得到对偶问题;互补松弛条件自动筛出支持向量——多数样本的 αᵢ=0,只有间隔边界上的点携带信息;且对偶式中样本只以核内积出现,核技巧由此接入。
- 结论: KKT 不是事后检验,而是把"哪些样本重要"(支持向量)和"非线性扩展入口在哪"(核替换内积)都编码进了求解结构本身。
- 结果: 对偶形式成为 SVM 的标准求解路线,也奠定了核方法一族的基础。
案例 2: L-BFGS 在大规模问题中的定位
- 问题: 牛顿法在数万维以上变量的问题中,Hessian 存储与分解代价不可承受,而纯一阶法在高病态问题上爬得过慢。
- 方法论的使用: Nocedal 系列工作中确立 L-BFGS 折中——只保留最近 m 组 (s, y)(位置差与梯度差),用它们递推隐式近似逆 Hessian 作用于当前梯度,内存 O(mn) 且无需显式构造曲率矩阵。
- 结论: 拟牛顿能以近一阶的成本逼近部分二阶收益,成为中等规模无约束优化的默认强基线。
- 结果: L-BFGS 及其流式变体(如用于逻辑回归、CRF 训练)长期是机器学习库(LIBSVM/LIBLINEAR/scipy)内置求解器。
案例 3: 高维景观中鞍点主导的认识修正
- 问题: 传统叙事认为非凸优化失败主因是"陷入局部最优";但深度网络动辄百万维参数,若真存在海量劣质局部极小,随机初始化的训练几乎不可能反复成功。
- 方法论的使用: Dauphin 等 (2014) 结合 Dauphin/Choromanska 等对高维随机函数的分析指出:临界点中局部极小的占比随维度急剧下降,绝大多数是鞍点;并提出以鞍点处的负曲率方向(saddle-free 方法思想)区分"真极小"与"鞍点停滞"。
- 结论: 高维非凸的主敌是鞍点与平坦高原,不是局部极小;这解释了为何 SGD 的随机扰动天然有助于逃逸鞍点,也让"多次重启躲局部极小"的老药方失去必要性。
- 结果: "鞍点多于局部极小"成为深度优化叙事的标准组成部分,直接影响后续优化器设计(动量/自适应步长被视为穿越平坦区与鞍点的手段而非"跳出假极小"的手段)。
A2 — 触发场景 (Future Trigger) ★
用户会在什么情境下需要这个 skill?
- 用户手里有一个带约束的建模/资源分配/投资组合类问题,不知道该套什么优化框架、约束该怎么处理。
- 用户在选求解器/优化器:"这个问题能用 L-BFGS 吗""为什么深度学习不用牛顿法""scipy.optimize 该选哪个方法"。
- 用户读论文遇到 KKT 条件、对偶问题、强对偶、 Slater 条件等字眼想弄懂来龙去脉,或在推导 SVM/拉格朗日对偶时卡壳。
- 用户训练/迭代时 loss 曲线呈平台、锯齿或缓慢爬行,想从优化角度判断病根(步长?病态?鞍点停滞?)。
- 用户担心"模型会陷进局部最优",想知道要不要多重启、加随机扰动。
语言信号 (用户的话里出现这些就应激活)
- "凸优化/convex""这个问题是不是凸的""局部最优就是全局最优吗"
- "牛顿法/Newton""L-BFGS""quasi-Newton 拟牛顿""为什么不用二阶方法"
- "拉格朗日/Lagrangian""KKT 条件""对偶/duality""强对偶""Slater 条件"
- "学习率太大/太小""loss 有个平台期""收敛很慢""saddle 鞍点"
- "会不会陷进局部最优""local minimum 要不要多重启"
与相邻 skill 的区分
- 与
ml-deep-training-playbook的区别: 那是深度训练的排障流水线(数据管道→过拟合测试→初始化→LR 扫描),面向"训练不动"这一具体故障;本 skill 是优化方法本身的选型与原理决策(凸性/一阶二阶/约束/对偶),面向"该用什么方法、为什么"。用户报故障 → playbook;用户问方法与数学结构 → 本 skill。 - 与
ml-neural-training的区别: 那是西瓜书第 5 章语境下的 BP 网络训练纪律(隐藏层数、早停、模拟退火跳局部极小);本 skill 提供其背后的现代优化理论视角,并修正其中"局部最优"的旧叙事。 - 与
ml-svm-playbook的区别: 那是 SVM 使用层的参数决策树;本 skill 解释其对偶/KKT 的数学骨架。推导卡壳 → 本 skill;调 C/γ → svm-playbook。 - 与
ml-hpo-strategy的区别: 那是在给定方法后搜超参的预算分配;本 skill 决定优化方法族与理解收敛行为本身。
E — 可执行步骤 (Execution)
当 skill 被激活后, agent 应按以下步骤执行:
凸性判定
- 列出目标函数与全部约束;逐一检查凸性(线性必凸;非线性的查是否凸函数/凹函数取反、仿射变换保持、常见凸函数表核对;拿不准就标"未证凸"按非凸对待)。
- 完成标准: 给出明确结论三选一——"凸问题 / 非凸问题 / 凸性未知(保守按非凸处理)",并列出判定依据。
- 判停条件: 若判定为凸且规模适中 → 直接推荐成熟求解器(CVXPY/内点法),跳到步骤 5 收尾;否则进步骤 2。
约束盘点与数学语言定型
- 无约束 → 进步骤 3。有约束 → 写出拉格朗日函数,检查是否适用 KKT 分析;说明强对偶是否成立(凸问题 + Slater 条件成立则成立)。
- 完成标准: 给出拉格朗日函数表达式与 KKT 各条件的物理含义(尤其互补松弛="哪些约束贴边起作用")。
- 判停条件: 若问题本质是离散/组合优化(整数变量、排列选择) → 连续优化框架失效,明说并转向启发式/专用求解器,本链终止。
导数成本与方法族匹配
- 评估三件事: 维度 n 多大、单次梯度多贵、能否拿到 Hessian 或其向量积。
- 完成标准: 按下表给出方法族建议——低维(n≤数百)且 Hessian 可得 → 牛顿法;中大规模、光滑、批数据 → L-BFGS;超大规模/可随机化 → SGD+动量或 Adam 族;并写明选择理由。
- 判停条件: 若目标是深度神经网络 → 一阶随机方法是事实默认,本步只做确认,细节排障交
ml-deep-training-playbook。
学习率与收敛诊断
- 画/看 loss-迭代曲线,按形态归因: 锯齿剧烈震荡→步长过大;纹丝不动→步长过小或梯度消失;先快后卡在高位→病态曲率或鞍点停滞;周期性尖峰→数据分布突变/batch 过小。
- 完成标准: 输出一条"曲线形态→病因→处置"的对应记录(处置如衰减调度、warmup、动量、换 batch 大小)。
- 判停条件: 若曲线健康收敛但泛化差 → 优化阶段结束,转
ml-diagnosis做"收敛≠泛化"归因。
局部最优恐惧的现代校准(收尾必答)
- 回答用户的"会不会陷局部最优": 高维参数空间中鞍点远多于严格局部极小,随机梯度噪声本身即是逃逸机制;低维凸问题不存在此顾虑。
- 完成标准: 结论中显式包含对"局部最优风险"的现代认识表述,并据此判断是否需要重启/扰动策略(多数情况不需要)。
- 判停条件: 若用户坚持要多重启对比且成本可承受 → 给出重启方案但注明现代认识下预期收益有限;若用户问题实为"结果不稳/复现难" → 转 seed 方差议题并交
ml-experiment-tracking记录纪律。
B — 边界 (Boundary) ★
不要在以下情况使用此 skill
- 深度网络训练故障排除(NaN/发散/loss 不降的具体排查) →
ml-deep-training-playbook;本 skill 只讲方法选型与原理,不做工程排障。 - 还没选定模型类别就在比算法 →
ml-task-matching;优化方法是选定模型之后的执行层话题。 - 纯组合优化/整数规划/运筹排产 → 连续优化框架(梯度/凸性/KKT)基本失效,需专门工具。
文献反复警告的失败模式
- 非凸问题的收敛保证缺失: 一旦离开凸集凸函数的世界,任何迭代法都不再承诺全局最优——牛顿法可能收敛到鞍点甚至最大值点,报告结果时必须如实声明"找到的是驻点/局部解",禁止包装成"最优解"。
- 收敛≠泛化: 把训练目标推到更低损失并不自动带来更好的测试表现——深度学习中常观察到"训练损失继续降、验证性能反而回落",优化进度与泛化进度是两条不同的曲线,别用前者冒充后者。
- 迷信曲率的速度: 牛顿法"快"仅在极小点附近成立;远离极小点时曲率误导可能更糟(需阻尼/信任域保护),且对非凸问题 Hessian 可能不定。
- 把 KKT 当充分条件滥用: KKT 是一般情形的必要条件;只有凸问题下才升级为充分条件——非凸问题上满足 KKT 不代表最优。
- 忽视病态(ill-conditioning): 各方向曲率悬殊时固定学习率必然顾此失彼,这不是"再调调学习率"能根治的,需要预条件/自适应方法/输入标准化。
作者盲点 / 时代局限(外推声明)
- 必须声明: 本 skill 主题超出西瓜书覆盖范围——西瓜书正文仅在第 6 章用到对偶技巧、附录 B 给出最简拉格朗日乘子法,未系统讲授凸分析与现代优化方法;本 skill 为外推补全,素材为 Boyd & Vandenberghe (2004)、Nocedal & Wright (2006) 及深度学习优化文献(2014-2022)的公认共识转述,均标"(转述)"。
- 教科书的凸优化叙事偏静态:现代大规模实践中"随机性、非凸、有限预算"才是常态,确定性收敛速率定理(线性/超线性收敛)在实际训练中很少被逐字兑现。
- "鞍点主导高维景观"的证据主要来自特定随机函数模型与经验观察,并非对所有真实神经网络的严格定理;执行时应作为启发性认识而非已证事实引用。
- 二阶方法在大模型上的最新进展(Shampoo 类、K-FAC 变体等)持续演化,本 skill 只给出一阶/二阶/拟牛顿的经典分工边界。
容易混淆的邻近方法论
- 超参搜索(
ml-hpo-strategy): 搜的是"配置空间里的好配置",本 skill 处理的是"给定配置后如何求解优化问题本身"——两层不同的事,先定方法再谈搜索。 - "炼丹玄学论"/"局部最优宿命论": 前者否认优化过程的可诊断性,后者夸大局部极小风险;两者都被上述决策链与现代景观认识否定。
- 运筹学线性规划单纯形法: 同属优化但面向线性结构的专门分支,与梯度类迭代法解决的问题域重叠有限,勿混为一谈。
相关 skills
- depends-on: 无(本 skill 是执行层基础理论,可直接激活)
- contrasts-with: ml-deep-training-playbook(方法选型 vs 训练排障), ml-neural-training(现代优化观 vs 西瓜书第5章旧叙事)
- composes-with: ml-svm-playbook(对偶视角回扣), ml-hpo-strategy(方法定型后再搜超参), ml-diagnosis(收敛≠泛化的接力归因), ml-methodology-router
审计信息
- 来源性质: 扩充批D·核心缺口——主题超出西瓜书(2016)覆盖范围,R 段为优化领域公认文献的转述表述(均已标注"(转述)")
- 验证通过: 待流水线三重验证复核
- 测试通过率: 待阶段 4 测试 (详见 test-prompts.json)
- skill_version: 0.0.1
- 蒸馏时间: 2026-08-24