3. 傅里叶变换与频域表示

傅里叶神经算子(FNO)之所以能在分辨率无关的偏微分方程求解中表现出色,核心在于它把“空间上的卷积”搬到了“频率上的乘法”。要真正理解 FNO 的频域线性层,需要先把连续傅里叶变换、离散傅里叶变换(DFT)以及频域卷积定理这条线索串起来。本节从数学定义出发,落到 FNO 中实际使用的截断策略,并说明截断高频对表达能力与计算效率的双重影响。

连续傅里叶变换:从空间到频率

设一维空间函数为 u(x),其连续傅里叶变换定义为

Û(ξ) = ∫ u(x) · e^(−2πi ξ x) dx
u(x) = ∫ Û(ξ) · e^(2πi ξ x) dξ

这里 ξ 是频率变量,Û(ξ) 表示函数中频率为 ξ 的成分的复振幅。正变换把空间域信号分解为不同频率的复指数叠加,逆变换再把它们合成回空间域。需要注意符号约定:本节统一采用指数项 e^(−2πi ξ x) 作为正变换核,逆变换用 e^(2πi ξ x),全文与图示保持一致。二维情形下,x=(x₁,x₂)、ξ=(ξ₁,ξ₂),变换核变为 e^(−2πi (ξ₁x₁+ξ₂x₂)),即对两个方向分别做一维变换。

连续变换是理论出发点,但计算机只能处理有限采样点。设在一维区间上取 N 个等距采样点 u₀,…,u_{N−1},采样间隔为 Δx,则离散傅里叶变换为

Û_k = Σ_{n=0}^{N−1} u_n · e^(−2πi k n / N),  k = 0,…,N−1
u_n = (1/N) Σ_{k=0}^{N−1} Û_k · e^(2πi k n / N)

离散频率索引 k 与物理频率 ξ_k 的关系是 ξ_k = k/(NΔx)。当 k 超过 N/2 时,对应的是负频率(由离散频谱的周期性折叠而来)。这一点在实现中非常关键:k=0 是直流分量,k=1,…,N/2−1 是正频率,k=N/2 附近是奈奎斯特频率,再往后是负频率。FNO 代码里用 torch.fft.rfft2 只保留非负频率,正是利用了实信号频谱的共轭对称性。

频域卷积定理:FNO 频域线性层的理论依据

卷积定理指出,两个函数在空间域的卷积,等于它们在频域的逐点乘积:

(u * κ)(x) = ∫ u(x−y) κ(y) dy
F{u * κ}(ξ) = Û(ξ) · K̂(ξ)

其中 κ 是卷积核,K̂ 是其傅里叶变换。这条定理是 FNO 频域层的直接来源。传统卷积神经网络在空间域用局部小核做卷积,感受野受核尺寸限制;而 FNO 把卷积写成频域乘法后,一个全局的卷积核 κ 在频域对应一个乘性权重 K̂(ξ),它对所有空间位置同时生效,天然具备全局感受野。FNO 的频域线性层正是把可学习的参数放在 K̂ 上:对输入做 FFT 得到 Û,乘以可学习的复权重 R_φ(ξ),再逆变换回空间域。由于 R_φ 直接作用于频率分量,模型学到的就是“每个频率成分该被放大、衰减还是相移”。

可以把频域线性层理解为:空间域的全局卷积被参数化为频域上的逐点复数乘法。相比在空间域显式构造大卷积核,频域乘法在计算上更省,且与网格分辨率解耦——同一组频域权重可以作用在不同 N 的离散网格上(配合适当的频率截断与归一化)。

为什么 FNO 要在频域做线性变换

原因可以归纳为三点。第一,全局耦合:偏微分方程的解往往具有长程相关性,频域乘法让每个输出点都依赖全部输入点,避免了堆叠多层小卷积来扩大感受野。第二,计算效率:长度为 N 的离散卷积直接计算是 O(N²),而 FFT 是 O(N log N),频域乘法是 O(N),整体复杂度由 FFT 主导。第三,分辨率泛化:频域表示把“空间位置”和“频率成分”解耦,模型参数作用在频率上而非具体网格点上,因此在训练分辨率上学的算子有机会迁移到更细或更粗的网格。

