#002. 微积分一:极限、连续与导数

微积分一:极限、连续与导数 图示

#学习目标:把变化率讲清楚

本章只围绕一个核心问题:函数输入变一点,输出会怎么变。微积分里很多术语都可以从这个问题出发理解:极限回答“靠近某点时输出趋向哪里”,连续回答“靠近得到的值和点上真正的值是否一致”,导数回答“输入发生一个很小变化时,输出最先按什么比例变化”,梯度回答“多维输入往哪个方向动,输出涨得最快”。

你要会读符号

\(x\) 是输入,\(f(x)\) 是输出,\(a\) 是我们关心的当前位置,\(h\) 是一个很小的输入改变量,\(\Delta f=f(a+h)-f(a)\) 是输出改变量。

你要会算小例题

能用定义算一元导数,能对二元函数分别求偏导,能把梯度代入当前位置,判断局部上升和下降方向。

你要会讲算法含义

能解释梯度下降不是“玄学调参”,而是用当前位置的局部线性近似,沿负梯度走一小步,让 loss 先下降。

  • 看到 \(\lim_{x\to a} f(x)\),知道它问的是 \(x\) 靠近 \(a\) 时 \(f(x)\) 的趋势,不是一定问 \(f(a)\) 本身。
  • 看到 \(\frac{f(a+h)-f(a)}{h}\),知道它是平均变化率;当 \(h\to 0\) 时,才变成瞬时变化率。
  • 看到 \(\nabla f(x)\),知道它是所有坐标方向偏导组成的向量,也是局部最陡上升方向。

#概念起点:输入变一点,输出怎么变

先不要把函数想成公式。函数就是一个输入到输出的规则:给模型参数 \(\theta\),输出 loss \(L(\theta)\);给一个交易仓位 \(w\),输出组合风险 \(R(w)\);给一个价格 \(S\),输出期权价值 \(V(S)\)。面试里问导数、梯度和优化,本质上是在问:如果我稍微改一下输入,输出会变好还是变坏,变化有多快。

有限变化:输入从 \(a\) 变到 \(a+h\),输出从 \(f(a)\) 变到 \(f(a+h)\)。输出变化量是 \(\Delta f=f(a+h)-f(a)\)。

平均变化率:\(\frac{f(a+h)-f(a)}{h}\)。读作“输出变化量除以输入变化量”。如果它等于 3,意思是这段区间里输入每增加 1,输出平均增加 3。

瞬时变化率:让 \(h\) 越来越小,观察平均变化率趋向哪个数。这个极限如果存在,就是导数。

为什么要让变化很小?

因为复杂函数在大范围内可能弯来弯去,但在一个足够小的邻域里,经常可以近似成一条直线。优化算法通常不知道全局最优在哪里,只能在当前位置问:“往哪边走,眼前这一小步最可能让 loss 降低?”

#极限与连续:先看靠近时的行为

极限描述的是输入靠近某点时,函数值会趋向哪里。符号

\[\lim_{x\to a} f(x)=L\]

读作:“当 \(x\) 越来越靠近 \(a\) 时,\(f(x)\) 越来越靠近 \(L\)。”这里的重点是靠近过程,不是只把 \(x=a\) 代进去。某些函数在 \(a\) 点没有定义,仍然可以有极限;某些函数在 \(a\) 点有定义,但靠近时的趋势不等于点上的取值。

连续是在极限基础上再加一个要求:靠近得到的值,必须等于函数在该点真正的值。

\[f \text{ continuous at } a \Longleftrightarrow \lim_{x\to a} f(x)=f(a)\]
问题看什么直觉
极限是否存在左边靠近和右边靠近是否趋向同一个数两侧走向要会合
函数是否连续极限值是否等于点上的函数值曲线不能跳断,也不能在点上挖洞后填错值
函数是否可导左右瞬时斜率是否一致且有限不仅不能跳断,还要在局部有唯一切线

小例子:有极限但不连续。 定义

\[f(x)=\begin{cases}x+1,&x\ne 1,\\ 10,&x=1.\end{cases}\]

问:\(\lim_{x\to 1} f(x)\) 是多少?\(f\) 在 \(1\) 点连续吗?

