#013. 微积分与优化例题:从导数到约束优化
#学习目标
会算
看到一元函数、多元函数、矩阵形式目标函数时,能写出导数、梯度、Hessian,知道每一项从哪里来。
会解释
能把 \(f'(x)\)、\(\nabla f\)、\(H\)、Lagrange 乘子解释成“局部斜率、最陡上升方向、曲率、约束力”。
会连接算法
能把 Taylor 近似、梯度下降、二阶条件、最小二乘和 LLM/量化里的训练、拟合、风险控制联系起来。
每道题都按同一个节奏走:先看题目在问什么,再找对应公式,然后逐步代入计算,最后解释结果的直觉。零基础学习时,不要跳过“为什么这样设”这一步;面试官通常不是只看最后数值,而是看你能不能把数学对象翻译成算法行为。
#概念起点:这几类题到底在问什么
微积分和优化题表面上有很多公式,但核心问题只有三个:函数往哪个方向变大或变小、弯曲程度如何、在限制条件下怎么找最优。先把符号认清楚,后面的计算会轻很多。
| 对象 | 它回答的问题 | 常见面试问法 |
|---|---|---|
| \(f'(x)\) | 一元函数在某一点的瞬时变化率。 | 这个激活函数梯度会不会消失?某个 loss 对参数怎么变? |
| \(\nabla f(x,y)\) | 多元函数对每个变量的偏导数组成的向量,指向局部最陡上升方向。 | 为什么梯度下降要沿 \(-\nabla f\) 更新?方向导数怎么算? |
| \(H\) | 二阶偏导数组成的矩阵,描述函数在不同方向上的弯曲。 | 怎么判断驻点是极小值、极大值还是鞍点?牛顿法为什么用 Hessian? |
| \(\mathcal{L}\) | 把目标函数和约束合在一起,用无约束一阶条件求受约束最优。 | 带预算、权重和风险约束的最优化怎么写? |
#例题 1:softplus 的导数和曲率
设 \(f(x)=\log(1+e^x)\)。求 \(f'(x)\)、\(f''(x)\),计算 \(x=0\) 处的一阶和二阶导数,并解释它为什么常被看成 ReLU 的平滑版本。
这道题在问两件事:第一,函数每个点的斜率是多少;第二,斜率本身变化得快不快。softplus 里面有复合函数:外层是 \(\log(\cdot)\),内层是 \(1+e^x\)。用链式法则,对外层求导得到“内层的倒数”,再乘内层导数 \(e^x\)。
这里 \(\sigma(x)\) 是 sigmoid 函数。为了求二阶导数,可以继续对 \(\sigma(x)\) 求导:
代入 \(x=0\),先算 \(\sigma(0)=1/(1+e^0)=1/2\),所以:
因为 \(0<\sigma(x)<1\),所以 \(f''(x)>0\),函数是凸的。凸的意思是曲线整体像碗一样向上弯,没有“向下凹”的局部区域。
再看它和 ReLU 的关系。ReLU 是 \(\max(0,x)\):当 \(x<0\) 时输出 0,当 \(x>0\) 时输出 \(x\)。softplus 在两端也有类似行为:
不同点在 \(x=0\) 附近。ReLU 在 0 处有尖点,导数从 0 突然跳到 1;softplus 的导数从 0 平滑过渡到 1,所以优化时不会遇到不可导尖点。
导数 \(\sigma(x)\) 是一条从 0 平滑过渡到 1 的曲线。它告诉优化器:负区间不是完全没有梯度,而是梯度很小;正区间接近线性,梯度接近 1。二阶导数在 0 附近最大,说明 softplus 在转折区弯得最明显;远离 0 后二阶导数接近 0,函数近似直线或常数。
#例题 2:Taylor 近似到底在近似什么
用二阶 Taylor 展开近似 \(\log(1+x)\) 在 \(x=0.05\) 和 \(x=0.5\) 处的值,并说明为什么离展开点越远,误差通常越明显。
Taylor 近似的想法是:在一个熟悉的点附近,用“函数值、斜率、曲率”拼出一个多项式,临时代替原函数。这里展开点是 \(0\),函数是 \(g(x)=\log(1+x)\)。
先计算展开所需的导数:
二阶 Taylor 公式是:
代入上面的数值,得到:
先代入 \(x=0.05\):
真实值 \(\log(1.05)\approx 0.04879\),误差大约是 \(0.00004\),很小。再代入 \(x=0.5\):
真实值 \(\log(1.5)\approx 0.40547\),误差大约是 \(0.03047\),明显变大。原因不是 Taylor 公式错了,而是我们只保留到二阶,丢掉了后面的高阶项:
当 \(x=0.05\) 时,\(x^3\) 已经非常小;当 \(x=0.5\) 时,\(x^3/3\) 约为 \(0.04167\),不能再忽略,所以二阶近似会低估真实值。
Taylor 展开就是“在当前点附近,用一个更简单的多项式临时代替复杂函数”。梯度下降只相信一阶近似,所以它只知道往哪里下降;牛顿法利用二阶近似,所以还会考虑不同方向的曲率,从而调整步长和方向。
#例题 3:多元梯度与最陡下降
设 \(f(x,y)=x^2+2xy+3y^2\)。求 \(\nabla f(1,-1)\),给出单位方向 \(u=(3/5,4/5)\) 上的方向导数,并说明哪个方向下降最快。
这是一个二元函数。变量有两个:\(x\) 和 \(y\)。求梯度时,分别问:“只动 \(x\),函数怎么变?”以及“只动 \(y\),函数怎么变?”这两个答案就是两个偏导。
对 \(x\) 求偏导时,把 \(y\) 当常数:
其中 \(x^2\) 对 \(x\) 的导数是 \(2x\),\(2xy\) 对 \(x\) 的导数是 \(2y\),\(3y^2\) 对 \(x\) 的导数是 0。对 \(y\) 求偏导时,把 \(x\) 当常数:
代入 \((1,-1)\):
梯度 \((0,-4)\) 的意思是:在 \((1,-1)\) 附近,单独增加 \(x\) 的一阶影响为 0,增加 \(y\) 会让函数值快速下降,因为 \(y\) 分量的偏导是 \(-4\)。
方向导数要把梯度和单位方向做内积:
结果是负数,说明沿 \(u\) 方向走,函数值一开始会下降;绝对值 \(16/5\) 表示下降速度的大小。
最陡上升方向是梯度方向 \((0,-4)\) 的单位化,也就是 \((0,-1)\)。最陡下降方向是负梯度方向 \((0,4)\) 的单位化,也就是 \((0,1)\)。
梯度是一个“局部线性打分器”。给它一个方向 \(u\),内积 \(\nabla f^Tu\) 就告诉你沿这个方向函数值一开始涨还是跌、涨跌多快。
#例题 4:Hessian 判断极小值
设 \(f(x,y)=x^2+2xy+2y^2-4x\)。求驻点,并判断它是否是局部极小值。
驻点的定义是梯度为 0 的点。直觉上,在驻点处,一阶变化看不出函数往哪个方向立刻上升或下降。但这还不代表它一定是最小值,还要看二阶曲率。
先求梯度:
令梯度为 0:
两式同时除以 2,得到更简单的线性方程组:
用第二式减第一式,得到 \(y=-2\),再代入 \(x+y=2\),得到 \(x=4\)。所以驻点是 \((4,-2)\)。
接着求 Hessian,也就是把二阶偏导排成矩阵:
二维矩阵正定的快速判断是:左上角元素大于 0,行列式大于 0。这里:
所以 \(H\) 正定,驻点 \((4,-2)\) 是严格局部极小值。因为这是二次函数,并且 Hessian 在所有点都正定,所以它也是全局极小值。
Hessian 正定表示每个方向都向上弯,像碗;Hessian 有负特征值时,某些方向向下弯,驻点可能是鞍点。深度学习里很多 loss surface 有鞍点,所以“梯度接近 0”不自动等于“训练到了好解”。
#例题 5:Lagrange 乘子
求约束 \(x+y=1\) 下 \(x^2+y^2\) 的最小值,并解释 Lagrange 乘子 \(\lambda\) 为什么会出现。
没有约束时,\(x^2+y^2\) 的最小值在 \((0,0)\),因为它表示点 \((x,y)\) 到原点距离的平方。但现在有约束 \(x+y=1\),点必须落在这条直线上,不能随便取 \((0,0)\)。
Lagrange 方法把目标和约束写到同一个函数里:
这里 \(x+y-1=0\) 是约束。乘子 \(\lambda\) 可以理解成“约束的权重”或“为了不离开约束面,需要施加的修正力”。
分别对 \(x,y,\lambda\) 求偏导并令其为 0:
前两式说明 \(2x+\lambda=2y+\lambda\),所以 \(x=y\)。再代入约束 \(x+y=1\),得到:
最小值为:
如果还想求 \(\lambda\),代入 \(2x+\lambda=0\),得到 \(\lambda=-1\)。这个数本身不是目标值,而是描述约束对最优解的一阶影响。
目标函数 \(x^2+y^2\) 的等高线是以原点为圆心的圆,约束 \(x+y=1\) 是一条直线。最优点是这条直线上离原点最近的点,也就是把原点投影到直线上的位置。Lagrange 条件背后的几何事实是:在最优点,目标函数等高线的法向量和约束直线的法向量平行。
#例题 6:学习率与梯度下降数值例题
用梯度下降最小化 \(f(w)=(w-3)^2\)。从 \(w_0=0\) 开始,分别用学习率 \(\eta=0.1\)、\(\eta=1\)、\(\eta=1.2\) 做几步更新,观察学习率如何影响收敛。
目标函数 \(f(w)=(w-3)^2\) 的最小点显然是 \(w=3\),因为此时平方项为 0。梯度下降不会直接“看答案”,它只用当前点的导数决定下一步怎么走。
先求导:
梯度下降更新式是:
学习率 \(\eta=0.1\) 时:
它在慢慢靠近 3。步子比较稳,但速度不快。
学习率 \(\eta=1\) 时:
它在 0 和 6 之间来回跳,永远不靠近 3。这不是因为方向错,而是步子太大,每次都跨过最小点同样远。
学习率 \(\eta=1.2\) 时:
离最优点越来越远,说明学习率过大时会发散。
这个例子还可以从误差 \(e_t=w_t-3\) 看得更清楚:
要收敛,需要 \(|1-2\eta|<1\),也就是 \(0<\eta<1\)。\(\eta=0.1\) 满足条件,\(\eta=1\) 卡在边界震荡,\(\eta=1.2\) 超过边界发散。
学习率不是越大越好。小学习率像小步下坡,慢但稳定;过大学习率像每步都跳过谷底,可能震荡甚至发散。LLM 训练中 loss spike、梯度裁剪、warmup 和学习率衰减,本质上都和“每一步不要走坏”有关。
#例题 7:矩阵求导与最小二乘梯度
设线性模型预测为 \(Xw\),真实标签为 \(y\),最小二乘目标为 \(J(w)=\frac12\|Xw-y\|_2^2\)。求 \(\nabla_w J(w)\),并用一个小数值例子验证公式。
这道题里的符号含义是:\(X\) 是数据矩阵,每一行是一条样本;\(w\) 是要学习的参数;\(Xw\) 是模型预测;\(y\) 是真实值;\(Xw-y\) 是残差,也就是预测错了多少。
先令残差 \(r=Xw-y\),目标变成:
为什么前面放 \(\frac12\)?只是为了求导后抵消平方带来的 2,让公式更干净,不改变最优点。
用微分法推导最稳。因为 \(r=Xw-y\),所以 \(dr=X\,dw\)。目标函数的微分为:
把 \(dw\) 放到右侧,并写成“某个向量转置乘 \(dw\)”的形式:
因此梯度是:
做一个小数值验证。取:
先算预测:
再算残差:
最后左乘 \(X^T\):
所以 \(\nabla_w J(w)=(0,1)^T\)。如果用学习率 \(\eta=0.1\) 做一步梯度下降:
这表示当前第一维参数的一阶方向不需要动,第二维参数应该下降一点,以减小平方误差。
残差 \(r\) 是样本维度上的错误,参数 \(w\) 是特征维度上的变量。\(X^T r\) 做的事情是:把每个样本的错误按对应特征加权汇总回参数维度。这就是线性回归、神经网络最后一层、很多因子模型里梯度的基本形状。
#常见误区
把梯度当成下降方向
梯度 \(\nabla f\) 指向最陡上升方向。最小化时用 \(-\nabla f\)。如果符号写反,loss 会增大。
忘记方向导数要求单位方向
\(\nabla f^Tu\) 的“每单位长度变化率”解释依赖 \(u\) 是单位向量。若方向没归一化,数值会混入向量长度。
以为梯度为 0 就一定是最小值
梯度为 0 只是驻点。还要看 Hessian 或其它条件;可能是极小值、极大值,也可能是鞍点。
把 Taylor 近似当全局公式
Taylor 是局部近似。离展开点越远,被截断的高阶项越可能变大,所以不能无条件相信低阶展开。
矩阵求导只背形状
只背 \(\nabla_w\frac12\|Xw-y\|^2=X^T(Xw-y)\) 容易在转置上出错。先写残差形状,再用微分或维度检查更可靠。
Lagrange 忘记约束方程
一阶条件不仅有对 \(x,y\) 的偏导,也有对 \(\lambda\) 的偏导。后者正是原约束,漏掉就无法得到可行解。
#LLM/量化面试连接
| 本章对象 | LLM 中怎么出现 | 量化中怎么出现 |
|---|---|---|
| softplus / sigmoid 导数 | 激活函数、门控、二分类 logit、数值稳定的正值参数化。 | 把无约束变量映射成正参数,例如波动率、强度、惩罚系数。 |
| Taylor 近似 | 解释梯度下降、二阶优化、loss surface 局部形状、近似推导。 | 风险因子小扰动下的 PnL 近似,例如 delta-gamma 近似。 |
| 梯度下降和学习率 | 训练稳定性、warmup、loss spike、梯度裁剪、AdamW 调参。 | 参数拟合、在线学习、信号权重更新、交易模型校准。 |
| Hessian | 曲率、鞍点、sharp/flat minima、牛顿法和二阶预条件思想。 | 二次规划、风险模型、协方差矩阵正定性、组合优化曲率。 |
| Lagrange 乘子 | 带约束训练、正则化解释、约束解码或资源限制下的优化。 | 投资组合权重和为 1、目标收益约束、风险预算约束。 |
| 最小二乘梯度 | 线性层、回归头、embedding 到 target 的拟合,反向传播的基础局部块。 | 因子回归、收益预测、风险暴露估计、残差最小化。 |
不要只说“用梯度下降优化”。更好的表达是:先定义目标函数,说明参数是什么、loss 衡量什么错误;再写出梯度或一阶条件;然后解释学习率、曲率或约束如何影响更新行为。这样面试官能看到你不是在背公式,而是在用公式描述算法。
#最后检查清单
- 看到 \(f(x)=\log(1+e^x)\) 时,能用链式法则推出 \(f'(x)=\sigma(x)\),并解释 softplus 为什么平滑近似 ReLU。
- 能写出 \(\log(1+x)\) 在 0 附近的二阶 Taylor 近似,并说明近似只在局部可靠。
- 能对二元函数逐项求偏导,组成梯度,并用 \(\nabla f^T u\) 计算单位方向上的方向导数。
- 能通过梯度为 0 找驻点,再用 Hessian 正定、负定或不定判断局部形状。
- 能把等式约束问题写成 Lagrangian,并记得同时使用目标变量和乘子的所有一阶条件。
- 能手算一维梯度下降的前几步,解释学习率太小、合适、太大分别会发生什么。
- 能从 \(J(w)=\frac12\|Xw-y\|^2\) 推出 \(\nabla_wJ=X^T(Xw-y)\),并用维度解释 \(X^T\) 的作用。
- 能把这些例题连接到 LLM 训练稳定性、因子回归、组合约束和风险近似,而不是停留在纯计算。