【时间序列预测】Nbeats系列模型介绍

今天给大家介绍由图灵奖得主Bengio创建的独角兽公司ElementAI发表的用于时间序列预测的Nbeats系列模型。相比于RNN、transformer、CNN这三个主流时间预测模型框架,Nbeats开创了一个新的backbone,即仅使用全连接网络实现时间序列预测。

N-BEATS:  Neural basis expansion analysis for interpretable time series forecasting
  • 文献地址:https://arxiv.org/pdf/1905.10437.pdf

  • 代码地址:https://github.com/jdb78/pytorch-forecasting/blob/master/examples/nbeats.py

  • 主要思想

N-BEATS模型解决的是一元时间序列预测任务,即给定长度为T的历史序列,预测其未来H个窗口内的取值。文章作者声称N-BEATS模型框架遵循三个基本原则,首先,模型框架简单和通用的同时具有表达能力(深度)。其次,模型架构不依赖于特定的时间序列特征工程或输入缩放,从而探索深度学习模型结构对于时间序列预测的潜力。最后,模型架构是具有解释性的。话不多说,下面具体介绍N-BEATS模型结构。

ffd9486987058c15d78efc2a82236164.png

(从右➡️左为N-BEATS的基础模块)

N-BEATS模型由多个stack模块组成,每个stack又由多个block串联而成,其中第一个block的输入为原始输入序列,输出为两部分,一是对于未来窗口H的预测值,二是对于block输入的重构值。其余block的输入则皆为上一个block输入减去上一个block输出重构值的残差。一方面,下个一个block作为之前block的补充,不断地去拟合之前block没有拟合到的残差信息,另一方面,可将此过程看作是对时间序列信息的分解,不同stack中的block拟合时间序列某一部分的信息,最终Nbeats的输出为各个stack输出的加和。

输出为两部分,一是对于未来窗口H的预测值,二是对于block输入的重构值。对于每一个block,包含针对于和的两路分支,每一路分支均可看作两阶段的映射过程,第一个阶段的映射将输入序列映射为expansion coefficient (或),包含4个FC层(由全连接层与RELU激活函数构成)和一个简单的线性层,如下:

7b7bb86cd4deabb301dc323e785c95fc.png

expansion coefficient 可以理解为是block剔除了输入中的冗余信息后,保留与预测目标或密切相关信息的低维向量。第二个阶段的映射则是将上一个阶段得到的expansion coefficient经过映射函数 和 ,获得和, 示例如下

7a5e92f5e66670792bfb21bc381c180d.png

映射函数 和 可以设定为如上通用的形式,具有可学习系数,也可以设置为特定的函数形式,强制让某个stack内的block学习时间序列的特定属性,以增强N-BEATS模型的可解释性。例如,可以将设置为如下形式,让block分别学习时间序列的趋势信息、季节信息。

4983acf28216292ecfc03437dc88e4c8.png
NBEATSx :Neural basis expansion analysis with exogenous variables: Forecasting electricity prices with NBEATSx
  • 文献地址:https://arxiv.org/pdf/2104.05522.pdf

  • 代码地址:https://github.com/cchallu/nbeatsx

  • 主要思想

NBEATSx对N-BEATS进行拓展,进行了两方面的改进,1)除时间序列以外,允许外部协变量的输入,从而提取有用信息以及数据中的时间依赖信息。2)可解释的时间序列信号分解, 通过非线性转换灵活拟合时间序列中的多种季节性,以及节假日等因素与外部协变量交互。

9f5fdedeafe7ae4c5034cbeb9be29f4e.png

与N-BEATS相同,NBEATSx也由stack和block堆叠而成,主要的差别在block部分。block的输入除历史序列外,还包含了外部协变量,通过全连接层将二者转变为隐含状态,再通过两个线性层将隐含状态转变为expansion coefficient  和。此时,expansion coefficient  和中保留了外部协变量与历史序列中的信息。

4591d9db251a5da4242c90e820d1ba3d.png

获取到expansion coefficient 后,接下来就是进行映射获取对过去值与未来值的预测 和。为了提高模型可解释性,不同的stack可分别采用谐波函数、多项式趋势项及外部协变量,来分别拟合序列中与周期、趋势及外部信息相关的信息,如下:

0b796c77950756c2c31565dafe500b46.png

当然,NBEATSx也可采用通用映射函数,进一步提出了一种新的映射函数,即利用一个TCN(时间序列卷积模块)对外部特征进行编码,将该编码作为生成预测结果的映射系数,从而捕捉协变量中的长期依赖关系。

903b1bbd13398ce25032c7918d3de2cb.png
FC-GAGA: Fully Connected Gated Graph Architecture for Spatio-Temporal Traffic Forecasting
  • 文献地址:https://arxiv.org/pdf/2007.15531.pdf

  • 代码地址:https://github.com/boreshkinai/fc-gaga

  • 主要思想