当 \(x\) 靠近 1 但不等于 1 时,函数按 \(x+1\) 计算,所以 \(f(x)\) 靠近 \(2\)。因此

\[\lim_{x\to 1}f(x)=2.\]

但是点上的取值被单独定义成 \(f(1)=10\)。极限值 \(2\) 不等于点值 \(10\),所以它在 \(1\) 点不连续。这个例子说明:极限看的是“周围逼近”,连续才要求“周围逼近”和“点上取值”一致。

连续不等于可导。经典例子是 \(f(x)=|x|\):它在 0 点没有跳断,所以连续;但左侧斜率是 \(-1\),右侧斜率是 \(1\),在尖点处没有唯一切线,所以不可导。

#导数:一元函数的局部线性模型

导数的定义来自平均变化率。把输入从 \(a\) 改成 \(a+h\),输出变化是 \(f(a+h)-f(a)\),平均变化率是

\[\frac{f(a+h)-f(a)}{h}.\]

当 \(h\) 趋近于 0,如果这个比值趋近一个稳定的数,就把它叫作 \(f\) 在 \(a\) 点的导数:

\[f'(a)=\lim_{h\to 0}\frac{f(a+h)-f(a)}{h}.\]

这个公式可以这样读:用一个很小的输入变化 \(h\),观察输出变化除以 \(h\) 后接近哪个数。导数 \(f'(a)\) 不是整条曲线的平均斜率,而是 \(a\) 点附近最局部的斜率。

导数为什么等于局部线性化?

如果 \(f'(a)=m\),那么在 \(a\) 附近,函数最先表现得像一条斜率为 \(m\) 的直线:\(f(a+h)\approx f(a)+mh\)。这不是说函数真的变成直线,而是说当 \(h\) 足够小时,线性项通常是最主要的变化。

\[f(a+h)\approx f(a)+f'(a)h\]

在机器学习里,把 \(f\) 换成 loss \(L\),把 \(a\) 换成当前参数,就得到最基本的优化直觉:我们不需要马上知道完整 loss 曲面,只要知道当前位置附近向左还是向右能让 loss 变小。

#一元手算例题:从割线到切线

例题 1:用定义求 \(f(x)=x^2\) 在 \(a=3\) 的导数。

从定义开始:

\[f'(3)=\lim_{h\to 0}\frac{f(3+h)-f(3)}{h}.\]

分别计算两项:

\[f(3+h)=(3+h)^2=9+6h+h^2,\qquad f(3)=9.\]

代回差商:

\[\frac{f(3+h)-f(3)}{h}=\frac{9+6h+h^2-9}{h}=\frac{6h+h^2}{h}=6+h.\]

让 \(h\to 0\),得到

\[f'(3)=\lim_{h\to 0}(6+h)=6.\]

所以在 \(x=3\) 附近,\(x^2\) 的局部线性近似是

\[f(3+h)\approx f(3)+6h=9+6h.\]

例如 \(h=0.01\) 时,真实值是 \(3.01^2=9.0601\),线性近似是 \(9.06\),误差只有 \(0.0001\)。这就是“小步移动时,导数给出主要变化”的具体含义。

例题 2:判断 \(f(x)=|x|\) 在 \(0\) 点是否可导。

右侧靠近时,取 \(h>0\):

\[\frac{f(0+h)-f(0)}{h}=\frac{|h|-0}{h}=1.\]

左侧靠近时,取 \(h<0\),此时 \(|h|=-h\):

\[\frac{f(0+h)-f(0)}{h}=\frac{|h|-0}{h}=\frac{-h}{h}=-1.\]

左右差商趋向不同数,所以极限不存在,\(f(x)=|x|\) 在 \(0\) 点不可导。注意它仍然连续,因为 \(\lim_{x\to 0}|x|=0=f(0)\)。

#偏导、方向导数与梯度

一元函数只有一个输入方向:向左或向右。多元函数有很多输入方向。比如 \(f(x,y)\) 的输入是平面上的一个点,既可以只改 \(x\),也可以只改 \(y\),还可以沿任意斜方向同时改 \(x\) 和 \(y\)。

偏导数:\(\frac{\partial f}{\partial x}\) 表示只让 \(x\) 变化,把其他变量暂时当常数。类似地,\(\frac{\partial f}{\partial y}\) 表示只让 \(y\) 变化。

梯度:\(\nabla f(x,y)=\left(\frac{\partial f}{\partial x},\frac{\partial f}{\partial y}\right)^T\)。它把每个坐标方向的局部变化率放进一个向量。

方向导数:如果沿单位方向 \(u\) 走一小步,输出最开始的变化率是 \(D_u f=\nabla f^T u\)。这里 \(u\) 必须是单位向量,才表示“每走 1 单位距离”的变化率。

\[D_u f(x)=\lim_{h\to 0}\frac{f(x+hu)-f(x)}{h}=\nabla f(x)^T u\]

为什么梯度是最陡上升方向?因为当 \(\|u\|=1\) 时,内积满足

\[\nabla f(x)^T u=\|\nabla f(x)\|\|u\|\cos\theta=\|\nabla f(x)\|\cos\theta.\]

其中 \(\theta\) 是梯度向量和方向 \(u\) 的夹角。当 \(u\) 和梯度同向时,\(\cos\theta=1\),方向导数最大;当 \(u\) 和梯度反向时,\(\cos\theta=-1\),方向导数最小。因此梯度是局部最陡上升方向,负梯度是局部最陡下降方向。

#二元手算例题:看懂梯度方向

例题 3:设 \(f(x,y)=x^2+3xy+y^2\),求点 \((1,2)\) 的梯度,并判断沿 \(u=\left(\frac{3}{5},\frac{4}{5}\right)\) 方向函数一开始是上升还是下降。

先求偏导。对 \(x\) 求偏导时,把 \(y\) 当常数:

\[\frac{\partial f}{\partial x}=2x+3y.\]

对 \(y\) 求偏导时,把 \(x\) 当常数:

\[\frac{\partial f}{\partial y}=3x+2y.\]

所以梯度为

\[\nabla f(x,y)=\left(2x+3y,\ 3x+2y\right)^T.\]

代入 \((1,2)\):

\[\nabla f(1,2)=\left(2\cdot 1+3\cdot 2,\ 3\cdot 1+2\cdot 2\right)^T=(8,7)^T.\]

方向导数是梯度和单位方向的内积:

\[D_u f(1,2)=\nabla f(1,2)^Tu=(8,7)\cdot\left(\frac{3}{5},\frac{4}{5}\right)=\frac{24}{5}+\frac{28}{5}=\frac{52}{5}.\]

\(\frac{52}{5}>0\),所以沿这个方向走一小步,函数值一开始会上升。若沿 \(-u\) 走,方向导数就是 \(-\frac{52}{5}\),一开始会下降。

例题 4:同一个函数在点 \((1,2)\) 处,局部最陡下降方向是什么?

上一题已经得到 \(\nabla f(1,2)=(8,7)^T\)。最陡上升方向是梯度方向,最陡下降方向是负梯度方向:

\[-\nabla f(1,2)=(-8,-7)^T.\]

如果只问“方向”而不是“步长”,通常写成单位方向:

\[\frac{-\nabla f(1,2)}{\|\nabla f(1,2)\|}=\frac{(-8,-7)}{\sqrt{8^2+7^2}}=\frac{(-8,-7)}{\sqrt{113}}.\]

这表示从当前位置出发,若每次只走同样短的距离,沿这个方向能让函数值下降得最快。

#为什么负梯度下降成立

梯度下降的更新写作

\[x_{t+1}=x_t-\eta\nabla f(x_t),\]

其中 \(x_t\) 是当前参数,\(\eta>0\) 是学习率。学习率读作“一次沿负梯度走多远”。用一阶局部线性近似看这个更新:

\[f(x_t+\Delta)\approx f(x_t)+\nabla f(x_t)^T\Delta.\]

令 \(\Delta=-\eta\nabla f(x_t)\),得到

\[f(x_t-\eta\nabla f(x_t))\approx f(x_t)-\eta\nabla f(x_t)^T\nabla f(x_t)=f(x_t)-\eta\|\nabla f(x_t)\|^2.\]

因为 \(\eta>0\),且 \(\|\nabla f(x_t)\|^2\ge 0\),只要梯度不是零向量,这个一阶近似就比原来的 \(f(x_t)\) 小。这就是负梯度下降的基本理由:它把当前位置的梯度当成局部线性打分器,选择让这个线性打分下降最多的方向。

为什么还需要“学习率足够小”?

一阶近似只在当前位置附近可靠。如果 \(\eta\) 太大,更新会跳出“近似有效”的小邻域,函数曲率和高阶项开始主导,loss 可能反而上升。训练大模型时学习率过大导致 loss spike 或发散,本质上就是步子超过了局部近似能信任的范围。

例题 5:对 \(f(x)=(x-2)^2\),从 \(x_0=5\) 做一步梯度下降。

先求导:

\[f'(x)=2(x-2).\]

在 \(x_0=5\) 处,梯度是 \(f'(5)=6\),说明向右会让函数上升,向左会让函数下降。若学习率 \(\eta=0.1\),更新为

\[x_1=x_0-\eta f'(x_0)=5-0.1\cdot 6=4.4.\]

比较更新前后的函数值:

\[f(5)=9,\qquad f(4.4)=(2.4)^2=5.76.\]

loss 确实下降了。如果学习率极大,例如 \(\eta=1\),则 \(x_1=5-6=-1\),\(f(-1)=9\),这一步没有带来下降;更大的学习率还会发散。这说明负梯度给方向,学习率决定这一步是否仍然可信。

#面试连接、误区与检查清单

在 LLM 面试里,导数和梯度最常出现在线性层、softmax、cross-entropy、反向传播和优化器里。你不需要一开始背复杂公式,但必须能说清楚:loss 是参数的函数,梯度告诉我们每个参数微小变化会怎样影响 loss,优化器根据梯度决定参数更新方向。学习率不是随便乘的常数,而是“相信局部近似到多远”的尺度。

在量化面试里,同一套语言会出现在敏感度和风险控制里。期权的 Delta 可以理解为价格对标的价格的一阶敏感度;组合风险对权重的梯度说明增加某个仓位会怎样改变风险;因子暴露的微小变化会影响收益预测和约束优化结果。量化里的“敏感度”本质上就是某种导数或偏导。

场景函数输入函数输出导数/梯度在回答什么
LLM loss 优化模型参数 \(\theta\)训练损失 \(L(\theta)\)每个参数变一点,loss 会怎么变
学习率调节更新步长 \(\eta\)下一步 loss步子是否仍在局部近似可靠范围内
期权 Delta标的价格 \(S\)期权价值 \(V(S)\)价格小幅变化时,期权价值一阶变化多少
组合风险仓位权重 \(w\)风险 \(R(w)\)增加某个方向的仓位会让风险上升还是下降

面试型小题:为什么训练时不是直接沿梯度方向更新,而是沿负梯度?

如果目标是最小化 loss,梯度方向是局部最陡上升方向,沿它走会让 loss 一开始增加。负梯度方向使一阶变化

\[\nabla L(\theta)^T(-\eta\nabla L(\theta))=-\eta\|\nabla L(\theta)\|^2\]

为负,因此在学习率足够小时,loss 会下降。高质量回答还要补一句:如果 learning rate 太大,一阶近似失效,负梯度方向也不能保证实际 loss 每一步都下降。

常见误区

不要把“连续”说成“可导”;不要把偏导理解成所有变量一起变;不要忘记方向导数里的方向 \(u\) 应该是单位向量;不要说梯度下降永远下降,它依赖足够小的步长和局部近似;不要把梯度大小直接等同于全局重要性,梯度是当前位置的局部信息。

  • 我能解释 \(\lim_{x\to a}f(x)\) 和 \(f(a)\) 的区别。
  • 我能用导数定义手算 \(x^2\) 在某点的导数,并说出差商每一项是什么意思。
  • 我能说明为什么 \(|x|\) 在 0 点连续但不可导。
  • 我能对简单二元函数求 \(\frac{\partial f}{\partial x}\)、\(\frac{\partial f}{\partial y}\),并组成梯度。
  • 我能用 \(D_u f=\nabla f^Tu\) 判断沿某个方向函数上升还是下降。
  • 我能推导 \(f(x-\eta\nabla f(x))\approx f(x)-\eta\|\nabla f(x)\|^2\),并解释学习率为什么不能太大。
  • 我能把导数/梯度连接到 LLM 的 loss 优化、学习率,以及量化里的价格敏感度和风险敏感度。