1. 课程导入与问题定义

在科学计算与工程仿真中,大量问题最终都归结为“求解一个数学方程或优化问题”。无论是流体力学中的 Navier–Stokes 方程、结构分析中的弹性力学平衡方程,还是金融工程中的偏微分方程定价模型,传统数值方法都遵循一条相对固定的技术链路。理解这条链路的每个环节,以及每个环节的计算代价来自哪里,是判断“机器学习可以在哪里介入、以什么方式介入”的前提。本节先建立整体地图,后续章节再逐段深入。

一、典型数值求解流程的四个环节

建模是把物理或业务问题写成数学形式的过程:确定未知量(如速度场 u、压力场 p)、控制方程、边界条件与初始条件。建模阶段决定了问题的适定性,也决定了后续离散的难度。例如把不可压缩流动写成 ∇·u = 0 与动量方程耦合的形式,就注定了压力—速度耦合将成为迭代求解的难点。

离散是把连续方程转化为有限维代数系统。常见手段包括有限差分、有限元、有限体积与谱方法。以二维泊松方程 −∇²u = f 在单位正方形上的五点差分格式为例,若网格为 N×N,则未知量个数为 N²,离散后得到线性系统 Au = b,其中 A 是稀疏的块三对角矩阵。离散精度由网格尺度 h 控制,截断误差通常为 O(h²),这意味着网格加密一倍,未知量变为四倍,而精度只提升约四倍——计算量与精度之间的这种“不划算”关系,正是加速需求的根源。

迭代是求解离散系统的过程。对线性系统可用 Jacobi、Gauss–Seidel、共轭梯度(CG)、GMRES 等;对非线性系统则常用 Newton–Krylov 方法,每次 Newton 步内部再调用线性求解器。迭代法的核心指标是收敛速度:以 Jacobi 迭代求解上述泊松问题为例,谱半径约为 cos(πh),当 N = 100 时谱半径约 0.9995,达到 10⁻⁶ 残差需要数千次迭代。 Krylov 方法配合预条件子可以把迭代次数压到几十次,但预条件子的构造本身又可能很昂贵。

误差控制贯穿始终:离散误差、迭代截断误差、舍入误差需要分别评估;自适应网格细化(AMR)根据局部误差估计调整网格;时间推进问题还需控制步长以满足稳定性条件(如 CFL 条件)。误差控制环节往往需要反复“求解—估计—再求解”,形成外层循环,进一步放大总计算量。

二、计算代价的分布与加速机会

把上述流程放到实际工程中观察,计算时间通常呈现明显的“长尾”结构:单次离散与矩阵装配可能只占很小比例,而迭代求解(尤其是大规模稀疏系统与非线性耦合系统)往往占据 70% 以上的墙钟时间;在参数扫描、优化设计、不确定性量化等外层任务中,整个求解流程又会被调用成百上千次。因此,机器学习加速的切入点大致可分为三类:替代(用代理模型直接预测解或关键量,跳过迭代)、加速(学习更好的预条件子、初始猜测或迭代算子,缩短收敛路径)、引导(学习误差分布、网格重要性或参数敏感性,把计算资源分配到最需要的地方)。

需要强调的是,这三类切入点的风险与收益并不对称。纯替代型代理模型推理极快,但误差缺乏严格保证,适合设计空间探索与实时预览;学习型预条件子与初始猜测嵌入在原有迭代框架内,最终仍由残差判据把关,因此更容易获得可信结果。初学者常见的误区是“用神经网络直接替代整个求解器”,而忽略了守恒性、边界条件满足性与外推稳定性等硬约束。

数值求解主链路与机器学习三类切入点 建模 控制方程 · 边界条件 未知量定义 离散 网格 · 基函数 · 格式 Au = b(稀疏系统) 迭代求解 CG / GMRES / Newton 预条件 · 收敛判据 误差控制 残差估计 · AMR 步长 / CFL 约束 不满足精度 → 加密网格 / 缩小步长 外层任务:参数扫描 · 优化设计 · 不确定性量化 · 实时控制 整个求解流程被反复调用,单次加速收益被成倍放大 切入点 A:替代 · 代理模型直接预测解场 · 预测关键标量(阻力、应力) · 推理快,适合设计探索 · 风险:误差无严格保证 · 需守恒性 / 边界约束修正 适用:实时预览、粗筛、代理优化 切入点 B:加速 · 学习型预条件子 · 学习初始猜测 u₀ · 学习粗网格校正算子 · 嵌入原迭代框架 · 残差判据仍把关结果 适用:大规模稀疏系统、非线性求解 切入点 C:引导 · 学习误差分布估计 · 学习网格重要性 / AMR 策略 · 学习参数敏感性排序 · 分配计算资源 · 减少无效加密与重复求解 适用:自适应细化、降维、试验设计 虚线表示机器学习模块对主链路的介入位置;实线表示传统数值流程的数据与结果流向

三、一个可操作的示例:二维泊松问题的加速对照

为了让“切入点”不停留在概念层面,考虑一个具体的小规模示例。设求解 −∇²u = f 于 [0,1]²,边界 u = 0,右端项取 f(x,y) = 2π² sin(πx) sin(πy),其解析解为 u = sin(πx) sin(πy)。取 N = 64 的均匀网格,h = 1/64,离散得到 3969 个内部未知量。若用 Jacobi 迭代、初始猜测 u₀ = 0、收敛判据为相对残差 ‖b − Au‖₂ / ‖b‖₂ < 10⁻⁶,则迭代次数约为 O(N²) 量级,实测通常在数千次;若改用 CG 且不预条件,迭代次数约百次量级;若用“学习型初始猜测”——例如用一个在同类问题上训练过的小型卷积网络,输入为 f 的网格采样,输出为 u 的近似——则 CG 的起始残差可下降一到两个数量级,迭代次数相应减少。这里的具体数字属于教学示例的合理估计,实际数值会随实现与硬件变化,读者应以自己复现的残差曲线为准。

这个示例揭示了评估加速效果的正确方式:不要只看“代理模型推理用了多少毫秒”,而要看端到端的“达到给定残差所需的总时间”,并同时记录最终残差是否真的达标。对于替代型方法,还必须额外检查解是否满足边界条件与守恒性质,否则速度再快也不可用。

四、整体技术路线图与学习路径

基于上述分析,本课程的技术路线可以概括为一条“问题—表示—模型—嵌入—评估”的主线:先把数值流程拆解为可学习的子任务(如“给定 f 预测 u”“给定 A 预测预条件子作用”),再选择合适的数据表示(网格、点云、图、算子),然后选择模型族(CNN、GNN、神经算子、强化学习策略),接着把模型嵌入原有求解框架并保留残差校验,最后用统一的误差与时间指标做对照评估。后续章节将依次展开:数据生成与采样策略、代理模型与神经算子、学习型预条件与初始猜测、误差估计与可信度评估、以及与经典求解器的混合部署。

学习建议:在进入具体模型之前,先在自己熟悉的某个数值问题上跑通“基线求解器 + 残差曲线 + 计时”三件套。没有可靠的基线,任何“加速”都无从判断。
常见误区:把训练集上的低误差当作求解精度保证。数值求解关心的是对新参数、新边界、新网格的泛化误差,以及是否满足物理约束,训练损失只是间接指标。