Hook:风控室里的一行警告
周三盘中两点四十,上海某私募基金的多因子组合管理岗位上,你刚收到风控的一行警告:「沪深300 成分股口径下,当前权重 w 对应的组合方差曲面在某只大盘消费品权重方向上斜率最大——加一个百分点的仓位,组合方差大致抬升 0.6 个 bp²。」 这一句话里其实只藏着一个数学对象:函数 f(w)=21wTΣw 在当前点 w 处的梯度(gradient) ∇f(w)=Σw,再加上一次方向导数(directional derivative)计算。本课把这个对象从最朴素的一元导数一路搭起来,告诉你它为什么是「最贵的方向」,并把它接到下一课要用的链式法则上。
一、从一元导数到偏导数
回顾一元情形:对于 f:R→R,导数 f′(x0) 就是 f 在 x0 附近的最佳线性近似的斜率——形式上 f(x0+h)=f(x0)+f′(x0)⋅h+o(h)。
把变量数从一个推到 n 个,要先有一个原子操作:偏导数(partial derivative)。设 f:Rn→R 是一个标量值函数,自变量是 n 维向量 x=(x1,…,xn)T,那么对第 i 个分量的偏导数是
∂xi∂f(x)=h→0limhf(x1,…,xi+h,…,xn)−f(x)
直觉一句话:偏导数就是「只让 xi 动,其它分量都钉住时」的一元导数。它是「在第 i 根坐标轴方向走一步」的瞬时变化率。
二、把 n 个偏导数装进一个向量:梯度
把所有 n 个偏导数收成一列,就是 f 在 x 处的梯度:
∇f(x)=(∂x1∂f(x),∂x2∂f(x),…,∂xn∂f(x))T
梯度本身是一个 n 维列向量(vector),与自变量 x 同维。它的作用体现在一阶泰勒近似里:当 f 在 x 附近足够光滑时,
f(x+h)=f(x)+∇f(x)Th+o(∥h∥)
这里 ∥h∥ 是向量范数(vector norm,本课默认欧几里得范数 ∥h∥=hTh)。这条式子把多元函数的局部行为压缩成了一个「常数项 + 线性项 + 高阶余项」的展开——你能在白板上用一行字把它写完,正是它后面所有讨论的基础。
三、方向导数:沿任意方向走,斜率是多少
固定一个单位方向 u∈Rn(∥u∥=1),考察沿 u 走一小步 tu(t>0 且很小)时 f 的变化率。把 h=tu 代入泰勒展开:
f(x+tu)−f(x)=∇f(x)T(tu)+o(t)=t⋅∇f(x)Tu+o(t)
两边除以 t 并令 t→0+,得到 方向导数(directional derivative):
Duf(x)=t→0+limtf(x+tu)−f(x)=∇f(x)⋅u
最右边的 ∇f(x)⋅u 是梯度与方向向量的内积。把方向导数翻译成内积,立刻有一个几何意义清晰的结论。
四、最贵的方向:柯西—施瓦茨告诉你的事
对任意单位向量 u,柯西—施瓦茨不等式给出
∣Duf(x)∣=∣∇f(x)⋅u∣≤∥∇f(x)∥⋅∥u∥=∥∇f(x)∥
等号当且仅当 u 与 ∇f(x) 平行时成立。具体地:
- 取 u=∇f(x)/∥∇f(x)∥,方向导数取到正的最大值 ∥∇f(x)∥——这是最速上升方向(steepest ascent)。
- 取 u=−∇f(x)/∥∇f(x)∥,方向导数取到负的最大值 −∥∇f(x)∥——这是最速下降方向(steepest descent)。
下一节模块要讲的梯度下降法(gradient descent),核心更新规则 w←w−η∇f(w),几何上就是「每一步都沿当前点的最速下降方向走 η 倍梯度长度」。
还有一条同样要记住的几何事实:在 f 的等值面 {x:f(x)=c} 上,沿等值面切线方向走 f 不变,所以方向导数为零,所以梯度与等值面切线正交(orthogonal)。换句话说,梯度永远是等值面的法向量——这一点在凸约束优化的 KKT 条件里你会再见到。
五、一个量化场景里要用到的二次型例子
设你管理一个沪深300 选股组合,权重向量为 w∈Rn,事先已经估出协方差矩阵 Σ∈Rn×n(对称半正定)。组合方差是均值方差优化(mean-variance optimization)框架里那项熟悉的二次型:
f(w)=21wTΣw
逐项求偏导,并用上 Σ=ΣT:
∂wk∂f=21i,j∑Σij∂wk∂(wiwj)=21(j∑Σkjwj+i∑Σikwi)=j∑Σkjwj=(Σw)k
把 k=1,…,n 的结果摞成列向量:
∇f(w)=Σw
它就是「当前权重下,每只股票的边际方差贡献」组成的向量。结合上一节的最速上升结论:要让组合方差升得最快,应当在 Σw 方向上加仓;要让方差降得最快,应当在 −Σw 方向上减仓。这是回到风控那一行警告的精确数学表达——「w5 方向斜率最大」正对应 (Σw)5 是该向量中数值最大的分量。
下面的滑块给出一个简化的方向导数计算器:固定 ∇f(x) 的长度为 g、目标方向夹角为 theta(弧度),方向导数等于 g * cos(theta),最大化时 θ=0,最小化时 θ=π。
Formula Explorer
g * cos(theta)
六、自检
Exercise
设 f(x1,x2)=x12+3x1x2+2x22。求在点 x=(1,1)T 处的梯度 ∇f(x),并写出此处的最速上升单位方向。
提示
分别对
x1、
x2 求偏导:
∂f/∂x1=2x1+3x2,
∂f/∂x2=3x1+4x2。代入数值即得梯度。
提示
最速上升方向是梯度除以它自己的范数。先算
∥∇f(1,1)∥,再把梯度按该长度归一。
通往下一节
你已经知道:在某点 x 处,所有可能的方向里梯度告诉你最贵的那一条,长度告诉你最贵能有多贵。但实战中我们极少看到孤零零的 f(x)——更常见的是 f(g(W)) 这样的复合函数:损失依赖于网络输出,网络输出依赖于权重 W,权重依赖于一个学习率调度。要把梯度从最外层一路传到最内层,需要的不再是单一的 ∇f,而是把一连串雅可比矩阵(Jacobian)按正确顺序乘起来的规则——也就是多元链式法则(chain rule)。下一课就讲这件事,并解释为什么在「输出维度远小于输入维度」时,反向传播(backpropagation)比正向自动微分省得多。