← 返回模块
2.5.1.3beta 可读 · 未来付费校验通过内容版本 2026-05-26

拉格朗日对偶与 KKT 条件

2.5.1 · 凸优化 · 数学与统计能力

开篇场景(Hook):PM 真正想要的那个数

上海一家中型私募的 PM 周一早盘正在跟风控拉锯:当前组合的总杠杆(gross leverage)顶在 200% 的合规上限,他想申请抬到 220%。风控的问题不是「能不能」,而是「值不值」——多 20 个百分点能换多少边际信息比率(marginal information ratio)?答案其实早就躺在凸求解器(convex solver)的输出里:那条紧绑(active)的杠杆约束所对应的对偶变量 ν-\nu^*,就是单位放松带来的最优目标改善值——一个不必再跑一遍回测的回答。本节要把这个对偶变量是怎么来的、什么时候等号能取到、以及在均值方差优化(mean-variance optimization, MVO)里具体长什么样子,从拉格朗日函数(Lagrangian)一路搭到 KKT 条件。

一、拉格朗日函数与对偶函数

延续上一节的标准凸优化(convex optimization)问题:f0f_0 凸、fif_i 凸(i=1,,mi = 1, \ldots, m)、ajTx=bja_j^T x = b_jj=1,,pj = 1, \ldots, p),求 minf0(x)\min f_0(x)。把每条约束乘上一个标量(不等式约束乘 λi0\lambda_i \ge 0、等式约束乘自由的 νj\nu_j)再加回目标函数,便得到​​拉格朗日函数​

L(x,λ,ν)=f0(x)+i=1mλifi(x)+j=1pνj(ajTxbj)L(x, \lambda, \nu) = f_0(x) + \sum_{i=1}^m \lambda_i f_i(x) + \sum_{j=1}^p \nu_j (a_j^T x - b_j)

xx 上取下确界(infimum),得到​​对偶函数(dual function)​

g(λ,ν)=infxL(x,λ,ν)g(\lambda, \nu) = \inf_x L(x, \lambda, \nu)

关键观察:对固定的 xxLL(λ,ν)(\lambda, \nu) 的仿射函数(affine function);gg 即一族仿射函数的逐点下确界——逐点下确界保持凹性,所以​​无论 f0f_0fif_i 是不是凸的,gg 在其有效定义域上一定是凹的​​。正是这条凹性使「对偶问题」本身又是一个凸优化问题,可放心求解。

二、弱对偶与 Slater 条件

任取原始可行点 x~\tilde x(满足 fi(x~)0f_i(\tilde x) \le 0Ax~=bA \tilde x = b)与对偶可行点(λ0\lambda \ge 0ν\nu 任意):

g(λ,ν)=infxL(x,λ,ν)    L(x~,λ,ν)    f0(x~)g(\lambda, \nu) = \inf_x L(x, \lambda, \nu) \;\le\; L(\tilde x, \lambda, \nu) \;\le\; f_0(\tilde x)

第二个不等号用到 λifi(x~)0\lambda_i f_i(\tilde x) \le 0ajTx~bj=0a_j^T \tilde x - b_j = 0。左边取 sup\sup、右边取 inf\inf,立刻得到​​弱对偶(weak duality)​

d=supλ0,  νg(λ,ν)    p=infx feasiblef0(x)d^* = \sup_{\lambda \ge 0,\; \nu} g(\lambda, \nu) \;\le\; p^* = \inf_{x \text{ feasible}} f_0(x)

差值 pd0p^* - d^* \ge 0 称为​​对偶间隙(duality gap)​​。在最小例子上验证一下:minx2\min x^2 s.t. x1x \ge 1p=1p^* = 1;对偶函数 g(λ)=λ2/4+λg(\lambda) = -\lambda^2/4 + \lambdaλ=2\lambda^* = 2 取得最大值 11,间隙为零。

