Frequency-domain MLPs

1.introduction

一般来说,模型越复杂,其预测结果的鲁棒性对可用数据集的大小要求就越高。

MLP模型,结构简单,参数量少。可以在可用数据量较少的情况下,捕捉序列的趋势。

例如,N-BEATS, LightTS, DLinear

Frequency-domain MLPs 

基于mlp的预测方法,现有问题:

1.点式映射:模型学习时过度关注细节,缺乏整体理解。

2.信息瓶颈:瓶颈设置过紧,导致模型失去对有用信息的捕捉,导致欠拟合;太松,导致过度关注冗余信息,导致过拟合。

mlp学习模型的特点:

  1. 全局视图:频域信息能够使mlp拥有信号的完整视图,更容易学习到全局依赖关系;
  2. 能量压缩:频域mlp集中在频率成分的较小关键部分,信号能量紧凑。

2.related work

时域预测方法:arma,var, arima

基于rnn:deepAR, LSTNet

基于cnn:TCN, SCINet

可以学习时域中的依赖性。

基于GNN:TAMP-S2GCNets, AGCRN, MTGNN, GraphWaveNet

建模时域变量之间的序列依赖关系

基于transformer:informer和reformer

对时域远程依赖建模能力的关注机制

基于MLP:

N-BEATS利用堆叠的MLP层和双残差学习来处理数据以迭代地预测未来。

DEPTS医用FFT来提取周期和MLP实现单变量预测的周期性依赖性。

LightTS使用轻量级面向采样的MLP结构来降低复杂性和计算时间。

N-HiTS 多速率输入采样和分层插值与MLP结合

LTSF-Linear :单层线性模型

3.FreTS

提出:FreTS

  1. 时域信号转换为频域复数信号;
  2. 频域学习,mlp学习频率分量的实部和虚部。

问题定义:

结构:

域转换:

使用傅里叶变化将时间序列信号分解为其组成频率。

有利于识别出数据的周期性或趋势性,有利于预测。

Domain Conversion:

可以缩写为:

逆转:

Domain Inversion:

频率通道学习器:

捕捉不同变量之间的相关性。L时间戳之间的权重共享。

DomainConversion(chan) and DomainInversion(chan) 都是沿着通道维度进行操作。

??

频域时间学习器:

学习频域中的时间模式;在每个通道上进行频域MLP构建,N个通道共享权重。

Frequency-domain MLPs

输入是复数,输出也是复数

频域MLP对频域的操作,可以表示为对时域的全局卷积。

4.实验:

十三个现实世界的benchmark

短期预测的baselines:

VAR, SFM, LSTNet, TCN, GraphWaveNet, DeepGLO, StemGNN, MTGNN, AGCRN, TAMP-S2GCNets, DCRNN, STGCN,

长期预测的baselines:

Informer, Autoformer, Reformer, FEDformer, LSTF——Linear, PatchTST

MSE为loss

MAE和RMSR 为结果指标

短期预测设置:

输入12,输出12

长期预测设置:

输入:48

输出:{48,96,192,336}

消融实验,得到结论:

频率学习器在短期预测中作用更明显;

时间学习器在长期预测中更重要。

FreMLP结合当时SOTA-MLP(DLinear和NLinear)性能都有明显提升。

5.结论

通过全局视图和能量压缩有效捕捉时间序列的基本模式。

基于频率MLP设计了FreTS架构,用于时间预测。

FreTS: Frequency-domain MLPs are More Effective Learners in Time Series Forecasting 论文详解-CSDN博客

  • 23
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
这段代码是一个深度学习模型中的一部分,主要实现了点云目标检测中的Region Proposal Network(RPN)模块。下面我们逐句解释其含义和作用。 ``` for k in range(cfg.RPN.SA_CONFIG.NPOINTS.len()): ``` 这行代码定义了一个循环,其中`k`为循环变量,其范围是`cfg.RPN.SA_CONFIG.NPOINTS`的长度。 ``` mlps = cfg.RPN.SA_CONFIG.MLPS[k].copy() ``` 这行代码将`cfg.RPN.SA_CONFIG.MLPS`中第`k`个元素的值赋给`mlps`,并使用`copy()`方法复制一份。 ``` channel_out = 0 for idx in range(mlps.len()): mlps[idx] = [channel_in] + mlps[idx] channel_out += mlps[idx][-1] mlps.append(channel_out) ``` 这段代码使用`channel_in`作为第一维,并将`mlps`中的每个元素添加到`channel_in`的后面,然后将每个元素的最后一维相加,得到`channel_out`,最后将`channel_out`添加到`mlps`中。 ``` self.SA_modules.append( nn.Sequential( PointnetSAModuleMSG( npoint=cfg.RPN.SA_CONFIG.NPOINTS[k], radii=cfg.RPN.SA_CONFIG.RADIUS[k], nsamples=cfg.RPN.SA_CONFIG.NSAMPLE[k], mlps=mlps, use_xyz=use_xyz, bn=cfg.RPN.USE_BN ), SelfAttention(channel_out) ) ) ``` 这段代码构建了一个`nn.Sequential`模块,并将其添加到`self.SA_modules`列表中。其中,`PointnetSAModuleMSG`是一个点云处理模块,用于从输入点云中提取特征,包括使用多尺度卷积核、采样、聚合等操作;`SelfAttention`是一个自注意力机制模块,用于对特征进行加权平均池化操作,提高特征的表达能力。 ``` skip_channel_list.append(channel_out) channel_in = channel_out ``` 这两行代码将`channel_out`添加到`skip_channel_list`列表中,并将`channel_out`的值赋给`channel_in`,用于下一次循环时作为`mlps`的第一维。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值