N-BEATS主要面向的是一元时间序列预测问题,FC-GAGA将N-BEATS模型与graph gate mechanism进行结合,建模多元时间序列间的相互影响关系,解决多变量时间序列预测问题,与NBEATSx相似,FC-GAGA也允许外部协变量的输入。

1b1a19295afde14f06011c7a1798f45e.png

多变量时间序列可用图进行描述,每个序列可视为图中的一个节点,由未知的随机过程生成,节点间的连边则可描述序列间的影响关系,FC-GAGA的目标是预测各个节点未来H窗口内的取值,FC-GAGA的基础模块如上图所示,在Nbeats的stack模块中新增了三个步骤,分别是Graph edge weights、Time gate block,Graph gate block。

Graph edge weights:由于各变量间的关系事先未知,首先需要获取变量间连接图。将各个节点的特征向量进行编码,获取d维的节点embedding,, 通过计算两两节点embedding间的内积,可获得表示两两节点关系的邻接矩阵W:

82ad9b6ed54a8c0f87972f6681b5c948.png

ε是一个缩放系数。

Time gate block:此模块采用的是如图上紫色模块所示的multiplicative gate model。模块输入对时间相关协变量(例如星期几、时间)与历史序列进行了拼接,以拟合各个节点不同的时间相关模式。这个模块旨在消除各个节点中特有的multiplicative seasonality,并在输出时将其与各个节点预测值相乘,以恢复各个节点的模式。因为输入与输出序列对应的时间通常时不同的,通过这种方法,充分考虑了时间的影响,可以更好地建模时间相关的特征,同时考虑节点之间可能的季节性差异,并增强了模型的灵活性。

Graph gate block:此模块根据节点间连接关系的大小关系不同节点间的信息。对于输入的历史数据矩阵, 首先计算各个节点的最大值,然后计划如下运算:

bc93c5cd3bbd5a1c127c693fab0783e2.png

获得矩阵,矩阵的每一行对应一个节点。上述运算实现了节点i与节点j历史w各时刻值的交互,通过relu函数和,利用门控机制剔除了两两不关联节点之间的影响,的大小影响门控机制。不过这里为什么需要减去和除去节点最大值,作者并没有做过多的解释。

最终,矩阵作为更新后的序列值再输入到Nbeats的block中,进行历史值与未来值的预测,对于预测出来的未来值再与time  gate block的输出相乘,得到最终本层的输出值,通过多层结果累加得到最终的预测值。

总结

Nbeats系列模型以全联接层为backbone实现了一元时间序列预测和多元时间序列的时空预测,其核心思路是利用全连接层对时间序列进行分解,通过不同的函数形式建模时间序列的周期项、趋势项等,提升了模型的可解释性,模型结构也比较简单。

推荐阅读:

我的2022届互联网校招分享

我的2021总结

浅谈算法岗和开发岗的区别

互联网校招研发薪资汇总

2022届互联网求职现状,金9银10快变成铜9铁10!!

公众号:AI蜗牛车

保持谦逊、保持自律、保持进步

2ff288806f37a75484e764d290c938b0.jpeg

发送【蜗牛】获取一份《手把手AI项目》(AI蜗牛车著)

发送【1222】获取一份不错的leetcode刷题笔记

发送【AI四大名著】获取四本经典AI电子书