​Slater 条件​​:若原问题为凸优化,且存在严格可行的内点(所有非仿射不等式严格满足 fi(x)<0f_i(x) < 0),则​​强对偶 d=pd^* = p^* 成立​​,且对偶最优在某 (λ,ν)(\lambda^*, \nu^*) 处取到。这是从业者每天默认引用的「正则性条件」:带预算约束的均值方差、普通最小二乘(ordinary least squares, OLS)、上一节那个二阶锥(second-order cone, SOC)形式的跟踪误差问题,全部满足。换句话说,量化场景里几乎没有 Slater 不成立的情形——直接套用就行。

三、KKT 条件

f0,fif_0, f_i 可微、强对偶成立、xx^*(λ,ν)(\lambda^*, \nu^*) 分别为原始与对偶最优。由 g(λ,ν)=f0(x)g(\lambda^*, \nu^*) = f_0(x^*) 出发可证:xx^* 必为 L(,λ,ν)L(\cdot, \lambda^*, \nu^*) 关于 xx 的极小点,故 xL(x,λ,ν)=0\nabla_x L(x^*, \lambda^*, \nu^*) = 0;夹逼后还能挤出 λifi(x)=0\lambda_i^* f_i(x^*) = 0(参考 Boyd 中译本 §5.5)。整理得到​​KKT 条件(Karush-Kuhn-Tucker conditions, KKT)​​:

  1. ​稳定性(stationarity)​​:f0(x)+iλifi(x)+jνjaj=0\nabla f_0(x^*) + \sum_i \lambda_i^* \nabla f_i(x^*) + \sum_j \nu_j^* a_j = 0
  2. ​原始可行(primal feasibility)​​:fi(x)0f_i(x^*) \le 0Ax=bA x^* = b
  3. ​对偶可行(dual feasibility)​​:λi0\lambda_i^* \ge 0
  4. ​互补松弛(complementary slackness)​​:λifi(x)=0\lambda_i^* f_i(x^*) = 0

凸 + Slater 的设定下,这四条​​既必要又充分​​:任何一组 (x,λ,ν)(x^*, \lambda^*, \nu^*) 满足全部四条,它就是原始-对偶最优对(primal-dual optimal pair)。互补松弛的精确读法值得记住:「λi>0\lambda_i^* > 0」必定意味着约束在最优处紧绑(fi(x)=0f_i(x^*) = 0);反之不一定——约束可以恰好紧绑而对应乘子仍为 0(退化情形)。但「未绑(fi(x)<0f_i(x^*) < 0)」一定推出 λi=0\lambda_i^* = 0

四、等式约束均值方差的闭式解

把 KKT 落到一个量化研究员每天都遇到的最小例子。设资产数为 nn,预期收益向量 μRn\mu \in \mathbb{R}^n,​​协方差矩阵(covariance matrix)​ ΣRn×n\Sigma \in \mathbb{R}^{n \times n} 为正定(强于 ​半正定(positive semidefinite, PSD)​​)。考虑带预算约束的等式型​​均值方差优化​

minwRn12wTΣwμTws.t.1Tw=1\min_{w \in \mathbb{R}^n} \tfrac{1}{2} w^T \Sigma w - \mu^T w \quad \text{s.t.} \quad \mathbf{1}^T w = 1

只有一条等式约束(预算 budget),引入单一乘子 ν\nu,拉格朗日为

L(w,ν)=12wTΣwμTw+ν(1Tw1)L(w, \nu) = \tfrac{1}{2} w^T \Sigma w - \mu^T w + \nu (\mathbf{1}^T w - 1)

KKT 中的稳定性即 wL=Σwμ+ν1=0\nabla_w L = \Sigma w - \mu + \nu \mathbf{1} = 0。取​​矩阵逆(matrix inverse)​​​Σ1\Sigma^{-1},得

w=Σ1(μν1)w^* = \Sigma^{-1} (\mu - \nu^* \mathbf{1})

