微积分基础:变量、函数、图像与变化尺度

本节目标

求导之前,先把“什么在变、什么随它变化、在哪个范围讨论、单位是什么”写清楚。本节用表格、图像和简单数值实验建立函数直觉,区分连续变化与离散跳变,并解释为什么尺度和单位会影响梯度。

从工程问题定义变量

一个函数至少包含:

  • 输入变量:主动改变或观察的量;
  • 输出变量:由输入决定的量;
  • 定义域:允许输入的集合;
  • 值域:可能输出的集合;
  • 单位与约定:毫秒、秒、比例、百分点,是否取对数或归一化;
  • 其他固定条件:数据版本、模型、流量和随机种子等。

例如 L(w) 表示其他条件固定时,模型损失随参数 的变化。若训练数据、batch 或随机采样也在变,观测到的差异就不再只由 造成。

函数不是公式的同义词

函数是“每个允许输入对应唯一输出”的规则,可以由公式、程序、查表或分段规则定义:

这是 ReLU 的简单形式。API 是否超时、检索结果是否进入 top-k、工具路由选哪个分支也可由规则决定,但这些规则常有跳变,未必适合直接求普通导数。

用表格和图像先看整体

对 :

05
12
21
32
45

表格显示函数先降后升,在 2 附近最小。图像还能揭示:

  • 单调上升或下降区间;
  • 平坦、陡峭、拐弯和不连续位置;
  • 离群值、噪声和观测范围;
  • 局部趋势是否能代表全局。

只看一个导数值会丢失这些整体结构。优化时应把局部梯度与训练曲线、参数范围和验证指标一起看。

平均变化率与尺度

从 到 的平均变化率:

分子单位是“输出单位”,分母是“输入单位”。如果延迟从毫秒改成秒,数值导数会缩放 1000 倍,但物理关系没有改变。不同参数的梯度大小不可在忽略单位和参数化的情况下直接比较。

对数尺度常用于跨多个数量级的正值;概率有时用 logit 表示。变换坐标会改变导数写法和优化地形,因此必须记录训练实际使用的参数化,而不是只记录业务展示值。

连续、离散与带噪观察

  • 连续可微函数可用局部斜率描述小变化。
  • 分段函数可能只在部分位置不可导。
  • top-k、布尔成功和字符串匹配等离散指标通常呈阶梯状。
  • 同一参数多次运行得到不同输出时,观测是带噪函数或随机变量。

训练常用可微的 surrogate loss 代替离散业务指标,但 surrogate 下降不保证最终指标同步提升。需要单独评测两者关系。

可运行的数值观察

def objective(value: float) -> float:
    return (value - 2.0) ** 2 + 1.0
 
 
x = 3.0
for step in (1.0, 0.1, 0.01, 0.001):
    forward_slope = (objective(x + step) - objective(x)) / step
    print(f"step={step:g} forward-slope={forward_slope:.6f}")
 
assert objective(2.0) == 1.0

在 ,真实导数为 2;前向差商会随 step 变小趋近 2。实际浮点计算中 step 过小又会产生相减消减,所以“越小越精确”并不永远成立。

函数组合

Agent/模型链路往往是复合函数:

例如参数先产生 logits,logits 再形成损失。后面的链式法则会把每一段局部变化率相乘;若同一变量走多条路径,路径贡献还要相加。

常见错误

  • 不写定义域,给概率、对数或除法输入非法值。
  • 把单位变化造成的数值缩放误判为系统行为变化。
  • 在离散阈值点强行解释普通导数。
  • 只在一个点看局部斜率,就声称全局单调或存在全局最优。
  • 比较两次随机运行,却未控制数据、种子或 batch。

练习与自测

  1. 为“并发数 → P95 延迟”写出输入、输出、单位、定义域和固定条件。
  2. 画出 、ReLU 和阶跃函数的草图,标出连续与不可导位置。
  3. 把代码中的 step 再缩小到 1e-8、1e-12,记录误差是否单调下降。
  4. 举一个可微 surrogate 与最终离散业务指标不完全一致的例子。
  5. 说明参数从秒改为毫秒后,导数数值为何会变化。
  • 我能写清函数的输入、输出、定义域、单位和固定条件。
  • 我会先看表格或图像,再解释局部导数。
  • 我能区分连续、不可导、离散和随机观察。
  • 我知道重新缩放变量会改变导数数值。

下一步:函数、极限与导数。

参考资料

核验日期:2026-07-14。