先修:12 数据与损失;17 最小二乘与投影;29 优化目标与平方配方;基础四则运算与平面坐标
调整一个参数,损失会升还是会降?第29章把目标写清楚了,但若每次都把全部候选重新比较,仍然很费力。我们能不能站在当前的位置,先判断向哪边挪动一点比较有利?
导数回答的就是这种局部问题。它把输入的一小段变化,翻译成输出变化的一阶近似。关键不在“很小”两个字,而在一个可检验的要求:当改动缩小时,近似误差相对于改动本身必须趋于零。
先把一个旋钮当成自变量
沿用虚构的玩具读数(0,1)、(1,2)、(2,2),输入、输出都以厘米计,预测模型仍是ŷ=ax+b。本章固定斜率a=1/2,只调整截距b。三项残差是1−b、3/2−b、1−b,等权平方误差和为
L(b)=2(1−b)²+(3/2−b)²
=3b²−7b+17/4
=3(b−7/6)²+1/6。
给定一个实数b,规则便输出唯一的实数L(b)。这种从实数输入得到实数输出的对应,叫作实函数;b是自变量,L(b)是函数值。字母L标记整条规则,L(1)则是把输入定在1后得到的一个数。本例允许b取任何实数。
这也区分了两件容易混淆的事:玩具只留下三个观测点,损失函数却可以在无穷多个参数值上计算。比如b=1.001并非新测量,它只是另一条候选预测线的截距。把这个参数代入同一组残差公式,便能得到相应损失。我们研究的是已选模型与数据共同定义的函数,没有偷偷补入新的观测。
注意,图中的横轴现在是参数b,不是玩具的滑杆位置x;纵轴是损失,不是指针读数y。原来的观测和a都暂时固定,变化的是我们选择的截距。这样才说得清“对谁求变化率”。
下文公式按固定厘米单位记录的数值运算。恢复单位时,b及其改变量以厘米计,L以平方厘米计。改变计量单位会改变数值表达,不能只改轴上的单位标签而保留全部数字。
先算一次真正发生的变化
从当前的b移动到b+h。h叫作增量,可以为正,也可以为负:正数向右移,负数向左移。输出的改变量记为ΔL=L(b+h)−L(b)。用刚才的展开式计算:
ΔL=3[(b+h)²−b²]−7h
=3(2bh+h²)−7h
=(6b−7)h+3h²。
这是精确等式,还没有近似。如果h≠0,将输出变化除以输入变化,得到差商:
ΔL/h=[L(b+h)−L(b)]/h=6b−7+3h。
它描述这一小段区间上的平均变化率。画在b与L的坐标图里,它就是连接(b,L(b))和(b+h,L(b+h))的割线斜率。[1]
h为负时也用同一个公式,不必另造规则。分子和分母都保留方向:从右边的点退到左边,如果函数值增加,分子为正、分母为负,差商仍为负。斜率说的是沿横轴增加的方向,纵轴怎样变化,不是这次移动在纸面上朝哪边走。
例如b=1、h=0.1,L从0.25变成0.18,所以ΔL=−0.07,差商为−0.7。若改用h=0.01,差商变成−0.97;从左边靠近,h=−0.01时,差商是−1.03。它们来自不同的两点,数值不同,却都在靠近−1。

