1. 课程导入与DeepONet定位
动力系统预测建模的目标,是在给定系统当前状态、外部输入与控制参数的条件下,推断系统在未来一段时间内的演化轨迹。经典做法是先建立微分方程模型,再用数值积分求解;但在工程实际中,很多系统的精确方程难以获得,或者方程已知而参数随工况漂移,于是数据驱动方法成为重要补充。真正的难点并不在于"拟合一条曲线",而在于:训练阶段只见过少量输入函数(例如几种特定的外力曲线、初始条件或边界条件),测试阶段却要求模型对从未见过的输入函数给出可信预测。这正是DeepONet要解决的核心问题。
要理解DeepONet,先要区分两类学习任务。传统神经网络(全连接、CNN、RNN等)学习的是有限维向量到有限维向量的映射:输入是固定长度的数组,输出也是固定长度的数组。而动力系统预测本质上是函数到函数的映射——输入是一条随时间变化的驱动信号 u(t),输出是系统响应 s(t),两者都是函数。若用普通网络硬做,就必须把函数离散成固定网格,一旦网格分辨率或采样点位置改变,模型便失效。DeepONet的算子学习思想正是针对这一点:它学习的是算子 G,使得 s = G(u),其中 u 与 s 都属于函数空间,模型对离散方式保持一定的无关性。
关键区别:普通神经网络学的是"点对点"的数值映射,输入维度一变就要重训;DeepONet学的是"函数对函数"的算子映射,同一套参数可接受不同采样位置、不同分辨率的输入函数。
DeepONet的结构由两个子网络组成:Branch Net(分支网络)负责编码输入函数 u 在若干传感器点上的采样值,输出一个特征向量;Trunk Net(主干网络)负责编码输出函数的查询坐标(如时间 t 或空间位置 x),输出另一个同维特征向量。两者做内积(或逐元素乘后求和),得到该查询点上的输出值。用公式表达即 G(u)(y) ≈ Σk bk(u) · tk(y),其中 bk 来自分支网络,tk 来自主干网络,y 是查询坐标。这种"分支编码输入函数、主干编码查询位置、内积合成输出"的设计,使模型天然支持在任意坐标处求值,而不必绑定固定网格。
与传统神经网络相比,DeepONet的差异可以归纳为三点。第一,输入输出对象不同:普通网络处理定长向量,DeepONet处理函数,分支网络接收的是函数在传感器点上的采样值,主干网络接收的是查询坐标。第二,泛化维度不同:普通网络在训练分布内插值,DeepONet追求对输入函数族的算子级泛化,即对同一类但参数不同的输入函数仍能预测。第三,数据组织不同:DeepONet训练样本通常组织为"一个输入函数 + 若干查询点上的输出值"的配对,损失函数在查询点上计算,因此同一组数据可以支持任意查询坐标的评估。
本课程的整体学习路径围绕"从原理到实战"展开。前期建立算子学习的基本概念与DeepONet的数学结构,理解分支—主干分解为何能表达函数映射;中期进入数据构造与训练环节,学习如何从动力系统仿真或实验数据中生成输入函数—响应配对、如何选择传感器点数量与查询点分布、如何设置损失函数与训练策略;后期通过一个完整的实战项目串联全流程。实战项目以典型的动力系统为对象,例如受周期外力驱动的阻尼振子或一维热传导过程,输入为外力曲线或初始温度分布,输出为系统响应轨迹。项目要求完成数据生成、模型搭建、训练、在未见输入函数上的预测评估,并对比普通神经网络基线,观察DeepONet在分辨率变化与输入函数外推上的表现差异。
学习建议:本课程不要求先精通泛函分析。理解DeepONet的关键是抓住"分支编码输入函数、主干编码查询位置、内积合成输出"这一条主线,再通过代码把每个张量的形状与含义对应起来。遇到公式时,先问"这个量是函数还是点值",很多困惑会自然消解。
需要提前明确一个参照约定:本课程中,输入函数记为 u,查询坐标记为 y(时间或空间位置),输出函数记为 s,算子记为 G,即 s = G(u)。所有图示与代码中的符号保持一致;若某节切换到频域或无量纲化坐标,会在该节开头单独说明。掌握这一约定,后续阅读公式与实现时就不会混淆"函数"与"函数在某点的取值"。