资讯动态

【第62期】导数有限差分步长过小反而变差:偏导、梯度与方向导数完整实验

发布时间:2026/10/26 1:55:13 来源:尧图企业网站定制
系列《从小白到 AI 大模型开发工程师的进阶之路》 技术点AI-0216 导数与偏导数 主人公小蓝伞 前置AI-0211 标量、向量和张量 本期产出独立实验脚本、原始输出、失败样本和验收清单小蓝伞在教学演练中校验指数函数的导数将步长从千分之一缩到万亿分之一结果却离解析值更远。本文用可复跑的数据解释这条反直觉曲线。 本期按准备环境、运行完整脚本、读取结果和复验失败的顺序完成实践。偏导固定其他坐标只观察一个坐标的局部变化梯度把所有偏导组织成向量单位方向导数是梯度与单位方向向量的内积。有限差分只是对这些量的数值近似步长越小并不总是越准。 输入均为教学合成数据不是生产经历。一、小蓝伞遇到的问题导数回答的是在某个点附近输入的微小变化怎样影响输出。指数函数在一处的解析导数就是该处指数值这为差分实验提供独立参考。二元函数的偏导还要求固定另一个坐标否则变化沿着另一条路径发生算出来的量已经不是原偏导。讨论函数值、导数值和误差时要分开单位函数值可能是金额导数可能是金额相对于某个输入单位的变化不能把它们放进同一列直接比较。二、先给结论偏导固定其他坐标只观察一个坐标的局部变化梯度把所有偏导组织成向量单位方向导数是梯度与单位方向向量的内积。有限差分只是对这些量的数值近似步长越小并不总是越准。推荐先用解析可解的函数检查实现再扫描数个数量级步长选择误差稳定区间保留大步长和极小步长作为反例。不推荐省略输入语义和指标口径仅凭单次输出扩大结论。成功判据零步长必须抛出ValueError方向导数接近3.8中心差分误差曲线应呈现中间较小、两端较大的趋势。三、任务与数据契约项目本期约定输入完整代码构造的合成数据输出数值、图表或异常及原始日志环境Windows 11、Python 3.13.9依赖见记录不在范围真实业务、生产容量和跨设备性能四、前置准备在新目录保存工作目录中的实验.py为main.py再执行python -m venv .venv .\.venv\Scripts\python.exe -m pip install numpy2.3.5 .\.venv\Scripts\python.exe main.py本次实际执行使用 Windows 11、Python 3.13.9代码只生成合成输入不依赖账号、令牌或隐藏文件。五、核心原理偏导固定其他输入对某一个坐标求导。梯度标量输出对各输入偏导组成的向量。单位方向导数梯度沿单位方向的投影。截断误差有限步长近似留下的数学误差。舍入误差浮点表示和运算带来的数值误差。中心差分的两个误差来源中心差分用左右两个函数值的差除以两倍步长。步长较大时这条割线不能准确代表该点切线产生截断误差步长极小时两个浮点函数值非常接近相减消去有效数字再被小分母放大。两种机制作用相反所以误差往往先降后升。选择步长需要结合函数尺度和浮点精度没有一个适用于所有变量的固定常数。方向必须先单位化本例二元函数在指定点的梯度为一和四方向三和四的长度为五单位方向为零点六和零点八内积得到三点八。如果直接乘未归一化向量就得到按更大步幅缩放的变化量。方向导数的常用定义比较单位移动因此必须说明方向是否单位化梯度方向给出局部上升最快的方向不意味着沿它走任意距离都能保持上升。把差分用作梯度检查数值差分适合对小函数、少量参数和实现改动做独立校验。先固定参数状态逐坐标扰动保持随机分支和数据不变再比较解析梯度与数值近似。相对误差分母不能在接近零时失效应同时查看绝对误差。遇到不可微点不同单侧差分可能不同需要回到函数定义不能用放宽容差掩盖真正的分支错误。六、完整项目完整脚本位于_work/第62期-导数与偏导数/实验.py。它包含正常、边界和失败断言复制到main.py后可独立运行。import numpy as np def f(x): 用非线性函数展示截断误差与相减消去。 return np.exp(x) def central(x, h): 计算中心差分零步长明确拒绝。 if h 0: raise ValueError(步长必须为正) return (f(xh)-f(x-h))/(2*h) for h in (1e-1,1e-3,1e-5,1e-8,1e-12,1e-15): valuecentral(1.,h) print(fh{h:.0e} derivative{value:.10f} abs_error{abs(value-np.e):.3e}) gradientnp.array([1.,4.]) directionnp.array([3.,4.])/5 print(gradient,gradient.tolist(),unit_direction,direction.tolist(),directional,float(gradientdirection)) assert np.isclose(gradientdirection,3.8) try: central(1.,0.) except ValueError as exc: print(拒绝零步长,exc) ​实现与结果的进一步核验逐步重建这次误差曲线第一步固定被求导函数和求值点不混入随机噪声或外部文件第二步把解析值单独计算不从差分结果推参考第三步遍历步长数量级每一行同时保留近似值和绝对误差第四步比较误差趋势。指数函数没有小数步长处的分支变化因此这次曲线主要展示数值近似误差。若换成有截断或阈值的目标左右采样可能落到不同分支解释必须同时改变。偏导的完整手算对输入一平方、三倍两输入乘积和输入二平方求导第一偏导是两倍输入一加三倍输入二第二偏导是三倍输入一加两倍输入二。在二和负一处得到一和四。把第二输入也随第一输入改变算出的不再是固定其他坐标的偏导而是沿某条参数化路径的导数这正是下一期链式法则要处理的依赖关系。坐标尺度改变步长意义相同步长对金额一百万和比例零点零一不是相同扰动程度。实际梯度校验可用基于坐标规模的步长策略并报告绝对和相对变化。对于接近零梯度单独相对误差会因分母很小而夸大差异先检查绝对误差再判定是否需要更合适的步长或精度。不要把本例十万分之一当成所有参数的最佳设置。数值校验的成本与适用性每个中心差分坐标要两次前向高维参数数量巨大时全量检查昂贵。可以先用小模型和少量固定坐标再抽取方向检查抽样没有覆盖全部参数报告必须写明范围。随机层或数据增强应固定状态否则函数本身在两次前向不同差分混入随机变化。这个限制比无条件加大容差更值得优先排查。如何解释梯度方向梯度与单位方向的内积决定一阶局部变化。单位方向垂直梯度时内积为零不代表沿该方向有限移动后函数值永远不变二阶及更高阶项仍可能存在。梯度为零也不直接说明最小值后续优化会用极大值和鞍点补充这一边界。读者可以用这个区别避免将局部线性化推广到任意大步长。七、可复现失败案例零步长被明确拒绝极小正步长虽可运行但误差变大属于结果质量失败。 这是构造的教学失败不是线上事故。复现顺序是保存输入、运行脚本、记录输出、只改一个条件后重跑。修复后必须同时检查正常样本不能用默认值掩盖错误。八、实验设计与实际结果零步长必须抛出ValueError方向导数接近3.8中心差分误差曲线应呈现中间较小、两端较大的趋势。 本次已经执行退出状态为0完整输出见工作目录。控制变量、样本量和参数写在脚本中。h1e-01 derivative2.7228145639 abs_error4.533e-03 h1e-03 derivative2.7182822815 abs_error4.530e-07 h1e-05 derivative2.7182818285 abs_error5.859e-11 h1e-08 derivative2.7182818219 abs_error6.603e-09 h1e-12 derivative2.7184920981 abs_error2.103e-04 h1e-15 derivative2.8865798640 abs_error1.683e-01 gradient [1.0, 4.0] unit_direction [0.6, 0.8] directional 3.8000000000000003 拒绝零步长 步长必须为正数字怎样对应本期机制固定指数函数、输入一点、双精度和同一个解释器步长十分之一时误差约零点零零四五三三十万分之一降到约五点八六乘十的负十一次方一千万亿分之一又升到约零点一六八三。只展示中间最好的一行会隐藏失效范围。读者应先比较同一实验中不同步长的趋势再检查绝对误差是否符合自己的验收预算而不是记住这个机器的最佳步长。九、常见问题与排查顺序先检查对象定义再检查输入、形状、分母、索引或时间点最后检查实现与环境。本次只跑双精度光滑函数和两个方向量不覆盖低精度、噪声目标、边界截断和高维训练。有限差分每次需要额外前向参数多时成本随坐标数量增长。自动微分能改变计算方式但仍要求计算图和目标定义正确。下一期链式法则会建立局部导数的组合规则本期保存的差分方法则成为独立检查工具。 不要把一次成功当成稳定性证明也不要把技术指标直接换成业务价值。十、系统与依赖差异本次只在记录的 Windows 和库版本运行。浮点末位、计时、字体、编码和表格默认行为可能跨环境变化未执行部分保持待核验。十一、验证清单执行脚本核对退出状态与本篇实际输出。重跑本篇正常、边界和失败样本检查数值或拒绝结果。更换数据时重新检查对象、分母和评价条件。验收判据零步长必须抛出ValueError方向导数接近3.8中心差分误差曲线应呈现中间较小、两端较大的趋势。十二、面试题与追问偏导在本期是什么答固定其他输入对某一个坐标求导。 导数回答的是在某个点附近输入的微小变化怎样影响输出。指数函数在一处的解析导数就是该处指数值这为差分实验提供独立参考。二元函数的偏导还要求固定另一个坐标否则变化沿着另一条路径发生算出来的量已经不是原偏导。讨论函数值、导数值和误差时要分开单位函数值可能是金额导数可能是金额相对于某个输入单位的变化不能把它们放进同一列直接比较。追问改变这个条件后哪一个输出或失败判据应该变化梯度在本期是什么答标量输出对各输入偏导组成的向量。 中心差分用左右两个函数值的差除以两倍步长。步长较大时这条割线不能准确代表该点切线产生截断误差步长极小时两个浮点函数值非常接近相减消去有效数字再被小分母放大。两种机制作用相反所以误差往往先降后升。选择步长需要结合函数尺度和浮点精度没有一个适用于所有变量的固定常数。追问改变这个条件后哪一个输出或失败判据应该变化单位方向导数在本期是什么答梯度沿单位方向的投影。 固定指数函数、输入一点、双精度和同一个解释器步长十分之一时误差约零点零零四五三三十万分之一降到约五点八六乘十的负十一次方一千万亿分之一又升到约零点一六八三。只展示中间最好的一行会隐藏失效范围。读者应先比较同一实验中不同步长的趋势再检查绝对误差是否符合自己的验收预算而不是记住这个机器的最佳步长。追问改变这个条件后哪一个输出或失败判据应该变化截断误差在本期是什么答有限步长近似留下的数学误差。 本例二元函数在指定点的梯度为一和四方向三和四的长度为五单位方向为零点六和零点八内积得到三点八。如果直接乘未归一化向量就得到按更大步幅缩放的变化量。方向导数的常用定义比较单位移动因此必须说明方向是否单位化梯度方向给出局部上升最快的方向不意味着沿它走任意距离都能保持上升。追问改变这个条件后哪一个输出或失败判据应该变化舍入误差在本期是什么答浮点表示和运算带来的数值误差。 数值差分适合对小函数、少量参数和实现改动做独立校验。先固定参数状态逐坐标扰动保持随机分支和数据不变再比较解析梯度与数值近似。相对误差分母不能在接近零时失效应同时查看绝对误差。遇到不可微点不同单侧差分可能不同需要回到函数定义不能用放宽容差掩盖真正的分支错误。追问改变这个条件后哪一个输出或失败判据应该变化十三、工程判断与下一期先用解析可解的函数检查实现再扫描数个数量级步长选择误差稳定区间保留大步长和极小步长作为反例。 下一期为AI-0217 链式法则。本期保留的契约和反例会继续使用。从本地证据到实际决策用有限差分校验多变量目标的步骤先把目标封装成纯函数输入同一向量时返回同一标量。复制输入分别加减步长不在原始参数上直接写入逐坐标检查后再选择一个固定单位方向验证梯度内积。每次记录坐标编号、步长、解析值、数值值和绝对差若只汇总最大误差应保留它对应哪个坐标。错误定位需要这个索引而不是只留一个通过布尔值。为什么函数状态会破坏差分如果前向包含随机抽样、缓存写入或自动更新参数左右扰动可能已经不是同一个函数。先冻结随机状态和参数或把这些机制从最小样本中移除。若目标来自模拟且本身带噪声需要讨论差分估计方差和重复平均不能套本篇确定性指数函数的容差。代码可运行不证明对照实验条件稳定。错误输入与低质量结果两种处理零步长会除零函数主动拒绝极小正步长没有违反正值范围却可能产生不可接受误差。后者需要结果质量阈值而不是简单类型校验。实际接口可分别输出参数错误、数值不稳定和正常估计让调用方选择调整步长或切换方法。不要把三种情况都返回零否则真实零导数与失败无从区分。梯度的坐标依赖改变输入单位会改变梯度数值因为导数包含单位比值。两个字段梯度大小不同不自动代表业务重要性也不能不经缩放就比较所谓敏感度。若对输入标准化应说明梯度是对原坐标还是变换坐标计算必要时用链式法则转换。这个问题与前期矩阵尺度一脉相承解释数字首先要解释坐标。读者可以追加的独立实验把指数换为平方函数中心差分在理想代数中能消去部分截断项所以误差曲线会不同把求值点移动函数尺度也变化。建议同时保留原指数样本确认实现没有退化再研究新函数。本文没有为这些扩展提供伪造输出读者应将实际结果记录为自己的新实验。官方资料Calculus III - Directional Derivatives用于核对本期技术机制或接口查阅日期为2026-10-13。适用边界只覆盖脚本中的合成数据、明确假设和已记录版本。真实业务需追加授权、监控、资源预算、回滚和领域验证。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