被求导的是哪一个对象
设连续物理模型由参数 θ、初值和控制量决定。计算机并不直接执行连续方程,而是在网格尺度 h、时间步长 Δt 和给定求解容差下运行离散程序。把这段程序记为
Sh,Δt,τ:θ⟼(x0,x1,…,xK),
再由轨迹计算标量目标 J。可微分物理的基本任务,是计算这条实际执行的离散映射的导数,例如 dJ/dθ。导数回答“在当前离散、分支和容差下,小改参数会怎样改变目标”,并不会自动回答连续方程的精确灵敏度。
这与学习代理模型不同。代理模型 Sϕ 用数据近似求解器输出,求导得到的是代理的梯度。即使状态误差很小,梯度也可能因高频误差、训练分布外输入或错误平滑而显著偏离。可微求解器保留已知数值步骤并对其求导;代理模型学习一条新映射。二者可以组合,却不能因为都能反向传播就视为同一方法。
离散状态递推与目标
考虑显式递推
xk+1=Fk(xk,θ,uk),J=Φ(xK,θ)+k=0∑K−1ℓk(xk,θ).
Fk 可以是一阶时间积分,也可以包含空间离散、力计算和约束投影。计算图中的节点不是抽象的“物理定律”,而是数组运算、线性求解、条件分支和迭代停止判据。只要这些节点的局部导数可定义并正确实现,链式法则就能组合出离散程序的梯度。
前向切线灵敏度
若 θ∈Rp,定义状态雅可比 Sk=∂xk/∂θ。逐步求导得到
Sk+1=Fk,xSk+Fk,θ,
并在终点和各阶段累积 dJ/dθ。切线法沿模拟方向前进,容易与状态同步计算;当参数方向很少、输出很多时尤其合适。但 Sk 的列数随参数数目增长,若参数是高维材料场或神经网络权重,直接保存完整雅可比通常昂贵。实际也可只传播方向 Skv,得到雅可比向量积。
例 1:两步递推的切线梯度
令 xk+1=θxk,x0=2,运行两步,并取 J=21(x2−8)2。在 θ=1.5 时,x1=3,x2=4.5。记 sk=∂xk/∂θ,则
s0=0,s1=x0+θs0=2, s2=x1+θs1=3+1.5×2=6. 所以 dJ/dθ=(x2−8)s2=(−3.5)×6=−21。直接写成 x2=2θ2,其导数为 4θ=6,结果一致。这里传播的是状态对参数的灵敏度,而不是重新拟合状态序列。
反向伴随递推
当目标很少而参数很多时,反向模式更有效。令列向量伴随量表示从未来目标传回当前状态的梯度。若先忽略 Φ 对参数的显式依赖,可写成
λK=Φx(xK,θ),
λk=ℓk,x(xk,θ)+Fk,xTλk+1.
参数梯度为
dθdJ=Φθ+k=0∑K−1(ℓk,θ+Fk,θTλk+1).
一次反传便能给出所有参数分量,但反传需要对应的前向状态。全部保存会占用 O(K) 状态内存;不保存则必须重算。自动微分中的向量—雅可比积正是在局部实现这条伴随递推,无需显式形成巨大雅可比矩阵。
例 2:伴随法复核同一梯度
沿用例 1。终点伴随为 λ2=x2−8=−3.5,而 Fx=θ,故 λ1=θλ2=−5.25。每一步都有 Fθ=xk,于是
dθdJ=λ1x0+λ2x1=(−5.25)×2+(−3.5)×3=−21. 切线法从参数变化向未来推,伴随法从目标变化向过去推;两者是同一链式法则的两种组织方式。索引若错用 λkxk,即使维度合法也会得到错误结果。
自动微分不是黑箱许可证
前向自动微分适合少量参数方向,反向自动微分适合少量标量目标。框架会记录运算图并调用局部导数,但模型作者仍要审查不可微节点。接触启闭、碰撞事件、裁剪、取整、网格重连和依赖数据的循环次数都会产生分段光滑甚至不连续映射。在分界点返回某个次梯度,不代表它描述了真实事件时间的变化。
原地修改可能破坏反传所需状态;自定义算子需要同时验证前向值和反向规则;随机力、随机采样与自适应步长在重算时必须可复现。对迭代线性求解器,还要说明反传是穿过有限次迭代,还是把最终解当作隐式方程的解。这两个计算图在未充分收敛时不是同一个对象。
隐式方程与隐式梯度
许多数值步骤由残差方程定义:R(z,θ)=0。若 Rz 在解附近可逆,隐函数定理给出
∂θ∂z=−Rz−1Rθ.
对标量损失 L(z,θ),不必显式求逆。先解伴随线性系统
RzTλ=LzT,
再计算
dθdL=Lθ−λTRθ.
隐式反传的代价常由一次转置雅可比系统求解决定。它假设前向状态足够接近 R=0,且雅可比条件良好;若求解器提前停止、落入另一解支或靠近分岔,公式虽然可执行,数值灵敏度仍可能巨大或失真。
例 3:平方根约束的隐式梯度
令 R(z,θ)=z2−θ=0,选择正根,并取 L=21(z−3)2。在 θ=4 时 z=2,有 Rz=4、Rθ=−1、Lz=−1。直接隐式求导得
dθdz=−4−1=41,qquaddθdL=(−1)41=−41. 伴随方程 4λ=−1 给出 λ=−1/4,于是 Lθ−λRθ=0−(−1/4)(−1)=−1/4。若只运行一次牛顿迭代,所求的是“一次迭代程序”的导数,不一定等于收敛正根的隐式导数。
先离散后求导与先求导后离散
“先离散后求导”先写出离散目标和更新,再对代码求导,得到离散伴随。只要局部导数正确,它就是该离散目标的精确梯度。“先求导后离散”先在连续方程上推导切线或伴随偏微分方程,再选择数值格式。后者便于分析连续边界条件和函数空间结构,但离散后的结果未必恰好等于原求解器代码的导数。
差异可来自数值通量、稳定化项、质量矩阵、离散边界、积分求积和自适应网格。两条路线都可能合理,关键是声明优化对象:若要优化实际程序输出,离散伴随必须与程序一致;若关心连续模型,则还要证明或实证梯度随网格细化收敛。不能用“自动微分通过”替代离散一致性分析。
例 4:正确的离散梯度仍可偏离连续梯度
对 x˙=−θx、x(0)=1,一步显式欧拉在步长 h 下给出 x1=1−hθ,所以 ∂x1/∂θ=−h。连续精确解在 t=h 为 e−hθ,梯度是 −he−hθ。
取 h=0.5、θ=1,离散状态为 0.5、离散梯度为 −0.5;连续状态约为 0.6065、连续梯度约为 −0.3033。自动微分返回 −0.5 完全忠实于欧拉程序,却不能据此宣称连续灵敏度正确。减小步长并检查两种量的收敛才是数值验证。
检查点、重算与确定性
长时间模拟的反向传播会遇到内存瓶颈。全部保存状态使反向快速但内存随步数线性增加;只保存少数检查点,则在反向时重放区间,以额外计算换内存。分层检查点可以在峰值内存和重算次数之间折中。选择策略前应测量状态大小、单步成本和可接受的墙钟时间,而不是只看理论复杂度。
重放必须与原前向一致。随机数种子、自适应步长的接受记录、接触事件顺序和并行归约都可能使轨迹变化。若重算状态与原状态不同,伴随量就在另一条轨迹上传播。对混沌或强不稳定系统,极小舍入差也可能快速放大;短期导数可正确而长期梯度不可用于稳定优化,需要窗口化、统计目标或专门灵敏度方法。
用方向有限差分检查梯度
自动微分能消除手写链式法则的大量错误,却不能发现前向方程写错、单位错或自定义反向错。给参数方向 v,中心有限差分检查
Dε=2εJ(θ+εv)−J(θ−εv)≈∇θJTv.
方向检查只需两次前向,适合高维参数。应扫描一组 ε:过大时截断误差占主导,过小时舍入误差和求解容差占主导,中间通常出现误差谷底。两侧运行必须使用相同随机样本,并把非线性或线性求解容差收紧到明显小于差分信号。
例 5:中心差分的误差尺度
令 J(θ)=θ3,在 θ=2 的解析导数为 12。取 ε=0.01,中心差分为
0.022.013−1.993=12.0001. 差值 10−4 来自有限步长的截断项,并不说明反向实现错误。若把 ε 依次缩小而误差先降后升,通常是截断误差与浮点舍入的共同结果;若各尺度都不接近,则应检查索引、转置、停止梯度和求解容差。
单位、尺度与物理约束
梯度带单位。若 J 的单位是焦耳、θ 的单位是千克,则 ∂J/∂θ 的单位是焦耳每千克。把长度、时间和材料参数直接以悬殊数量级输入优化器,会让同一个无量纲学习率对应完全不同的物理改变量。可靠做法是先选特征尺度无量纲化,或显式按允许变化范围缩放参数,并在报告中给出恢复到物理单位的规则。
质量、能量、动量或电荷守恒也不会由“可微”自动产生。若前向离散格式不守恒,梯度会忠实推动一个存在漂移的模型;在目标中加入守恒惩罚只能软约束,权重和单位仍需解释。若物理过程本来有耗散,则应检查正确的能量收支,而不是机械要求常数。参数优化前后都应报告守恒残差、边界通量和稳定性。
三层正确性验证
第一层是程序导数:用方向差分、小规模解析例和局部算子测试确认反传等于离散代码的导数。第二层是数值求解:检查状态误差、求解残差、时间步和网格细化、守恒量及边界实现。第三层是物理模型:核对参数单位、适用假设、观测定义和实验数据。三层缺一不可。
可微分只说明某条映射有可计算导数,不说明该映射正确、稳定、可辨识或适合外推。一个错误符号的力项同样可以平滑求导;一个粗网格也可以产生机器精度一致的离散伴随。科学结论必须把梯度校验与独立参考解、制造解、传统数值基线和网格收敛放在同一证据链中。
常见误区
误区一:状态拟合准确就意味着代理梯度准确。 小幅高频状态误差经求导可能被放大;必须单独比较方向导数或下游优化结果。
误区二:反向模式永远比前向模式快。 成本取决于参数方向数、目标数、轨迹长度和存储策略。少参数多输出时切线法常更直接。
误区三:有限差分不够精确,所以不值得做。 它不适合替代生产梯度,却是发现反向规则、索引和停止梯度错误的独立检查;尺度扫描比单个步长更有信息。
练习
练习 1:切线递推
- 所属知识
- 切线法
- 难度
- 3/5
对
xk+1=xk+θ 推导
K 步后的状态灵敏度和二次终点损失梯度。
查看提示
对每一步同时传播状态和
sk=∂xk/∂θ。
查看解答
若
xk+1=xk+θ且
x0与
θ无关,则
s0=0、
sk+1=sk+1,所以
sK=K;对
J=xK2/2有
dJ/dθ=KxK。
练习 2:伴随索引
- 所属知识
- 伴随法
- 难度
- 4/5
写出一般离散递推的伴随式,并解释为何参数项使用
λk+1。
查看提示
第k步参数通过
Fk影响
xk+1,应与
λk+1配对。
查看解答
令
λK=Φx,
λk=ℓ
k,x+Fk,xTλk+1;参数项为
ΣkFk,θTλk+1,再加显式的
Φθ与ℓ
k,θ。
练习 3:隐式解支
- 所属知识
- 隐式梯度
- 难度
- 4/5
分析
z2−θ=0 的正根在
θ→0+ 时为何难以稳定求导。
查看提示
先检查
Rz是否可逆以及所选解支是否连续。
查看解答
对
R=z2−θ,在
θ>0的正根上
dz/dθ=1/(2θ);
θ趋近0时
Rz=2z趋零,灵敏度发散,
θ=0处隐函数定理条件失效。
练习 4:方向差分
- 所属知识
- 验证
- 难度
- 3/5
为百万维参数设计不显式逐坐标扰动的梯度检查。
查看提示
比较标量
∇JTv与两次扰动前向的中心差分,并扫描多个
ϵ。
查看解答
固定随机种子,对
ϵ按对数尺度计算
Dϵ及相对误差;预期误差先按截断项下降,再受舍入和求解容差影响上升,若无低谷则检查实现。
练习 5:离散与连续
- 所属知识
- 离散误差
- 难度
- 4/5
用线性衰减方程说明“离散梯度正确”不等于“连续梯度准确”。
查看提示
分别写出数值一步映射的导数和连续精确解的导数。
查看解答
显式欧拉给
x1=(1−hθ)x0及导数
−hx0;连续解给
e−hθx0及导数
−he−hθx0。前者可被AD精确求得,但只有h趋零时才逼近后者。
练习 6:验收证据
- 所属知识
- 科学验证
- 难度
- 5/5
给出一个可微流体求解器进入参数反演前的最小验收清单。
查看提示
把程序导数、数值求解和物理模型分开列证据。
查看解答
程序层做解析小例和方向差分;数值层做残差、网格与时间步收敛、守恒收支;物理层核对单位、边界、参数范围并与独立实验或高精度基线比较。