下面这张图把“空间域卷积 → FFT → 频域截断与乘权 → 逆 FFT → 空间域输出”的信号链,以及截断高频带来的信息取舍画在一起,便于对照理解。

FNO 频域线性层:信号链与高频截断 空间域输入 u(x),N×N 网格 含低频结构 + 高频细节 二维 FFT O(N² log N) rfft2 取非负频率 频域表示 Û(ξ) 低频能量集中 高频幅值小但含细节 截断高频 保留 |k| ≤ k_max 丢弃 k_max 以上分量 乘可学习权重 R_φ(ξ) 复数 逐频点相乘 逆 FFT irfft2 回到空间域 O(N² log N) 空间域输出 全局卷积结果 再与逐点线性项相加 频谱幅值示意(一维剖面) 频率 k(0 → 奈奎斯特 → 负频率折叠) |Û| k_max 截断线 被截断的高频分量 截断的取舍 • 保留低频:抓住解的全局平滑结构,参数少、计算省 • 丢弃高频:损失尖锐梯度、激波、小尺度细节 • k_max 过小 → 欠拟合;过大 → 参数与算力上升 • 典型做法:保留每维前 12~16 个模态,按任务调

截断高频:表达能力与计算效率的权衡

FNO 并不会保留全部频率分量,而是只保留每维最低的 k_max 个模态(常见取 12 或 16)。这一设计带来两方面影响。

对表达能力的影响。低频分量对应解的平滑、大尺度结构,高频分量对应尖锐梯度、激波、边界层和小尺度涡。截断 k_max 相当于给模型加了一个低通滤波器:如果目标方程的解本身光滑(如扩散方程、低雷诺数流动),保留少量低频就足以刻画主要形态;但如果解含强间断或精细结构(如高雷诺数湍流、激波),过小的 k_max 会系统性丢失细节,表现为预测结果过度平滑、峰值被削平。因此 k_max 是表达能力的关键旋钮,需要与问题的空间尺度匹配。

对计算效率的影响。频域乘法的参数量与 k_max² 成正比(二维情形),计算量也随保留模态数增长。截断后,乘权步骤只处理 k_max×k_max 个复数,而不是全部 N×N 个频点,参数量和显存占用都显著下降。同时,FFT 本身仍是 O(N² log N),所以整体开销由 FFT 与截断乘法共同决定。实践中常见做法是:先用较小的 k_max(如 8~12)快速验证流程,再根据验证误差逐步增大,观察误差是否随 k_max 下降而收敛。

截断不是“越多越好”。当 k_max 接近 N/2 时,保留的模态已覆盖奈奎斯特频率,继续增大既不会带来新信息,还会引入更多参数和过拟合风险。合理做法是让 k_max 与数据中真实存在的最高有效频率相匹配。

一个可操作的小例子

假设在 64×64 网格上求解二维扩散方程,初始场含一个高斯峰。取 k_max=12:FFT 后保留中心 12×12 的低频块,乘以可学习复权重,再逆变换。若预测结果的高斯峰明显变宽、峰值偏低,说明 k_max 偏小或权重欠训练;若峰值位置和宽度都接近参考解,则截断基本合理。把 k_max 调到 16 再训练,若验证误差不再明显下降,说明 12 已覆盖该问题的主要频率成分。这个“调 k_max → 看误差与形态 → 判断是否收敛”的循环,就是频域截断在工程中的实际用法。

总结来说,连续与离散傅里叶变换提供了空间域与频域之间的可逆桥梁,频域卷积定理说明了卷积为何能变成逐点乘法,而 FNO 正是利用这一点把全局卷积参数化到频域。截断高频则是这套方案落地的关键工程决策:它用可控的表达能力损失,换取参数与计算上的显著节省,k_max 的选取必须结合具体问题的频率内容来确定。