开篇场景(Hook):PM 真正想要的那个数
上海一家中型私募的 PM 周一早盘正在跟风控拉锯:当前组合的总杠杆(gross leverage)顶在 200% 的合规上限,他想申请抬到 220%。风控的问题不是「能不能」,而是「值不值」——多 20 个百分点能换多少边际信息比率(marginal information ratio)?答案其实早就躺在凸求解器(convex solver)的输出里:那条紧绑(active)的杠杆约束所对应的对偶变量 −ν∗,就是单位放松带来的最优目标改善值——一个不必再跑一遍回测的回答。本节要把这个对偶变量是怎么来的、什么时候等号能取到、以及在均值方差优化(mean-variance optimization, MVO)里具体长什么样子,从拉格朗日函数(Lagrangian)一路搭到 KKT 条件。
一、拉格朗日函数与对偶函数
延续上一节的标准凸优化(convex optimization)问题:f0 凸、fi 凸(i=1,…,m)、ajTx=bj(j=1,…,p),求 minf0(x)。把每条约束乘上一个标量(不等式约束乘 λi≥0、等式约束乘自由的 νj)再加回目标函数,便得到拉格朗日函数
L(x,λ,ν)=f0(x)+i=1∑mλifi(x)+j=1∑pνj(ajTx−bj)
在 x 上取下确界(infimum),得到对偶函数(dual function)
g(λ,ν)=xinfL(x,λ,ν)
关键观察:对固定的 x,L 是 (λ,ν) 的仿射函数(affine function);g 即一族仿射函数的逐点下确界——逐点下确界保持凹性,所以无论 f0、fi 是不是凸的,g 在其有效定义域上一定是凹的。正是这条凹性使「对偶问题」本身又是一个凸优化问题,可放心求解。
二、弱对偶与 Slater 条件
任取原始可行点 x~(满足 fi(x~)≤0、Ax~=b)与对偶可行点(λ≥0、ν 任意):
g(λ,ν)=xinfL(x,λ,ν)≤L(x~,λ,ν)≤f0(x~)
第二个不等号用到 λifi(x~)≤0 与 ajTx~−bj=0。左边取 sup、右边取 inf,立刻得到弱对偶(weak duality)
d∗=λ≥0,νsupg(λ,ν)≤p∗=x feasibleinff0(x)
差值 p∗−d∗≥0 称为对偶间隙(duality gap)。在最小例子上验证一下:minx2 s.t. x≥1 的 p∗=1;对偶函数 g(λ)=−λ2/4+λ 在 λ∗=2 取得最大值 1,间隙为零。
Slater 条件:若原问题为凸优化,且存在严格可行的内点(所有非仿射不等式严格满足 fi(x)<0),则强对偶 d∗=p∗ 成立,且对偶最优在某 (λ∗,ν∗) 处取到。这是从业者每天默认引用的「正则性条件」:带预算约束的均值方差、普通最小二乘(ordinary least squares, OLS)、上一节那个二阶锥(second-order cone, SOC)形式的跟踪误差问题,全部满足。换句话说,量化场景里几乎没有 Slater 不成立的情形——直接套用就行。
三、KKT 条件
设 f0,fi 可微、强对偶成立、x∗ 与 (λ∗,ν∗) 分别为原始与对偶最优。由 g(λ∗,ν∗)=f0(x∗) 出发可证:x∗ 必为 L(⋅,λ∗,ν∗) 关于 x 的极小点,故 ∇xL(x∗,λ∗,ν∗)=0;夹逼后还能挤出 λi∗fi(x∗)=0(参考 Boyd 中译本 §5.5)。整理得到KKT 条件(Karush-Kuhn-Tucker conditions, KKT):
- 稳定性(stationarity):∇f0(x∗)+∑iλi∗∇fi(x∗)+∑jνj∗aj=0;
- 原始可行(primal feasibility):fi(x∗)≤0,Ax∗=b;
- 对偶可行(dual feasibility):λi∗≥0;
- 互补松弛(complementary slackness):λi∗fi(x∗)=0。
凸 + Slater 的设定下,这四条既必要又充分:任何一组 (x∗,λ∗,ν∗) 满足全部四条,它就是原始-对偶最优对(primal-dual optimal pair)。互补松弛的精确读法值得记住:「λi∗>0」必定意味着约束在最优处紧绑(fi(x∗)=0);反之不一定——约束可以恰好紧绑而对应乘子仍为 0(退化情形)。但「未绑(fi(x∗)<0)」一定推出 λi∗=0。
四、等式约束均值方差的闭式解
把 KKT 落到一个量化研究员每天都遇到的最小例子。设资产数为 n,预期收益向量 μ∈Rn,协方差矩阵(covariance matrix) Σ∈Rn×n 为正定(强于 半正定(positive semidefinite, PSD))。考虑带预算约束的等式型均值方差优化
w∈Rnmin21wTΣw−μTws.t.1Tw=1
只有一条等式约束(预算 budget),引入单一乘子 ν,拉格朗日为
L(w,ν)=21wTΣw−μTw+ν(1Tw−1)
KKT 中的稳定性即 ∇wL=Σw−μ+ν1=0。取矩阵逆(matrix inverse)Σ−1,得
w∗=Σ−1(μ−ν∗1)
把它代回预算约束 1Tw∗=1,解出乘子
ν∗=1TΣ−111TΣ−1μ−1
这就是组合优化(portfolio optimization)课本里反复出现的「带预算约束的有效前沿(efficient frontier)解」。模块 2.4.2 里那个不带预算约束的版本 w∗=Σ−1μ,不过是这里 ν∗ 被强行设为零的退化情形(KKT-degenerate case)。
在沪深300 ETF 成分股的实践里,把 Σ 取作过去 250 个交易日日频收益的样本估计、μ 取作分析师一致预期,再代入上式,便是国内多数私募 GMV / 切线组合的「教科书第一版」实现。
五、影子价格的实战解读
把预算右端 b=1 微调到 1+ϵ,最优值 p∗(b) 的局部斜率即
∂b∂p∗=−ν∗
这就是文章开头那位 PM 的问题:把总杠杆上限从 200% 抬到 220% 能换多少风险调整收益?解一次凸优化器,读输出里该约束对应的 −ν∗,再乘以 0.2,就是边际改善的一阶估计——不必再做扫描。下面试着拨动两资产的预期收益看 ν∗ 如何漂移(取 Σ=I 的两资产情形,由上式可算出 ν∗=(μ1+μ2−1)/2):
Formula Explorer
(mu1 + mu2 - 1) / 2
对一家 AMAC 备案私募而言,这一行数字足以把「向产品负责人申请放宽合规上限」从猜测变成可量化的提案——也正是对偶变量比原始解更有用的典型场景。
六、练习
Exercise
对问题 minx21xTx s.t. aTx=b:(i) 写出拉格朗日函数;(ii) 用 KKT 推出 x∗=(b/∥a∥22)a;(iii) 取 a=(1,2)T、b=3,数值验证 f0(x∗)=g(ν∗)(即对偶间隙为零)。
提示
拉格朗日为
L(x,ν)=21xTx+ν(aTx−b)。稳定性给出
∇xL=x+νa=0,即
x=−νa;把它代回等式约束
aTx=b 解出
ν∗,再回代即得
x∗。
提示
对偶函数
g(ν)=−21ν2∥a∥2−νb,
ν∗=−b/∥a∥2。代入
∥a∥2=5:
x∗=(0.6,1.2)T、
f0(x∗)=0.9=g(ν∗),间隙为零。
七、通往下一节
到这里你已经能把任意一条凸约束翻译成一个对偶变量,并用 KKT 把求解过程压成一组(通常仍是线性的)方程。下一节要把这套机制装进真正的生产级组合管理:长(long-only)、换手(turnover)、事前跟踪误差(ex-ante tracking error)、总杠杆上限会被一并塞进二阶锥规划(second-order cone programming, SOCP)的语言里,而每条约束的影子价格就成为递交给 PM 的可读诊断——是哪条约束在咬住组合,放松一单位能换多少边际信息比率,答案统统藏在 −λ∗ 与 −ν∗ 里。