图1:三幅图使用相同坐标尺度;绿色曲线是L,橙色是割线,蓝色虚线是切线。图只画右侧逼近,左侧也必须趋向同一斜率。
极限不是把零塞进分母
“越来越接近”需要比看几个小数更可靠的意思。在本例中,无论当前b取什么值,差商与6b−7的距离始终是
|(6b−7+3h)−(6b−7)|=3|h|。
假设有人提出任意一个正的误差阈值ε,要求这个距离小于ε。我们只需限制0<|h|<ε/3,就能保证3|h|<ε。例如要误差小于0.001,就取0<|h|<1/3000。阈值可以继续缩小,我们仍能给出相应范围。
这里保证的是范围内所有非零h,而不只是挑出的几次试算。h可以从正侧或负侧逼近0,保证都成立。因此可写成
lim(h→0) [L(b+h)−L(b)]/h=6b−7。
lim表示极限。我们把这个极限记为L′(b),读作“L在b处的导数”,所以
L′(b)=6b−7。
这里先固定一个b,再让h变化;求完极限以后,可以对另一个b重复同样过程。结果L′本身也形成一个函数:它接收当前位置,输出当地的变化率。L′(1)=−1是一处的数值,L′(b)=6b−7则告诉我们所有位置的数值,不能把两种写法混在一起。
运算顺序十分重要:在h≠0时,先把差商化简成6b−7+3h,再研究h接近0时的值。原差商在h=0时是0/0,没有定义;极限从来没有赋予0/0一个值。它考察的是附近非零输入的行为。
这就是代数化简与取极限各自负责的部分。约去h,只是在h不为0的范围内改写同一个数;让h趋于0,才从这一整片附近的值确定一个局部变化率。仅列出h=0.1、0.01、0.001时的结果,最多提示一个猜想。这里之所以能作出结论,是因为3|h|的估计覆盖了所有足够小的非零步长。
对于一般实函数f,若它在t₀的某个邻域内有定义,就可以问同一问题。这里“邻域”指包含t₀、且向左右各伸出一点的开区间,例如(t₀−r,t₀+r),其中r>0。若
f′(t₀)=lim(h→0) [f(t₀+h)−f(t₀)]/h
存在并且是有限实数,就说f在t₀可微。极限要求:无论误差门槛多严,都能把非零h限制得足够靠近0,使全部差商都落在候选值的误差范围内,左右必须一致。本章讨论这种内点处的双侧导数,暂不展开边界上的单侧约定。[1]
“有限”也有作用:若差商的绝对值不断变大,不能把一个无限大的量当成本章意义下的导数。若差商在不同数值间持续摆动,无法满足任意误差阈值的要求,也不存在导数。图画得再平滑,都不能替代对极限条件的检查。
导数不是某一对观测算出的有限差分本身。差商可以提供估计,极限的存在还需要理由。在机器上也不能无限制地把h缩小;两次很接近的计算结果相减会受舍入影响,第35至37章再讨论这些数值问题。
切线为什么能预测短步
把精确变化式重新排好:
L(b+h)=L(b)+L′(b)h+3h²。
右边依次是原来的值、由导数给出的线性变化,以及剩余的误差。若暂时去掉最后一项,就得到局部线性近似
L(b+h)≈L(b)+L′(b)h。
固定b之后,右边关于h是一条直线;在原坐标中,它经过(b,L(b)),斜率为L′(b),就是本章所说的切线。导数的极限定义说明它怎样从割线中产生,并不依赖“直线只能碰曲线一次”的图形说法。[2]
为什么允许忽略3h²?只说它趋于0还不够,因为h本身也趋于0。真正有用的是比较它们的量级:
|3h²|/|h|=3|h|→0。
这说明余项相对于输入变化还要更小,通常称作比一阶更小。即便L′(b)恰好为0,这个判据仍然成立;我们除以的是|h|,不是可能为0的线性预测值。
这也不是承诺余项相对于实际输出变化一定很小。若一次项为0,真实变化可能全部来自余项,线性预测仍然给0。近似是否适合当前用途,要看允许的绝对误差和步长;导数提供的保证有明确尺度,不能换成另一种误差要求后继续照用。
一般地,把余项定义为r(h)=f(t₀+h)−f(t₀)−f′(t₀)h。对于h≠0,|r(h)|/|h|恰好等于差商与f′(t₀)之差的绝对值,因此趋于0。可微所保证的局部直线近似,就精确到这一层。
为什么不随便选另一个斜率m?若把L′(b)换成m,新的余项除以h就是L′(b)−m+3h。当h趋于0时,它留下L′(b)−m;除非m正好等于导数,否则这个误差不会相对于步长消失。所有穿过当前点的直线都在该点给出正确值,导数却挑出了其中唯一能满足这一阶误差要求的直线。

图2:左图比较真实曲线与切线;橙色竖段是精确值高于线性预测的部分。右侧比较两个步长,余项随h的平方缩小。
从h=0.1缩到h=0.01,步长变为原来的十分之一,余项却从0.03变成0.0003,只剩百分之一。线性变化和二次余项缩小的速度不同,这才让前者在越来越短的步子里担当主要部分。说近似更好时,还应说明用什么尺度衡量,不能只看图上两条线是否重合。
b=1时,L′(1)=−1。取h=0.1,线性预测说ΔL≈−0.1,精确计算却是−0.1+0.03=−0.07。因此实际下降0.07平方厘米,不能把预测下降0.1说成实际结果。
这个导数的单位是“平方厘米/厘米”,约去后是厘米。L′(1)=−1厘米表示:在此处,截距的短小增量乘上这个变化率,近似得到损失的改变量。导数乘h之后才恢复平方厘米;它本身不是损失。
第29章说过,将SSE改成MSE只需除以3。若记M(b)=L(b)/3,它的每个差商也恰好是原差商的三分之一,因此M′(b)=L′(b)/3。最优截距没有变,导数的大小却变了。这说明变化率包含目标采用的数值标尺,不能离开损失的定义比较两个导数。
若一口气取h=1呢?精确变化是−1+3=2,损失反而上升。负导数允许我们判断足够小的正向步子,却没有批准任意大步。本例甚至能直接看出:当0<h<1/3时,ΔL=h(−1+3h)<0;跨出这段范围便要重新判断。
从极限也能解释这个保证:因为差商趋于−1,足够靠近时便能让它与−1相差不到1/2,于是差商仍为负。再乘一个正的h,输出变化就为负。这里比较的是当前点与附近点的函数值,不能仅凭一个点的导数,断言整条曲线在远处仍然下降。
连续的图也可能没有导数
考虑f(t)=|t|。绝对值表示数到0的距离,因此t从左右靠近0时,f(t)都靠近f(0)=0。这叫作在0连续:输入靠近该点,输出也靠近该点的函数值。
但它在0处的差商是|h|/h。h>0时始终等于1;h<0时始终等于−1。两侧无法靠近同一个数,因此f′(0)不存在,尽管曲线在这里没有断开。[3]