<think>嗯,用户想要借鉴WaveNet模型来改进NBEATS模型。首先,我需要回忆一下这两个模型的结构和特点。 WaveNet是谷歌提出的生成原始音频的模型,主要使用了扩张因果卷积(Dilated Causal Convolutions)来扩大感受野,同时捕捉长短期依赖。另外,它还有门控激活单元,残差连接和跳跃连接等技术,这些设计让WaveNet在处理时序数据上表现出色。 而NBEATS是一个用于时间序列预测模型,基于前馈神经网络,通过堆叠多个块(block)进行多尺度分析。每个块包含可学习的基函数,进行趋势和季节性分解,还有双重残差结构。优点是可解释性强,参数效率高,但可能在捕捉长期依赖和复杂模式上有局限。 接下来,我需要思考如何将WaveNet的优势融入NBEATS。可能的改进点包括: 1. **扩张因果卷积**:替换NBEATS中的全连接层,或者在块内部加入这样的卷积层,增强局部特征提取和长期依赖捕捉。不过需要注意保持NBEATS的多尺度特性,可能需要调整扩张率。 2. **门控激活机制**:WaveNet中的门控单元(如sigmoid和tanh的组合)可以引入到NBEATS的隐藏层,增强非线性表达能力。可能需要调整激活函数的位置,比如在每个全连接层后加入门控结构。 3. **残差连接优化**:WaveNet的残差和跳跃连接有助于梯度流动和特征重用。NBEATS已有双重残差,但可以借鉴WaveNet的多层次跳跃连接,进一步提升信息传递效率。 4. **多尺度特征融合**:WaveNet通过不同扩张率的卷积捕捉多尺度特征,NBEATS本身也有多尺度设计,可以结合两者,比如在块内部使用不同扩张率的卷积层,增强时间模式的捕捉。 5. **自回归改进**:如果NBEATS用于概率预测,可以加入WaveNet的自回归结构,逐步生成预测值,提高多步预测的准确性。不过这可能增加计算量,需要权衡。 6. **条件输入机制**:WaveNet支持多条件输入,NBEATS也可以引入类似机制,在预测时加入外部变量,提升模型适应性。需要设计如何将外部信息融入块结构中。 在实现时需要注意的问题包括计算复杂度,扩张卷积可能增加参数量和训练时间。另外,保持NBEATS的可解释性,比如在加入新结构后,趋势和季节性分解是否仍然清晰。可能需要调整块的结构,或者设计新的模块来整合WaveNet元素。 可能的实验方向是逐步替换NBEATS的组件,比如先替换全连接层为扩张卷积,评估效果;然后加入门控激活,观察性能变化。同时,使用基准数据集进行测试,比较改进后的模型在长期预测和复杂模式上的表现。 还需要考虑是否会影响训练速度,以及模型的可扩展性。比如,如果引入自回归结构,是否适合大规模时间序列数据,或者是否需要更多的正则化来防止过拟合。 总结下来,改进的关键点是将WaveNet的时序处理能力与NBEATS的多尺度分解结合,同时保持模型的优点。可能需要多次迭代实验,调整结构,找到最佳的组合方式。</think>以下是对照WaveNet模型改进NBEATS模型的技术路径分析,采用分步说明: --- ### **一、模型特性对比** | 特性 | WaveNet | NBEATS | |---------------------|----------------------------------|---------------------------------| | **核心结构** | 扩张因果卷积堆叠 | 前馈网络块堆叠 | | **时序处理** | 空洞卷积捕获长程依赖 | 双重残差连接 | | **特征提取** | 门控激活单元 | 可学习基函数分解 | | **主要优势** | 高精度时序建模 | 强可解释性 | | **典型应用** | 音频生成 | 时间序列预测 | --- ### **二、可借鉴的改进方向** #### **1. 扩张因果卷积集成** $$\text{改进方案:}$$ $$H_t = \sum_{k=0}^{K-1} W_k \cdot X_{t-d\cdot k} + b$$ - 将NBEATS全连接层替换为扩张卷积层 - 设置扩张因子$d=2^n$实现指数级感受野扩展 - 保留残差连接结构保证梯度流动 **示例实现:** ```python class DilatedBlock(nn.Module): def __init__(self, dilation_rate): super().__init__() self.conv = nn.Conv1d(in_channels, out_channels, kernel_size=3, padding=dilation_rate, dilation=dilation_rate) self.gate = nn.Conv1d(in_channels, out_channels, kernel_size=3, padding=dilation_rate, dilation=dilation_rate) ``` #### **2. 门控激活机制融合** $$\text{门控单元公式:}$$ $$z = \tanh(W_{f} * x) \odot \sigma(W_{g} * x)$$ - 在NBEATS每个FC层后增加门控单元 - 通过sigmoid门控制信息流 - 增强非线性表达能力 **改进对比:** | 原结构 | 改进结构 | |------------------|---------------------------| | $y=ReLU(Wx+b)$ | $y=tanh(W_1x) \odot σ(W_2x)$ | #### **3. 多层次残差优化** $$\text{残差连接改进:}$$ $$O = F(x) + Proj(x) + Skip(x)$$ - 引入WaveNet的跳跃连接(Skip Connection) - 增加特征重用路径 - 设计不同时间尺度的残差分支 --- ### **三、改进架构示意图** ```mermaid graph TD A[输入序列] --> B[扩张卷积层 d=1] B --> C[门控激活单元] C --> D[扩张卷积层 d=2] D --> E[基函数分解层] E --> F[双重残差输出] C -->|跳跃连接| F D -->|跳跃连接| F ``` --- ### **四、实验验证建议** 1. **基准测试**:在ETT、M4等标准数据集对比预测误差 2. **消融实验**:单独测试各改进模块的效果 3. **长时序测试**:验证改进模型在1000+步预测中的表现 4. **可视化分析**:对比趋势/季节分量分解质量 --- ### **五、潜在挑战** 1. 计算复杂度增加约30-40%(需通过蒸馏压缩) 2. 扩张卷积可能引入边界效应(需改进padding策略) 3. 门控机制需要精细的初始化控制 实际改进时建议采用渐进式修改策略,优先在季节分量提取模块进行改造,保持趋势分量的可解释性优势。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值