Neural Operator 与 FNO:学习函数到函数的映射
WARNING
🧪 Beta公测版本提示:教程主体已完成,正在优化细节,欢迎大家提Issue反馈问题或建议。
1. 从"学一个解"到"学一类映射"
as02 的 PINN 用神经网络逼近某一个具体 PDE 问题的解:固定源项
本章介绍的 Neural Operator(神经算子),特别是其中最知名的 Fourier Neural Operator (FNO),换了一个更宏大的目标:
这里
这正是 as01 全景图中"FNO / PINO"相对于"PINN"的核心差异:PINN 学单个解,FNO 学一整族问题的求解规则。
2. 函数空间中的算子学习
2.1 什么是算子?
在数学上,算子(operator) 是"函数到函数"的映射。例如,微分算子
把任意合法的源项函数
2.2 数据是"函数对",不是"数字对"
普通监督学习的数据是
但关键在于:我们希望学到的映射
2.3 本章的玩具问题
仍然用一维 Poisson 方程,但这次我们要学习一族源项对应的求解规则:
数据集用正弦基函数解析构造(不需要数值 PDE 求解器):若
则解析解为
因为
保姆级:函数对,不是数字对。 普通回归的一个样本是
逐步推导:正弦特征函数为什么给出 ,以及和谱卷积的亲缘(点击展开)
边值问题
故它们是该 Sturm–Liouville 问题的特征函数。把源项展成
——高频(大
FNO 的谱卷积:FFT → 只留最低 modes=16 个频率 → 乘可学习复数权重 n_train=800、n_test=200、grid_size=64、width=32、n_layers=4、n_epochs=300、lr=1e-3、batch_size=32,种子与 SEED 一致。分辨率实验:同一套权重直接喂 grid_size=192。
3. FNO 的核心:Fourier Layer
3.1 整体架构
FNO 的完整结构可以概括为三步:
- Lift(提升):把输入通道(通常是
,坐标也拼进去以提供位置信息)用一个线性层映射到更高维的特征空间,宽度为 width - 堆叠若干 Fourier Layer:每一层在频域做全局卷积,再加一个逐点线性旁路,最后过非线性激活
- Project(投影):把高维特征映射回标量输出

图解说明:上半部分展示单个 Fourier Layer 的内部数据流——输入
经 FFT 进入频域,截断保留最低的 modes个频率分量,与可学习的复数权重逐模式相乘,再经 IFFT 回到空域;同时有一条 1×1 卷积旁路 保留局部逐点信息;两者相加后过 GELU 激活得到 。下半部分展示完整 FNO:Lift → 多层 Fourier Layer → Project。
3.2 谱卷积:在频域做全局卷积
Fourier Layer 的核心是谱卷积(Spectral Convolution)。根据卷积定理:
时域的卷积等价于频域的逐点相乘。FNO 直接在频域参数化这个卷积核:
- 对输入做实数快速傅立叶变换(
rfft) - 只保留最低的
modes个频率分量(截断高频——这既是一种低通滤波,也是一种隐式正则化:真实物理场的能量往往集中在低频) - 用一组可学习的复数权重
对每个保留的频率做线性变换 - 做逆变换(
irfft)回到空间域
形式上,第
其中
逐步推导:卷积定理怎样把空域卷积变成频域逐模式相乘(点击展开)
离散圆周上,卷积 (in_channels, out_channels, modes),与网格点数
截断高频 = 低通。Poisson 解本来能量在低频,截断是归纳偏置;激波、不连续解会吃亏,需要加大 modes 或换架构。旁路
CNN 的卷积核钉在像素上,
为什么需要旁路
3.3 分辨率不变性:参数量与网格大小无关
这是 FNO 最迷人的性质。谱卷积的可学习参数是复数权重 (in_channels, out_channels, modes)——只与通道数和保留的模式数有关,与输入网格点数
因此:
- 训练时用
的网格 - 推理时可以直接喂
(甚至 )的网格 - 同一套权重,无需重新训练,无需插值
传统的 CNN 卷积核大小固定在像素空间,换分辨率往往需要重新训练或仔细调整;FNO 的参数定义在频率空间,天然对分辨率无关。本章 demo 会专门演示这一点。
4. 与 PINN 的对比
| 维度 | PINN (as02) | FNO (as03) |
|---|---|---|
| 学习目标 | 单个解 | 算子 |
| 训练数据 | 不需要标注解,只用 PDE 残差 + BC | 需要大量 |
| 换源项/参数 | 原则上要重新训练 | 一次前向传播即可 |
| 分辨率 | 配点可任意采样(无网格) | 训练分辨率可与推理分辨率不同 |
| 物理约束 | 显式写入损失( | 纯数据驱动(PINO 会再加物理损失) |
| 适用场景 | 单个高精度正/反问题 | 需要反复求解同族方程的场景 |
两者并非对立:下一章 as04 的 PINO(Physics-Informed Neural Operator) 正是把 PINN 的物理残差损失嫁接到神经算子上,兼顾物理一致性与算子泛化能力。
5. Demo 结果解读
本章 demo 训练一个小型一维 FNO(约 3–4 层 Fourier Layer),在解析构造的 Poisson 算子数据集上学习

图解说明:上排是三个测试样本的输入源项
(训练时从未见过这些具体的 ),下排是对应的真解 (黑实线)与 FNO 预测(红虚线)。可以看到,换了不同形状的源项,同一个训练好的 FNO 都能给出接近真解的预测——这就是"算子泛化"。

图解说明:训练/测试 MSE 随 epoch 下降(对数坐标)。测试损失与训练损失同步下降,说明模型没有过拟合到训练集的特定函数,而是学到了更一般的映射规则。

图解说明:同一个只在
grid_size=64上训练过的模型,直接在grid_size=192的网格上做预测,误差仍然保持在较低水平。这验证了谱卷积"参数与网格大小无关"带来的分辨率不变性——传统网格法或普通 CNN 很难做到这一点。
6. 局限与后续
FNO 并非万能:
- 需要数据:与 PINN 不同,FNO 需要预先准备大量仿真/实验得到的
对,数据生成本身可能很贵 - 几何与边界:标准 FNO 假设规则网格(或可做 FFT 的域);不规则几何、复杂边界通常需要配合 GNN、坐标变换或几何神经算子等扩展
- 强非线性 / 激波:高频能量不可忽略时,低频截断可能不够,需要更大的
modes或混合架构
下一章 as04 会介绍 PINO:在神经算子的训练目标中加入 PDE 残差损失,用更少的数据学到更物理一致的算子。as05 则转向 GNN——处理分子、蛋白质、气象网格等不规则图结构数据。
7. 本章小结
- 算子学习:目标是学习
(函数→函数),而不是单个解 。 - Fourier Layer:FFT → 截断低频模式 → 可学习复数权重相乘 → IFFT,再加逐点线性旁路与激活。
- 分辨率不变性:参数量只依赖
modes与通道数,与网格点数无关,训练分辨率可与推理分辨率不同。 - 与 PINN 互补:PINN 无标注数据但换参数要重训;FNO 需要数据但对新输入零样本泛化。
- 承接后续:PINO 把物理损失加回算子学习;GNN 处理不规则科学数据结构。
📥 Code
| File | View | Download |
|---|---|---|
| demo.py | Open | Download |
| exercise.py | Open | Download |
参考
- Li, Z., Kovachki, N., Azizzadenesheli, K., Liu, B., Bhattacharya, K., Stuart, A., & Anandkumar, A. (2021). Fourier Neural Operator for Parametric Partial Differential Equations. ICLR 2021. [arXiv:2010.08895]
- Kovachki, N., Li, Z., Liu, B., Azizzadenesheli, K., Bhattacharya, K., Stuart, A., & Anandkumar, A. (2023). Neural Operator: Learning Maps Between Function Spaces With Applications to PDEs. JMLR. [arXiv:2108.08481]
- Li, Z., Zheng, H., Kovachki, N., et al. (2024). Physics-Informed Neural Operator for Learning Partial Differential Equations. ACM / JMLR. (PINO) [arXiv:2111.03794]
- Lu, L., Jin, P., Pang, G., Zhang, Z., & Karniadakis, G. E. (2021). Learning nonlinear operators via DeepONet based on the universal approximation theorem of operators. Nature Machine Intelligence. [arXiv:1910.03193]