4. 残差评估方法

在物理残差自适应采样中,采样策略的“眼睛”就是残差评估。只有把每个候选点上的物理残差算得准、算得快,后续的加密、加点、重采样才有可靠依据。本节围绕四个相互关联的问题展开:单点残差怎么算、多个残差分量如何聚合成一个标量、导数项用什么方式求、以及精度与成本之间如何取舍。

一、点wise残差计算:从方程到标量

设一个由偏微分方程描述的物理问题写成残差形式 R(x) = N[u](x) - f(x),其中 N 是微分算子,u 是当前近似解(例如神经网络或插值函数给出的解),f 是源项。所谓点wise残差,就是在给定坐标 x_i 处,把近似解代入算子后得到的局部违背量。对一维稳态热传导 -k u''(x) = q(x),点wise残差即 R(x_i) = -k u''(x_i) - q(x_i);对二维不可压 Navier–Stokes 的动量方程,残差是一个向量,每个分量对应一个方程。

实际实现时,点wise残差通常不是孤立计算的,而是对一批候选点 {x_i}_{i=1}^{M} 批量求值,得到残差数组。需要注意三点:其一,残差必须在与方程一致的坐标系和单位下计算,若解被归一化,源项和系数也要同步归一化;其二,边界点与内部点的残差含义不同,边界残差衡量边界条件违背,内部残差衡量方程违背,二者不宜直接混入同一个范数;其三,对含多个物理场的问题,应保留分场残差,便于定位是哪个方程在“拖后腿”。

二、残差范数选择:把向量压成标量

自适应采样需要一个可比较的标量指标来决定“哪里最该加点”。常见选择有:

  • L∞ 范数:||R||∞ = max_i |R_i|,对最大违背最敏感,适合强调最坏点、防止局部严重失真,但容易被单个异常点主导。
  • L2 范数:||R||2 = (Σ |R_i|²)^{1/2},平滑、对整体误差敏感,适合作为全局收敛判据,但对局部尖峰不敏感。
  • L1 范数:||R||1 = Σ |R_i|,对离群点更稳健,适合残差分布重尾的情形。
  • 加权范数:||R||w = (Σ w_i |R_i|²)^{1/2},用 w_i 体现单元体积、物理量纲或先验重要性,是多物理场问题的常用做法。

选择范数不是纯数学偏好,而是与采样目标绑定:若目标是“消除最坏局部误差”,用 L∞ 或带阈值的最大残差;若目标是“整体精度达标”,用 L2;若残差量纲差异大(如温度与压力同批比较),必须先无量纲化再加权。一个实用做法是同时监控 L∞ 与 L2:L∞ 触发局部加密,L2 判断整体是否收敛。

三、数值微分与自动微分

残差中的导数项是精度与成本的主要来源。数值微分(有限差分)实现简单:一维二阶中心差分为 u''(x_i) ≈ (u_{i-1} - 2u_i + u_{i+1}) / h²,误差为 O(h²),但步长 h 过大会截断误差大,过小会放大舍入误差,且在高维、非结构网格上构造差分模板较繁琐。数值微分只用到函数值,适合解由黑箱插值给出的场景。

自动微分(AD)则对计算图逐节点应用链式法则,前向模式适合输入维度低、输出维度高的情形,反向模式适合输出为标量损失、输入维度高的情形。对神经网络近似解,反向模式一次前向加一次反向即可得到所有输入点的梯度,二阶导数可通过嵌套或 Hessian-向量积实现。AD 的导数精度达到机器精度,不受步长困扰,但需要框架支持,且高阶导数的计算图会显著膨胀。

# 示例:用自动微分计算一维残差(PyTorch 风格伪代码)
x = torch.tensor(xi, requires_grad=True)
u = model(x)                      # 近似解
u_x  = torch.autograd.grad(u, x, grad_outputs=ones, create_graph=True)[0]
u_xx = torch.autograd.grad(u_x, x, grad_outputs=ones, create_graph=True)[0]
R = -k * u_xx - q(x)              # 点wise残差

选择建议:解由可微模型给出、需要高阶导数或高维输入时优先 AD;解为离散插值、或只需一阶导数且网格规则时,有限差分更轻量。混合使用也常见——内部用 AD,边界用差分,但必须保证两处导数精度量级一致,否则残差会被数值噪声污染。

四、精度与成本权衡

残差评估的成本由三部分构成:函数/模型前向求值次数、导数计算开销、以及候选点数量 M。AD 反向模式单点成本约等于数次前向,但二阶导可能达到数十倍;有限差分每个导数方向都要额外前向,维度 d 时成本随 d 增长。因此,在采样迭代早期,候选点多、精度要求低,可用一阶差分或低阶 AD 快速筛出高残差区域;在收敛后期,候选点少、需要精确判据,再切换到高阶 AD 或更细差分。

实用策略:先用粗网格 + L∞ 范数 + 一阶差分做“粗筛”,把候选点缩减一个数量级;再对入围点用 AD 二阶导 + 加权 L2 做“精评”。这样既避免全程高成本,又保证最终加点位置可靠。

还需警惕“残差评估误差被误读为物理误差”。若差分步长不当,残差图会出现棋盘状噪声,自适应算法会把点加到噪声最大处而非真正误差最大处。判断方法是:固定解、缩小步长或改用 AD 重算残差,若高残差区域位置明显漂移,说明原评估不可信。另一个判据是残差随候选点加密是否收敛——若 M 翻倍后最大残差位置稳定,评估可信度较高。

残差评估流程:从点wise残差到采样决策 候选点集 {x_i} 近似解 u(x) 导数计算 有限差分 / 自动微分 一阶、二阶导数 点wise残差 R_i = N[u](x_i) − f(x_i) 分场保留残差分量 范数聚合 L∞ / L2 / L1 / 加权 输出标量指标 采样决策 高残差区域加密 / 加点 精度—成本权衡:两阶段评估 粗筛:一阶差分 + L∞ 候选点多、成本低、快速定位 精评:二阶 AD + 加权 L2 候选点少、精度高、可靠加点

把上述四件事串起来,一个可复现的评估流程是:确定残差表达式与坐标系 → 选择导数计算方式并验证步长或 AD 精度 → 对候选点批量计算分场残差 → 按物理量纲加权并选择范数 → 用粗筛/精评两阶段控制成本 → 检查残差分布是否随候选点加密而稳定。只要其中任一步的精度与成本失衡,自适应采样就会把计算资源投到错误的位置,这正是残差评估方法必须单独设计的原因。