把它代回预算约束 1Tw=1\mathbf{1}^T w^* = 1,解出乘子

ν=1TΣ1μ11TΣ11\nu^* = \frac{\mathbf{1}^T \Sigma^{-1} \mu - 1}{\mathbf{1}^T \Sigma^{-1} \mathbf{1}}

这就是组合优化(portfolio optimization)课本里反复出现的「带预算约束的有效前沿(efficient frontier)解」。模块 2.4.2 里那个不带预算约束的版本 w=Σ1μw^* = \Sigma^{-1} \mu,不过是这里 ν\nu^* 被强行设为零的退化情形(KKT-degenerate case)。

在沪深300 ETF 成分股的实践里,把 Σ\Sigma 取作过去 250 个交易日日频收益的样本估计、μ\mu 取作分析师一致预期,再代入上式,便是国内多数私募 GMV / 切线组合的「教科书第一版」实现。

五、影子价格的实战解读

把预算右端 b=1b = 1 微调到 1+ϵ1 + \epsilon,最优值 p(b)p^*(b) 的局部斜率即

pb=ν\frac{\partial p^*}{\partial b} = -\nu^*

这就是文章开头那位 PM 的问题:把总杠杆上限从 200% 抬到 220% 能换多少风险调整收益?解一次凸优化器,读输出里该约束对应的 ν-\nu^*,再乘以 0.20.2,就是边际改善的一阶估计——不必再做扫描。下面试着拨动两资产的预期收益看 ν\nu^* 如何漂移(取 Σ=I\Sigma = I 的两资产情形,由上式可算出 ν=(μ1+μ21)/2\nu^* = (\mu_1 + \mu_2 - 1)/2):

Formula Explorer

(mu1 + mu2 - 1) / 2

对一家 AMAC 备案私募而言,这一行数字足以把「向产品负责人申请放宽合规上限」从猜测变成可量化的提案——也正是对偶变量比原始解更有用的典型场景。

六、练习

Exercise

对问题 minx12xTx\min_x \tfrac{1}{2} x^T x s.t. aTx=ba^T x = b:(i) 写出拉格朗日函数;(ii) 用 KKT 推出 x=(b/a22)ax^* = (b / \|a\|_2^2) \, a;(iii) 取 a=(1,2)Ta = (1, 2)^Tb=3b = 3,数值验证 f0(x)=g(ν)f_0(x^*) = g(\nu^*)(即对偶间隙为零)。

提示
拉格朗日为 L(x,ν)=12xTx+ν(aTxb)L(x, \nu) = \tfrac{1}{2} x^T x + \nu (a^T x - b)。稳定性给出 xL=x+νa=0\nabla_x L = x + \nu a = 0,即 x=νax = -\nu a;把它代回等式约束 aTx=ba^T x = b 解出 ν\nu^*,再回代即得 xx^*
提示
对偶函数 g(ν)=12ν2a2νbg(\nu) = -\tfrac{1}{2}\nu^2 \|a\|^2 - \nu bν=b/a2\nu^* = -b/\|a\|^2。代入 a2=5\|a\|^2 = 5x=(0.6,1.2)Tx^* = (0.6, 1.2)^Tf0(x)=0.9=g(ν)f_0(x^*) = 0.9 = g(\nu^*),间隙为零。

七、通往下一节

到这里你已经能把任意一条凸约束翻译成一个对偶变量,并用 KKT 把求解过程压成一组(通常仍是线性的)方程。下一节要把这套机制装进真正的生产级组合管理:长(long-only)、换手(turnover)、事前跟踪误差(ex-ante tracking error)、总杠杆上限会被一并塞进二阶锥规划(second-order cone programming, SOCP)的语言里,而每条约束的影子价格就成为递交给 PM 的可读诊断——是哪条约束在咬住组合,放松一单位能换多少边际信息比率,答案统统藏在 λ-\lambda^*ν-\nu^* 里。