← 返回模块
Q2.4.2.1beta 可读 · 未来免费校验通过内容版本 2026-05-24

梯度与方向导数

2.4.2 · 面向最优化的微积分 · 数学与统计能力

Hook:风控室里的一行警告

周三盘中两点四十,上海某私募基金的多因子组合管理岗位上,你刚收到风控的一行警告:「沪深300 成分股口径下,当前权重 ww 对应的组合方差曲面在某只大盘消费品权重方向上斜率最大——加一个百分点的仓位,组合方差大致抬升 0.6 个 bp²。」 这一句话里其实只藏着一个数学对象:函数 f(w)=12wTΣwf(w) = \tfrac{1}{2} w^T \Sigma w 在当前点 ww 处的​​梯度(gradient)​ f(w)=Σw\nabla f(w) = \Sigma w,再加上一次方向导数(directional derivative)计算。本课把这个对象从最朴素的一元导数一路搭起来,告诉你它为什么是「最贵的方向」,并把它接到下一课要用的链式法则上。

一、从一元导数到偏导数

回顾一元情形:对于 f:RRf: \mathbb{R} \to \mathbb{R},导数 f(x0)f'(x_0) 就是 ffx0x_0 附近的最佳线性近似的斜率——形式上 f(x0+h)=f(x0)+f(x0)h+o(h)f(x_0 + h) = f(x_0) + f'(x_0) \cdot h + o(h)

把变量数从一个推到 nn 个,要先有一个原子操作:​​偏导数(partial derivative)​​。设 f:RnRf: \mathbb{R}^n \to \mathbb{R} 是一个标量值函数,自变量是 nn 维向量 x=(x1,,xn)Tx = (x_1, \dots, x_n)^T,那么对第 ii 个分量的偏导数是

fxi(x)=limh0f(x1,,xi+h,,xn)f(x)h\frac{\partial f}{\partial x_i}(x) = \lim_{h \to 0} \frac{f(x_1, \dots, x_i + h, \dots, x_n) - f(x)}{h}

直觉一句话:偏导数就是「只让 xix_i 动,其它分量都钉住时」的一元导数。它是「在第 ii 根坐标轴方向走一步」的瞬时变化率。

二、把 n 个偏导数装进一个向量:梯度

把所有 nn 个偏导数收成一列,就是 ffxx 处的梯度:

f(x)=(fx1(x),  fx2(x),  ,  fxn(x))T\nabla f(x) = \left( \frac{\partial f}{\partial x_1}(x),\; \frac{\partial f}{\partial x_2}(x),\; \dots,\; \frac{\partial f}{\partial x_n}(x) \right)^T

梯度本身是一个 nn 维列向量(vector),与自变量 xx 同维。它的作用体现在一阶泰勒近似里:当 ffxx 附近足够光滑时,

f(x+h)=f(x)+f(x)Th+o(h)f(x + h) = f(x) + \nabla f(x)^T h + o(\|h\|)

这里 h\|h\| 是向量范数(vector norm,本课默认欧几里得范数 h=hTh\|h\| = \sqrt{h^T h})。这条式子把多元函数的局部行为压缩成了一个「常数项 + 线性项 + 高阶余项」的展开——你能在白板上用一行字把它写完,正是它后面所有讨论的基础。

三、方向导数:沿任意方向走,斜率是多少

固定一个​​单位方向​ uRnu \in \mathbb{R}^nu=1\|u\| = 1),考察沿 uu 走一小步 tutut>0t > 0 且很小)时 ff 的变化率。把 h=tuh = tu 代入泰勒展开:

f(x+tu)f(x)=f(x)T(tu)+o(t)=tf(x)Tu+o(t)f(x + tu) - f(x) = \nabla f(x)^T (tu) + o(t) = t \cdot \nabla f(x)^T u + o(t)

两边除以 tt 并令 t0+t \to 0^+,得到 ​方向导数(directional derivative)​​:

Duf(x)=limt0+f(x+tu)f(x)t=f(x)uD_u f(x) = \lim_{t \to 0^+} \frac{f(x + tu) - f(x)}{t} = \nabla f(x) \cdot u

最右边的 f(x)u\nabla f(x) \cdot u 是梯度与方向向量的内积。把方向导数翻译成内积,立刻有一个几何意义清晰的结论。

四、最贵的方向:柯西—施瓦茨告诉你的事

对任意单位向量 uu,柯西—施瓦茨不等式给出

Duf(x)=f(x)uf(x)u=f(x)|D_u f(x)| = |\nabla f(x) \cdot u| \le \|\nabla f(x)\| \cdot \|u\| = \|\nabla f(x)\|

