1. 项目概述与核心价值
最近在折腾时间序列插补和偏微分方程(PDE)数值求解的项目,这两个领域看似不相关,但背后都绕不开一个核心问题:如何用一个模型高效、准确地逼近一个我们只知道部分信息或复杂规律的函数。传统深度神经网络(DNN)虽然万能,但动辄百万参数,训练起来像在迷宫里找路,效率低且可解释性差。而傅里叶级数告诉我们,很多函数都能用一系列正弦余弦函数的加权和来表示,这给了我灵感:能不能直接让神经网络去学习这些频率分量的系数?
这就是频率学习模型(Frequency Learning Model, FLM)的核心思路。它不是一个黑箱,而是一个结构清晰、参数高效的“白盒”架构。简单说,FLM把目标函数拆解成不同频率的余弦波组合,每个子网络只负责学习一个特定频率分量的振幅和相位。这种基于频谱的表示方法,对于电力负荷预测、温度序列这种自带强周期性的数据,或者热传导、流体运动这类具有光滑解空间的PDE,简直是“专业对口”。
我拿它试了试水,一个是经典的ETT电力变压器温度数据集的插补任务,另一个是求解热方程、泊松方程和Burgers方程。结果有点意思:在时间序列插补上,FLM用少得多的参数,取得了和那些复杂时序模型(如SAITS、Autoformer)相近甚至更具竞争力的效果;在PDE求解上,它不仅在精度上不输SIREN这类专门为隐式神经表示设计的模型,而且在训练效率和稳定性上还常常有惊喜。这篇文章,我就来拆解一下FLM是怎么工作的,分享我在调参和实验中的实操细节,以及如何避开一些常见的“坑”。
2. FLM核心原理:从傅里叶思想到可学习架构
要理解FLM,我们得先回到它的数学根基。对于一个多元函数,我们可以尝试用傅里叶级数来逼近。FLM的聪明之处在于,它没有直接去拟合原始的、可能耦合在一起的频率系数,而是采用了一种更易于神经网络学习和优化的参数化形式。
2.1 模型架构与数学表达
FLM的核心输出可以表示为一系列子网络输出的和。对于第n个子网络,其输出H_n被构造成一个相移余弦函数的形式。以双输入(x1, x2)的情况为例,其表达式为:
H_n = A1 * cos(n1*x1 + n2*x2 - φ1) + A2 * cos(n1*x1 - n2*x2 - φ2)
这里的A1,A2,φ1,φ2就是我们需要学习的参数,分别代表两个不同方向频率组合的振幅和相位。n1和n2是预先设定的频率索引(通常是整数),决定了这个子网络关注哪个频率分量。
你可能会问,这看起来和标准的可分离系数傅里叶级数a*cos(n1x1)cos(n2x2) + b*cos(n1x1)sin(n2x2) + ...不太一样。实际上,通过三角恒等变换,这两种形式是等价的。附录A中的推导清晰地展示了如何将相移参数(A, φ)映射到可分离系数(a1, a2, a3, a4)。这个推导的关键在于,相移形式A*cos(ω - φ)在优化上更具优势。因为它将振幅和相位解耦,梯度流更直接,避免了标准形式中系数可能存在的强耦合导致的训练不稳定。
注意:选择相移余弦形式而非标准正弦余弦基,是FLM设计的一个精妙之处。在反向传播中,对
A和φ求导比直接优化可能高度相关的四个系数a1-a4更稳定,更容易收敛到有意义的频率表示上。
2.2 为何FLM在特定任务上表现突出?
- 参数效率与归纳偏置:传统全连接网络需要大量神经元来隐式地学习频率特征。FLM则显式地将频率结构嵌入模型,每个子网络只负责一个(或一组)频率。这意味着要表达一个由少数主导频率构成的函数(如具有日周期、年周期的温度序列),FLM只需要很少的子网络(即很少的参数)就能达到很好的效果。这本质上是一种强大的归纳偏置,让模型的学习目标更明确。
- 频谱稀疏先验:许多物理过程和真实世界的时间序列,其能量主要集中在少数几个频率上(即频谱是稀疏的)。FLM的结构天然鼓励这种稀疏表示,因为增加一个子网络就相当于在频谱中激活一个额外的频率分量。模型可以通过调整振幅
A的大小来“开关”某个频率的重要性。 - 优化友好性:基于正弦余弦的激活函数具有平滑、有界的导数,这有助于缓解深度网络中的梯度消失或爆炸问题。FLM的每个“神经元”本身就是周期函数,对于学习周期性模式,其梯度信号比ReLU等非周期激活函数更直接、更丰富。
- 对PDE求解的适应性:许多PDE的解在傅里叶域中具有简洁的表达。FLM的频谱表示方式与谱方法(Spectral Method)的思想一脉相承,使其在求解线性PDE(如热方程、泊松方程)时具有天然优势,甚至对某些非线性PDE(如Burgers方程)也能提供良好的初值猜测或近似解。
3. 实战应用一:时间序列插补
时间序列插补,就是根据已知的、不完整的数据点,去推测缺失位置的值。ETT数据集记录了电力变压器的油温,具有明显的日周期和年周期,还夹杂着一些随机波动,是检验模型频率捕捉能力的绝佳试金石。
3.1 实验设置与数据预处理
我的实验设置基本复现了文献中的标准流程,确保结果可比:
- 数据:使用ETTh1子集(每小时采样),只取油温(OT)这一单变量序列。
- 预处理:
- 标准化:使用StandardScaler(零均值,单位方差)处理数据,这是稳定神经网络训练的常规操作。
- 时间编码:将时间索引
t线性映射到[-π, π]区间。这一步至关重要!它使得时间的周期性(如24小时、8760小时)与三角函数的自然周期2π对齐,让FLM的频率参数n具有了直接的物理意义(例如,n=1对应整个时间域的基频)。
- 数据划分:按时间顺序划分,60%训练,20%验证,20%测试。必须按时间顺序,避免未来信息泄露。
- 缺失模拟:在训练和测试集上,随机抹去一定比例的数据点,模拟“随机缺失”场景。我测试了10%和50%两种缺失率,后者对模型鲁棒性是极大考验。
- 训练目标:模型仅在未被掩码的、观测到的数据点上计算均方误差(MSE)作为损失。模型的任务是学习整个序列的连续函数,从而自然地对缺失处进行插值。
3.2 FLM配置与训练技巧
对于这个单变量时间序列插补任务,我使用了一个单输入FLM。输入是归一化后的时间坐标t,输出是预测的温度值。
- 网络结构:隐藏层大小(即子网络数量
N)设为8。这个选择不是随意的,经过初步实验,N=8在表达能力和防止过拟合之间取得了很好的平衡,足以捕捉ETT数据中的主要周期(日、年)及其谐波。 - 优化器:使用Adam,学习率(LR)设为
1e-4。Adam的自适应学习率特性对FLM这种参数尺度可能差异较大的模型很友好。 - 训练:最大训练轮数(epoch)为10,000,并基于验证集损失实施早停(Early Stopping)。
3.3 结果分析与对比
下表汇总了FLM在测试集上的平均绝对误差(MAE)表现,并与当前主流的一些模型进行对比(数据参考自相关文献):
| 模型 | 10% 缺失率 MAE (均值±标准差) | 50% 缺失率 MAE (均值±标准差) | 参数量级 | 架构复杂度 |
|---|---|---|---|---|
| FLM (本实验) | 0.57 ± 0.15 | 0.66 ± 0.18 | ~48 | 极简���单输入FLM |
| MRNN* | 0.79 ± 0.02 | - | 通常 > 10K | 基于RNN,较复杂 |
| SAITS** | 0.14 ± 0.01 | 0.22 ± 0.01 | 通常 > 100K | 基于Transformer,复杂 |
| Autoformer* | - | 0.98 ± 0.01 | 通常 > 100K | 基于Transformer,复杂 |
| 均值插补 | 0.74 | 0.74 | - | 非模型方法 |
| 中位数插补 | 0.71 | 0.71 | - | 非模型方法 |
(*代表基准模型中表现较差的,**代表表现最好的)
解读与洞见:
- 竞争力:FLM在10%和50%缺失率下的MAE分别为0.57和0.66。虽然不及最先进的SAITS模型,但显著优于MRNN和Autoformer等模型,甚至比简单的均值/中位数插补好很多。考虑到FLM仅有约48个参数(
N=8,每个子网络输出2个振幅和2个相位,共6N=48个可学习参数),这个成绩非常亮眼。 - 效率与简洁性:SAITS等SOTA模型往往依赖复杂的自注意力机制和深度结构,参数动辄数十万。FLM用极简的架构和极少的参数达到了有竞争力的性能,这意味着更快的训练速度、更低的内存占用和更小的部署开销。
- 稳健性:当缺失率从10%飙升到50%时,FLM的性能下降(MAE从0.57到0.66)相对温和,说明其学习的连续函数表示对数据缺失不敏感,具有较强的外推和插值鲁棒性。
- 潜力:这仅仅是单变量、单输入FLM的初步结果。我们可以很容易地扩展为多变量FLM,同时处理OT、负载等多个特征,并可能通过引入更精细的频率选择机制来进一步提升性能。
实操心得:在时间序列任务中,将时间索引映射到
[-π, π]是FLM成功的关键预处理步骤。这相当于给模型提供了一个“标准周期尺”,让频率参数n的学习更有意义。如果直接输入原始时间戳,模型需要花费大量精力去学习周期的尺度,效果会大打折扣。
4. 实战应用二:偏微分方程求解
用神经网络求解PDE是科学计算机器学习的一个热点。其思想是将PDE的解表示为一个神经网络,通过最小化PDE残差(物理信息损失)和边界/初始条件损失来训练网络。FLM的频谱特性使其特别适合这类问题。
4.1 实验设计与对比基准
我选取了三个经典的PDE作为测试床:
- 热方程(Heat Equation):线性抛物型PDE,解通常光滑。
- 泊松方程(Poisson Equation):线性椭圆型PDE。
- Burgers方程(Burgers‘ Equation):非线性对流扩散方程,会产生激波,难度较大。
为了全面评估FLM,我将其与几种代表性的神经网络架构进行对比:
- SIREN:使用正弦函数作为激活函数的网络,在隐式神经表示领域表现出色。我测试了其不同变体(SIREN-1,2,3)。
- Vanilla ReLU/Tanh/Leaky ReLU:使用传统激活函数的全连接网络,作为基线。
对于每个PDE和每个模型,我都进行了大规模的网格搜索来寻找最优超参数。
4.2 超参数优化策略详解
超参数调优是让模型发挥性能的关键。我设计了一套系统性的方法:
搜索空间:
- 模型容量:对于FLM,搜索子网络数量
N ∈ {4, 16, 25, 49, 64}。对于其他网络,搜索隐藏层神经元数N_hidden,其范围经过设计,使得总参数量与FLM的{24, 96, 150, 294, 384}大致对齐(参见表4)。 - 优化器参数:学习率
LR ∈ {0.001, 0.005, 0.01};Adam优化器的动量参数Betas ∈ {(0.9, 0.999), (0.95, 0.97), (0.97, 0.95)}。 - 总计对每个PDE-模型组合测试了
5 * 3 * 3 = 45种配置。
- 模型容量:对于FLM,搜索子网络数量
训练与评估:
- 每个配置独立运行10次(不同随机种子),取平均。
- 训练最大epoch为10,000,损失容忍度为
1e-4(即损失低于此值可能提前停止)。 - 评估指标:均方误差(MSE)、平均绝对误差(MAE)、最大绝对误差(Max Error)、收敛所需epoch数。
最优配置选择(统计检验流程): 这是确保结果可靠性的核心。我采用了一个分层统计检验流程:
- 第一步:正态性检验。对每个指标(按MSE、MAE、Max Error、Epochs的顺序),先用Shapiro-Wilk检验判断所有45组结果是否服从正态分布。
- 第二步:差异性检验与分组。
- 如果所有组都正态(p>0.05),使用单因素方差分析(ANOVA),然后进行Tukey HSD事后检验,找出所有与当前指标最优组(均值最低)无显著差异(p>0.05)的配置。
- 如果任何一组非正态,使用非参数的Friedman检验,然后进行Nemenyi事后检验,找出所有与当前指标最优组(平均秩次最低)无显著差异的配置。
- 第三步:递进筛选。用MSE指标筛选出的“优胜组”进入MAE指标的筛选,再用MAE筛选后的组进入Max Error筛选,最后用Epochs筛选。这保证了最终选出的配置在精度和效率上都是综合最优的。
- 第四步:打破平局。如果经过所有指标筛选后仍有多个配置,选择网络规模最小的那个,遵循奥卡姆剃刀原则。
4.3 核心结果与模型对比分析
经过上述严苛的筛选,我们得到了各模型在三个PDE上的最佳表现。为了更直观,我将热方程和泊松方程的结果精华总结如下:
表:FLM与对比模型在PDE求解上的最佳性能对比(基于筛选后的最优配置)
| PDE | 模型 | 最优配置 | MSE (1e-6) | MAE (1e-3) | Max Error (1e-2) | Epochs |
|---|---|---|---|---|---|---|
| 热方程 | FLM | N=25, LR=0.005, Betas=(0.9,0.999) | 1.05 | 0.789 | 0.718 | 860 |
| SIREN-2 | N_hidden=8, LR=0.001, Betas=(0.9,0.999) | 1.90 | 0.979 | 0.873 | 7476 | |
| Vanilla Tanh | N_hidden=7, LR=0.01, Betas=(0.9,0.999) | 4.84 | 1.58 | 1.41 | 1565 | |
| Vanilla ReLU | (任何配置) | ~ 70000 | ~ 210 | ~ 650 | 未收敛 | |
| 泊松方程 | FLM | N=16, LR=0.005, Betas=(0.9,0.999) | 4.53 | 1.55 | 0.967 | 5865 |
| SIREN-1 | N_hidden=37, LR=0.005, Betas=(0.97,0.95) | 2.40 | 1.23 | 0.501 | 10000 | |
| Vanilla Tanh | N_hidden=7, LR=0.005, Betas=(0.97,0.95) | 558 | 15.9 | 10.0 | 10000 | |
| Vanilla ReLU | (任何配置) | ~ 245000 | ~ 397 | ~ 100 | 10000 |
关键发现:
- 精度与效率的平衡:在热方程上,FLM以最少的训练epoch(860轮)达到了最低的MSE和MAE,其Max Error也表现最佳。SIREN-2虽然精度接近,但需要近9倍的训练时间(7476轮)。传统Tanh网络误差大了数倍,而ReLU网络根本未能有效收敛。
- 对问题类型的适应性:对于泊松方程,SIREN-1在Max Error上略胜一筹,但FLM在MSE和MAE上更优,且训练轮数少了近一半。这显示了FLM在椭圆型方程上的竞争力。对于非线性的Burgers方程(结果见后文详述),所有模型误差都较大,但FLM和SIREN、Tanh网络处于同一量级,远好于ReLU。
- 超参数敏感性:FLM对学习率和优化器动量参数
Betas表现出一定的敏感性。例如,在热方程上,(0.9, 0.999)这组经典的Adam参数通常表现更稳定。子网络数量N是FLM最重要的超参数。如图9所示,随着N增加,MSE通常先快速下降后趋于平缓甚至略有回升,存在一个“甜蜜点”。对于热方程和泊松方程,N=16或25往往足够;对于更复杂的Burgers方程,可能需要更大的N(如49或64)。 - 与传统网络的对比:Vanilla ReLU网络在求解PDE时遭遇了严重的失败,误差居高不下。这印证了ReLU这类分段线性函数在表达光滑函数(PDE解的特性)时的固有局限性。Tanh网络稍好,但依然远不如FLM和SIREN。这凸显了为任务选择合适的激活函数(或模型架构)所引入的归纳偏置是多么重要。
4.4 Burgers方程求解的深入讨论
Burgers方程因其非线性项会产生陡峭的梯度甚至激波,是所有测试中最难的一个。所有模型的误差都上升了一个数量级。FLM(N=64,LR=0.001,Betas=(0.97,0.95))取得了约6.58e-3的MSE,与表现最好的SIREN-3(7.40e-3)和Vanilla Tanh(4.42e-3)在同一水平。虽然Tanh网络在MSE上略好,但FLM和SIREN在解的整体形状捕捉上更优。
踩坑记录:在尝试求解Burgers方程时,最初使用较小的
N(如16)完全无法捕捉激波附近的快速变化,解显得过于平滑。逐步增加N到64后,近似能力显著提升。同时,对于这类非线性问题,降低学习率(如0.001甚至0.0005)和使用更保守的Betas(如(0.97,0.95))有助于稳定训练,避免在激波附近产生数值振荡。
5. 关键实现细节与调参指南
基于大量实验,我总结出以下让FLM发挥最佳性能的实操要点:
5.1 输入归一化与频率缩放
这是FLM成功的第一步,也是最重要的一步。FLM内部的余弦函数cos(ω·x - φ)期望输入x处于一个合理的幅度范围内。
- 对于时间序列:将时间索引线性映射到
[-π, π]。如果你的数据有已知周期T,也可以映射到[0, 2π]。关键是让一个完整周期对应2π。 - 对于空间域PDE求解:如果求解域是
[a, b],同样应将其线性映射到[-π, π]或[0, 2π]。例如,对于定义在[0, L]上的问题,可以使用变换x' = 2π * x / L。 - 对于多维度输入:每个输入维度应独立进行归一化。
5.2 子网络数量N的选择
N控制了模型的容量和频谱分辨率。
- 起始点:可以从一个较小的值开始,如
N=8或16。 - 观察训练损失:如果训练损失很快收敛到一个平台且值较高,可能是
N太小,模型欠拟合。逐步增加N。 - 观察验证损失:如果
N过大,验证损失可能在训练后期开始上升,这是过拟合的迹象。对于PDE求解,过拟合表现为在训练点(如配点)上残差极小,但在未采样区域误差很大。 - 经验法则:对于主要由少数基频主导的问题(如平滑PDE解、强周期信号),
N不需要很大。对于频谱丰富或包含不连续点的问题(如Burgers方程激波),需要更大的N。
5.3 优化器配置建议
- 学习率(LR):FLM通常对学习率比较敏感。建议从
1e-4到1e-3之间尝试。对于简单问题,1e-3可能收敛更快;对于复杂或非线性强的问题,1e-4更稳妥。我在实验中发现,0.005是一个在多种问题上表现稳健的折中选择。 - Adam Betas参数:默认的
(0.9, 0.999)在大多数情况下工作良好。但在PDE求解中,我有时发现略微调整动量项(如(0.95, 0.97)或(0.97, 0.95))能带来轻微的精度提升或更快的初始收敛。这可能与损失曲面的特性有关。 - 权重初始化:FLM的振幅
A和相位φ参数需要合适的初始化。振幅A可以用一个很小的正数(如0.01)初始化,相位φ可以在[0, 2π]内随机初始化。
5.4 频率索引n的设置
在基础FLM中,频率索引n通常是预设的整数向量。例如,对于二维输入(x1, x2),n可以取[(1,0), (0,1), (1,1), (1,-1), (2,0), ...]。一种简单的策略是取所有满足||n||_1 <= N_max或||n||_2 <= N_max的整数向量。更高级的策略可以尝试让n也成为可学习的参数,但这会引入非凸优化问题,增加训练难度。
6. 常见问题与故障排查
在实际使用FLM的过程中,你可能会遇到以下问题:
训练损失震荡或不收敛
- 可能原因:学习率过高。解决方案:逐步降低学习率(如从
1e-3降到1e-4或5e-5)。 - 可能原因:输入数据未正确归一化。解决方案:检查并确保所有输入特征都已映射到
[-π, π]区间附近。 - 可能原因:
N设置过大,导致优化困难。解决方案:尝试减小N,或使用更强的正则化(如权重衰减)。
- 可能原因:学习率过高。解决方案:逐步降低学习率(如从
模型欠拟合(训练和验证误差都高)
- 可能原因:
N太小,模型容量不足。解决方案:增加子网络数量N。 - 可能原因:频率索引
n的设置未能覆盖目标函数的主要频率。解决方案:检查预设的频率范围,确保其能覆盖你预期的主要周期/频率。对于未知的问题,可以尝试一个较宽的频率范围。
- 可能原因:
模型过拟合(训练误差低,验证/测试误差高)
- 可能原因:
N太大。解决方案:减小N,这是最直接的方法。 - 可能原因:训练数据不足或噪声太大。解决方案:增加训练数据,或对数据添加噪声进行增强。对于PDE求解,可以增加配点(Collocation Points)的数量。
- 可能原因:缺乏正则化。解决方案:在损失函数中加入对振幅
A的L1或L2正则化,鼓励稀疏的频谱表示。
- 可能原因:
在PDE求解中,解出现“锯齿”或高频振荡
- 可能原因:这是频谱方法中常见的吉布斯现象(Gibbs Phenomenon),尤其在解不连续或梯度突变处附近。解决方案:可以尝试在损失函数中加入对解的二阶导数(或更高阶)的平滑性正则项(如Tikhonov正则化)。或者,使用一种称为“指数衰减”的频率权重,给高频分量施加惩罚。
FLM相比SIREN的优势不明显
- 场景分析:SIREN使用正弦激活函数,本身也具有频率学习能力。FLM的显式频谱分解在参数效率和可解释性上占优。如果你的目标是一个极其紧凑的模型,或者你需要分析解中哪些频率成分占主导,FLM是更好的选择。如果追求极致的逼近精度且不关心参数量,SIREN可能通过其更密集的网络结构在某些问题上略胜一筹。
- 行动建议:对于新问题,可以两者都尝试。FLM训练通常更快(参数少),可以快速进行原型验证和超参数搜索。
FLM为我们提供了一种连接经典数值分析(谱方法)与现代深度学习的新思路。它用极简的架构证明,在许多科学计算和时序分析任务中,我们不一定需要堆叠层数和参数。通过显式地建模频率,我们获得了更高效、更可解释、有时甚至更强大的模型。当然,它并非万能钥匙,对于频谱极其密集或非平稳的信号,可能需要更复杂的机制。但作为一个工具,FLM无疑为我们的工具箱增添了一件锋利而优雅的武器。在实际项目中,尤其是资源受限的边缘计算场景或需要快速迭代的原型阶段,我会优先考虑FLM作为基线模型之一。