第 35 篇
拉格朗日乘子
量化课堂第 35 篇(postId=3796,作者肖睿,编辑宏观经济算命师,难度进阶上、深度 level-1,2016-10-22 上线)。数学规划系列第三篇(继 33 总纲、34 线搜索):讲「带等式约束的优化」怎么改写。核心主张:拉格朗日乘子不是直接算结果的算法,而是把约束问题转成更易处理的格式的工具;著名的马科维兹均值-方差问题就用它解(第 23 篇《MPT 模型的解析解(上)》正是它的直接续篇)。素材见 raw/collections/jq-quant-classroom/35-35-拉格朗日乘子md.md。
这是什么
一篇几何驱动的推导文。它不讲套公式,而是先建立两个定理——「梯度与水平集垂直」和「约束最优点处 ∇f ∥ ∇g」——再推出拉格朗日函数 L(x,λ)=f(x)−λ(g(x)−c),说明「∇L=0」恰好等价于原约束问题的一阶条件,最后给多约束的完整版与数值求解思路。全程用一个「爬山沿水平集找海拔最高点」的寓言式例子带路。
核心要点
要解决的问题
- max f(x),满足 g(x) = c,x ∈ Rⁿ(f、g 都是 C¹)。即:在 g 的取值固定在 c 的集合上,最大化 f。
第一步:约束的几何 = g 的水平集
- g 在 c 的水平集 L_c = {x ∈ Rⁿ : g(x) = c},也就是可行域。
- 例:g̃(x,y)=x²−y²,取 c=−1。水平集 x²−y²=−1 是两条曲线,可写成 y=±√(x²+1)。
- 定理(梯度 ⊥ 水平集):g 是 C¹、α 是落在 L_c 里的 C¹ 曲线,则 ∇g(α(t))·α′(t)=0。证明:g(α(t))=c 恒成立,两边对 t 微分 + 链式法则得 0。
- 直觉:沿水平集走海拔(g 值)不变,而 ∇g 是 g 上升最快的方向——所以在水平集上的行进方向必须与 ∇g 垂直。
第二步:在可行域上优化 f → ∇f ∥ ∇g
- 目标函数例子:f̃(x,y) = 20/(3+x²+2y²),一个中间隆起的小山丘。要在 L_{−1}(两条曲线)上找 f 的最大值。
- 寓言推导:沿路径 p(t)=(t,√(t²+1)) 走,海拔 f̃(p(t)) = 20/(32+3t²)。最高点处 0 = (d/dt)f̃(p(t)) = ∇f̃(p(t))·p′(t) → ∇f̃ 也与水平集切线垂直。
- 于是:约束最优点上,∇g 垂直水平集、∇f 也垂直水平集 → ∇f ∥ ∇g(平行)。
- 定理(驻点条件):若 x₀ ∈ L_c 是 f 在 L_c 上的极大或极小点,则存在 λ ∈ R 使 ∇f(x₀) = λ∇g(x₀)。满足此条件的点叫驻点(critical point)。n=2 的情形正如寓言推导;高维证明细节更多,原文说「只要相信它是对的」。
- 反过来说:用这个方法算出的点不一定是极大点,可能是极小或鞍点——要另外验证,或把所有驻点算出来比大小。
第三步:为什么要拉格朗日函数
- 上面例子太简单(二维、水平集是两条可写的曲线,纯微积分就能解)。高维里 L_c 没法用曲线描述,不能这样手解;但两个定理在高维依然成立:极值点必满足 g(x)=c 且 ∇f(x)=λ∇g(x)((*))。
- 拉格朗日函数把 (*) 的两个条件合进一个函数:L(x,λ) = f(x) − λ(g(x) − c),定义在 R^{n+1} 上。λ 叫拉格朗日乘子。
- 求导:∇L = [∇f(x)−λ∇g(x); −g(x)+c]。∇L(x,λ)=0 ⟺ (g(x)=c 且 ∇f(x)=λ∇g(x)) ⟺ x 满足 (*)。
- 结论:带等式约束的优化 ⟺ 找 ∇L 的零点。
完整版:多个等式约束
- m 个约束 gᵢ(x)=cᵢ(i=1…m):L(x,λ) = f(x) − λ₁(g₁(x)−c₁) − … − λ_m(g_m(x)−c_m),λ=(λ₁…λ_m)。
- 若 x̃ 是极值点,必存在 λ̃ 使 ∇L(x̃,λ̃)=0(必要条件;严格证明需更多线性代数与微积分工具,本文不展开)。
- 若 f、gᵢ 很「丑」:∇L 的零点没法手解 → 转成 R^{n+m} 上的无约束问题 min ‖∇L(x,λ)‖,用第 34 篇的线搜索方法数值解——「有约束 → 无约束」的改写正是拉格朗日乘子的价值。
- 若 f 与约束都是二次多项式:求 ∇L 零点不算绝望地难——很多重要应用在此范畴,马科维兹均值-方差问题就是其一。
机制 / 论证
- 为什么极值点上 ∇f ∥ ∇g:约束把搜索限制在水平集 L_c 上;若在极值点 ∇f 还带有沿 L_c 的分量,沿那个分量挪一点就能让 f 更大/更小,矛盾。所以 ∇f 只能垂直于 L_c,与同样垂直的 ∇g 平行。
- 为什么 L 能把两个条件合一:∇L 的两个分量块分别对应「梯度平行」(对 x 求导)与「回到约束」(对 λ 求导)——λ 本身就是为把等式约束 c 拉进目标而设的自由变量,令 ∇L=0 逼它同时满足两件事。
- 为什么说它「不是算法」:拉格朗日乘子只负责改写问题形式;真正算出数字靠线搜索(34)或解析(二次情形)。它把「带约束」这个难点消掉,让已有求解器能接手。
- 为什么第 23 篇能给出 MPT 解析解:MPT 的目标(方差 = ½wᵀΣw 二次型)与约束(wᵀr=μ、wᵀ1=1 线性)都结构良好 → 拉格朗日一阶条件退化成线性方程组 → 手解出 w=λ₁Σ⁻¹r+λ₂Σ⁻¹1 与有效前沿闭合式。本文结语预告的「下一篇文章」正是第 23 篇。
可操作
- 带等式约束 max f s.t. g(x)=c 的标准流程:
- 写拉格朗日函数 L(x,λ) = f(x) − λ(g(x)−c)。
- 对 x₁…xₙ 和 λ 分别求偏导,令 ∇L=0。
- 解出驻点(满足 g=c 且 ∇f=λ∇g 的点)。
- 驻点可能是极大/极小/鞍点——逐个验证或全列出来比较。
- 多个等式约束:每个约束一个乘子 λᵢ,L = f − Σλᵢ(gᵢ−cᵢ),条件仍是 ∇L=0。
- 函数复杂时:把问题换成 min ‖∇L(x,λ)‖ 的无约束优化,交给第 34 篇的线搜索(梯度下降/牛顿 + 回溯)数值解。
- MPT 的直接套用见 MPT 模型的解析解(上):λ 由 [μ;1]=[[a,b],[b,c]][λ₁;λ₂] 解出,w=λ₁Σ⁻¹r+λ₂Σ⁻¹1,有效前沿 σ(μ)=√((cμ²−2bμ+a)/(ac−b²))。
术语
- 水平集(level set):函数 g 取固定值 c 的点集 L_c。
- 驻点(critical point):∇f(x₀)=λ∇g(x₀) 且 g(x₀)=c 的点——约束问题的极值候选。
- 拉格朗日乘子 λ:把等式约束并入目标的辅助变量(严格说 λ 是乘子,「拉格朗日乘子法」指整套路子)。
- 拉格朗日函数 L:f(x)−λ(g(x)−c),其梯度零点 ⟺ 约束问题一阶条件。
- 约束优化 → 无约束优化:拉格朗日乘子法的核心改写价值。
不确定 / 待验证
- 文中「梯度 ⊥ 水平集」「驻点条件」「多约束版」三个定理只给了 n=2 情形的推导/示意,高维与多约束的严格证明没展开(原文明说需要更多工具)。
- 用拉格朗日条件找到的点只是候选,二阶充分条件(判别极大/极小)本文未覆盖;鞍点情形只提了一句。
- λ 的经济含义(约束的「影子价格」/边际价值)本文没讲——不要自行外推;MPT 里 λ₁≈0 的解读来自第 23 篇的算例,不是本文内容。
- 本文只处理等式约束;组合优化里常见的 wᵢ≥0(不做空)、wᵢ≤1/3 等不等式约束需要 KKT 条件,本文未覆盖 [需要验证],落地时别把等式约束工具硬套在不等式上。
- 结语预告的「下一篇用拉格朗日解马科维兹」即第 23 篇(MPT 解析解上,postId=4596);其「下篇」(带无风险资产版)未入库。
- 寓言数值:f̃(p(t))=20/(32+3t²) 中 32 来自 3+t²+2(t²+1)=3+3t²+2=… 即分母 3+x²+2y² 代入 y²=t²+1 得 3+t²+2t²+2=5+3t²——raw 原文写 32 疑为 5 之笔误(或路径书写差异),不影响结论 [需要验证]。
相关
- 拉格朗日乘子(等式约束优化) — 拉格朗日乘子共享概念页(本篇 + MPT 应用)
- MPT 模型的解析解(上) — 本篇的直接应用:MPT 解析解(第 23 篇,postId=4596)
- MPT 模型与有效前沿(均值-方差分析) — MPT 与有效前沿(拉格朗日解出的前沿)
- 无约束非线性规划:线搜索方法 — 转成无约束后的数值求解器(第 34 篇)
- 数学规划简介 — 数学规划总纲(本篇所属系列的第一篇)
- 聚宽量化课堂(低频量化策略 43 篇) — 量化课堂 43 篇总览
更新 2026-09-06