等号当且仅当 uuf(x)\nabla f(x) 平行时成立。具体地:

  1. u=f(x)/f(x)u = \nabla f(x) / \|\nabla f(x)\|,方向导数取到正的最大值 f(x)\|\nabla f(x)\|——这是​​最速上升方向(steepest ascent)​​。
  2. u=f(x)/f(x)u = -\nabla f(x) / \|\nabla f(x)\|,方向导数取到负的最大值 f(x)-\|\nabla f(x)\|——这是​​最速下降方向(steepest descent)​​。

下一节模块要讲的梯度下降法(gradient descent),核心更新规则 wwηf(w)w \leftarrow w - \eta \nabla f(w),几何上就是「每一步都沿当前点的最速下降方向走 η\eta 倍梯度长度」。

还有一条同样要记住的几何事实:在 ff 的等值面 {x:f(x)=c}\{x : f(x) = c\} 上,沿等值面切线方向走 ff 不变,所以方向导数为零,所以梯度与等值面切线正交(orthogonal)。换句话说,​​梯度永远是等值面的法向量​​——这一点在凸约束优化的 KKT 条件里你会再见到。

五、一个量化场景里要用到的二次型例子

设你管理一个沪深300 选股组合,权重向量为 wRnw \in \mathbb{R}^n,事先已经估出协方差矩阵 ΣRn×n\Sigma \in \mathbb{R}^{n \times n}(对称半正定)。组合方差是均值方差优化(mean-variance optimization)框架里那项熟悉的二次型:

f(w)=12wTΣwf(w) = \tfrac{1}{2} w^T \Sigma w

逐项求偏导,并用上 Σ=ΣT\Sigma = \Sigma^T

fwk=12i,jΣij(wiwj)wk=12(jΣkjwj+iΣikwi)=jΣkjwj=(Σw)k\frac{\partial f}{\partial w_k} = \tfrac{1}{2} \sum_{i,j} \Sigma_{ij} \frac{\partial (w_i w_j)}{\partial w_k} = \tfrac{1}{2} \left( \sum_j \Sigma_{kj} w_j + \sum_i \Sigma_{ik} w_i \right) = \sum_j \Sigma_{kj} w_j = (\Sigma w)_k

k=1,,nk = 1, \dots, n 的结果摞成列向量:

f(w)=Σw\nabla f(w) = \Sigma w

它就是「当前权重下,每只股票的边际方差贡献」组成的向量。结合上一节的最速上升结论:要让组合方差升得最快,应当在 Σw\Sigma w 方向上加仓;要让方差降得最快,应当在 Σw-\Sigma w 方向上减仓。这是回到风控那一行警告的精确数学表达——「w5w_5 方向斜率最大」正对应 (Σw)5(\Sigma w)_5 是该向量中数值最大的分量。

下面的滑块给出一个简化的方向导数计算器:固定 f(x)\nabla f(x) 的长度为 g、目标方向夹角为 theta(弧度),方向导数等于 g * cos(theta),最大化时 θ=0\theta = 0,最小化时 θ=π\theta = \pi

Formula Explorer

g * cos(theta)

六、自检

Exercise

f(x1,x2)=x12+3x1x2+2x22f(x_1, x_2) = x_1^2 + 3 x_1 x_2 + 2 x_2^2。求在点 x=(1,1)Tx = (1, 1)^T 处的梯度 f(x)\nabla f(x),并写出此处的最速上升单位方向。

提示
分别对 x1x_1x2x_2 求偏导:f/x1=2x1+3x2\partial f / \partial x_1 = 2 x_1 + 3 x_2f/x2=3x1+4x2\partial f / \partial x_2 = 3 x_1 + 4 x_2。代入数值即得梯度。
提示
最速上升方向是梯度除以它自己的范数。先算 f(1,1)\|\nabla f(1,1)\|,再把梯度按该长度归一。

通往下一节

你已经知道:在某点 xx 处,所有可能的方向里梯度告诉你最贵的那一条,长度告诉你最贵能有多贵。但实战中我们极少看到孤零零的 f(x)f(x)——更常见的是 f(g(W))f(g(W)) 这样的复合函数:损失依赖于网络输出,网络输出依赖于权重 WW,权重依赖于一个学习率调度。要把梯度从最外层一路传到最内层,需要的不再是单一的 f\nabla f,而是把一连串雅可比矩阵(Jacobian)按正确顺序乘起来的规则——也就是多元链式法则(chain rule)。下一课就讲这件事,并解释为什么在「输出维度远小于输入维度」时,反向传播(backpropagation)比正向自动微分省得多。