图3:两侧各自都是直线,困难发生在相接处。取更小的步长也不能消除两侧斜率的分歧。
反过来,可微一定蕴含连续。因为h≠0时,函数变化等于h乘上差商;若差商趋于有限数,它在足够小的范围内就有界,而h趋于0,所以乘积趋于0。于是f(t₀+h)趋于f(t₀)。这段推导也说明,连续与可微的要求为何有强弱之分。[3]
导数为零以后还要判断
回到损失函数,解L′(b)=0得到b=7/6。这样的点叫作驻点,表示一阶变化率为0。它值得检查,却不能仅凭这个名称宣布最小。
本例有现成的证明:L(b)=3(b−7/6)²+1/6。平方项非负,并且仅在b=7/6时为0,因此这是固定a=1/2后唯一的全局最小点,最小损失为1/6平方厘米。导数帮我们找到候选,平方配方完成了保证。
若一个可微的内点确实是局部最小点,那么附近函数值都不小于它:右侧差商非负,左侧差商非正。两侧还要有同一个极限,就只能共同趋于0。这解释了为何零导数值得搜索,但逻辑方向不能倒转;必要条件并不自动成为充分条件。若可行范围有端点,还要另外检查端点。
为什么不能省掉后半步?看g(t)=t³。在0处,非零h的差商为h³/h=h²,极限是0,所以g′(0)=0。但任意靠近0的负数都有g(t)<0=g(0),正数则给出更大的值;0不是局部最小点。所谓局部最小,是至少存在一小段邻域,其中没有更低的函数值。
因此,“水平切线”与“最低点”不能画等号。绝对值函数还从另一面提醒我们:最小值也可能出现在不可微的尖点。寻找最优解时,需要关心问题的范围和函数的条件;第33章再研究哪些结构能加强局部判断。
导数带来的新能力,是把弯曲函数在一点附近写成一条可控误差的直线。接下来,如果输入变化还要经过几层规则才影响损失,该怎样把这些局部变化接起来?第31章将讨论链式法则,第32章再让a、b两个旋钮同时参与。
顺手试一下
题目1: 在b=1处取h=−0.02。求差商、线性预测的损失变化、实际变化和新损失。若要求差商与导数的距离小于0.015,h应满足什么条件?
**提示:**L(1)=1/4,L′(1)=−1;实际变化比线性预测多3h²。
**参考答案:**差商为−1+3×(−0.02)=−1.06。线性预测的变化为(−1)×(−0.02)=0.02;余项为3×0.0004=0.0012;实际变化为0.0212,新损失为0.2712平方厘米。要3|h|<0.015,必须有0<|h|<0.005;排除0是因为差商在0处没有定义。
题目2: 从b=7/6出发取h=0.1。导数、线性预测的变化和实际变化分别是多少?为什么这不违背局部线性近似?再说明g(t)=t³在0处与它有何不同。
**提示:**导数为0只消除了关于h的一次项;检查余项除以|h|的极限。
**参考答案:**L′(7/6)=0,线性预测的变化为0,实际变化为3×0.1²=0.03平方厘米,新损失为1/6+3/100=59/300平方厘米。余项与|h|的比为3|h|,随h趋于0而趋于0,近似要求仍满足。这里任意非零h都使损失上升。g在0处也有零导数,但增量h³在h<0时为负、h>0时为正,因此0不是它的局部最小点。
参考与延伸
[1] 莱斯大学OpenStax,Gilbert Strang、Edwin “Jed” Herman,《Calculus Volume 1》,3.1 Defining the Derivative。核对差商、割线与导数的极限定义;本文对固定斜率SSE的误差阈值论证独立展开。
[2] 同一教材,4.2 Linear Approximations and Differentials。核对切线近似的形式与局部适用范围;本章用精确余项检验两个步长。
[3] 同一教材,3.2 The Derivative as a Function。核对可微与连续的关系,以及绝对值函数在0处的左右差商。
本文沿用本系列虚构教学读数,算例与三幅图为本章编排绘制;没有据此宣称真实测量或机器学习训练效果。
作者:Jiancheng Wang · 数学之美(独立原创)