PaddleTS的时序预测模型模块模块

现有的时间序列预测方法大致可以分为两类。第一类是经典的时间序列模型,如Box等人(2015年)、Ray(1990年)、Seeger等人(2017年)和Seeger、Salinas和Flunkert(2016年)所描述的模型,它们为时间序列预测提供了可靠的基础。第二类是基于深度学习技术的方法,主要采用RNN及其变体来开发编码器-解码器预测范式(Hochreiter和Schmidhuber,1997年;Li等人,2018年;Yu等人,2017年)。

PaddleTS简介

PaddleTS是基于飞桨深度学习框架PaddlePaddle开发的时序模型库。它提供了丰富的时序分析模型,包括预测、表征、异常检测和分类模型,适用于多种时序数据的分析和应用。

1. paddlets.models.forecasting - 时序预测模型模块

功能
  • 提供多种用于时序预测的模型。

  • 支持单变量和多变量时序预测。

  • 常用模型包括

    DeepAR

    Informer

    LSTNet(Long Short-term Time-series Network)

    MLP(Multilayer Perceptron)

    NBEATS

    NHiTS

    RNN

    SCINet(Sample Convolution Interaction Network)

    TCN(Temporal Convolution Net)

    TFT(Temporal Fusion Transformer)

    Transformer
    等。

当然,请参考以下各个时序模型的论文链接:

1. DeepAR (Deep Autoregressive Networks)

  • 论文链接: DeepAR: Probabilistic Forecasting with Autoregressive Recurrent Networks
    当涉及到时间序列预测时,DeepAR的目标是对未来的时间序列值进行预测,这是建立在其过去观测数据和已知的协变量基础上的。在这个过程中,DeepAR使用了一种称为自回归递归神经网络的模型架构来实现预测。这个模型被设计成能够从过去的数据中学习,并利用这些学习来预测未来的数据。

具体地说,DeepAR的模型将整个时间序列分为两个部分:条件范围和预测范围。在训练过程中,这两个范围都位于过去,以确保所有时间点的观测值都是已知的。但是在预测时,只有条件范围内的数据是已知的,而预测范围内的数据需要通过模型来预测。

DeepAR使用的模型是基于自回归原理的,意味着每个时间步的预测依赖于前一个时间步的预测值,并且是递归的,即网络在每个时间步使用前一步的输出作为下一步的输入。这种模型结构利用了长短期记忆(LSTM)单元,这些单元有助于捕捉长期的依赖关系,从而提高了模型的预测性能。

关于预测的具体操作,DeepAR使用了一种称为祖先采样的技术来获得模型的样本。这意味着DeepAR首先通过计算模型的初始状态来获得第一个时间步的预测值,然后逐步生成未来时间步的预测值。这些样本可以用来计算未来时间范围内各种感兴趣的量,比如分析其分布的分位数等。

2. Informer

Informer模型采用了编码器-解码器架构,并针对长序列时间序列预测问题进行了优化。为了提高预测能力,Informer模型引入了高效的注意力机制。

标准的注意力机制(Vaswani等人,2017年)基于三元组输入(查询、键和值)进行定义,执行缩放点积运算:[ A(Q,K,V) = \text{Softmax}(\frac{QK^T}{\sqrt{d_k}}) V ] 其中,Q、K和V分别是维度为 ( L Q × d k ) ( L_Q \times d_k ) (LQ×dk) ( L K × d k ) ( L_K \times d_k ) (LK×dk) ( L V × d v ) ( L_V \times d_v ) (LV×dv) 的矩阵, ( d k ) ( d_k ) (dk) 是输入维度。为进一步讨论注意力机制,Informer设 ( q i ) ( q_i ) (qi) ( k i ) ( k_i ) (ki) ( v i ) ( v_i ) (vi) 分别为 Q、K 和 V 的第 i 行。

Informer发现,标准的注意力机制在提高预测能力时存在一些缺点。例如,它需要进行 ( O ( L Q L K ) ) ( O(L_Q L_K) ) (O(LQLK)) 的点积运算和 ( O ( L K L Q ) ) ( O(L_K L_Q) ) (O(LKLQ)) 的内存使用,这在处理长序列时效率较低。此外,Informer还发现,注意力概率分布存在潜在的稀疏性。

为了克服这些缺点,Informer提出了一个称为ProbSparse的注意力机制。在这个机制中,每个键只关注前 u 个最不重要的查询。通过这种方式,Informer只需要为每个查询-键对计算 ( O ( ln ⁡ L Q ) ) ( O(\ln L_Q) ) (O(lnLQ)) 的点积,并且每层的内存使用保持为 ( O ( L K ln ⁡ L Q ) ) ( O(L_K \ln L_Q) ) (O(LKlnLQ))

为了高效地获取查询稀疏度测量,Informer提出了一种经验近似方法。在长尾分布下,Informer只需随机采样 U = L_K \ln L_Q 个点积对来计算 ( M ( q i , K ) ) ( M(q_i, K) ) (M(qi,K)),即填充其他对为零。然后,Informer从中选择稀疏的 Top-u。在实践中,查询和键的输入长度通常在自注意力计算中相等,即 ( L Q = L K = L ) ( L_Q = L_K = L ) (LQ=LK=L),因此ProbSparse自注意力的总时间复杂度和空间复杂度为 ( O ( L ln ⁡ L ) ) ( O(L \ln L) ) (O(LlnL))

编码器被设计用于提取长序列输入的稳健长程依赖关系。在输入表示之后,第 t 个序列输入 ( X t ) ( X_t ) (Xt) 被转换成一个矩阵 ( X t e n ∈ R L x × d model ) ( X_{t_{en}} \in \mathbb{R}^{L_x \times d_{\text{model}}} ) (XtenRLx×dmodel)。为了清晰起见,Informer在图3中给出了编码器的草图。

自注意力蒸馏作为ProbSparse自注意力机制的自然结果,编码器的特征图存在冗余的值V组合。Informer使用蒸馏操作来优先考虑具有主导特征的更优组合,并在下一层中生成一个聚焦的自注意力特征图。它通过设置Attention块中的 n-heads 权重矩阵(重叠的红色正方形)来急剧减少输入的时间维度。受到膨胀卷积(Yu、Koltun和Funkhouser,2017年;Gupta和Rush,2017年)的启发,Informer的“蒸馏”过程从第 j 层传递到第 (j+1) 层。

解码器通过一次前向过程生成长序列输出。Informer使用了标准的解码器结构(Vaswani等人,2017年),它由两个相同的multi-head注意力层的堆栈组成。生成性推理被用来减轻长预测中的速度下降。Informer通过以下向量作为解码器的输入:

[ X_{t_{token}} \in \mathbb{R}^{L_{\text{token}} \times d_{\text{model}}} ] 是起始标记,[ X_{t_0} \in \mathbb{R}^{L_y \times d_{\text{model}}} )$ 是目标序列的占位符(设置为0)。在ProbSparse自注意力计算中应用了遮蔽multi-head注意力,通过将遮蔽点积设置为0来防止每个位置关注后续位置,从而避免了自回归。一个全连接层获得最终输出,其输出大小 ( d y ) ( d_y ) (dy) 取决于Informer是否执行单变量预测或多变量预测。

生成性推理在NLP的“动态解码”(Devlin等人,2018年)中高效应用,Informer将其扩展为生成方式。Informer不选择特定的标志作为标记,而是从输入序列中采样一个长为 ( L token ) ( L_{\text{token}} ) (Ltoken) 的序列,例如在预测168个点(实验部分中的7天温度预测)时,Informer会将目标序列之前的5天作为“起始标记”,并使用 ( X de = X 5 d X 0 ) ( X_{\text{de}} = X_{5d} X_0 ) (Xde=X5dX0) 作为生成风格推理解码器的输入。 ( X 0 ) ( X_0 ) (X0) 包含目标序列的时间戳,即目标周期的上下文。然后,Informer的解码器通过一次前向过程而不是传统编码器-解码器架构中的耗时的“动态解码”来预测输出。

为了增强蒸馏操作的稳健性,Informer构建了主堆栈的副本,并逐渐减少自注意力蒸馏层的数量,每次减少一层,如图2中的金字塔所示,从而使它们的输出维度对齐。因此,Informer连接所有堆栈的输出,并得到编码器的最终隐藏表示。

Informer选择在预测目标序列时使用均方误差(MSE)损失函数,并将损失从解码器的输出传播回整个模型。

3. LSTNet (Long Short-term Time-series Network)

3.1 问题阐述

论文的目标是进行多元时间序列的预测。具体而言,给定一个完全观察到的时间序列信号集合 ( Y = { y 1 , y 2 , … , y T } ) ( Y = \{y_1, y_2, \ldots, y_T\} ) (Y={y1,y2,,yT}),其中 ( y t ∈ R n ) ( y_t \in \mathbb{R}^n ) (ytRn) ( n ) ( n ) (n) 是每个信号的维度,任务是以滚动预测的方式预测未来的信号。例如,要预测 ( y T + h ) ( y_{T+h} ) (yT+h)(其中 ( h ) ( h ) (h) 是预测的时间跨度),模型使用的数据是直到时间 ( T ) ( T ) (T),即 ( { y 1 , y 2 , … , y T } ) ( \{y_1, y_2, \ldots, y_T\} ) ({y1,y2,,yT})。类似地,要预测 ( y T + h + 1 ) ( y_{T+h+1} ) (yT+h+1),则使用的数据是直到 ( T + 1 ) ( T+1 ) (T+1),即 ( { y 1 , y 2 , … , y T + 1 } ) ( \{y_1, y_2, \ldots, y_{T+1}\} ) ({y1,y2,,yT+1})

3.2 卷积组件

LSTNet的第一层是一个无池化的卷积网络。其目的是在时间维度上提取短期模式和变量之间的局部依赖关系。具体工作如下:

  • 卷积层包含多个宽度为 ( ω ) ( \omega ) (ω),高度为 ( n ) ( n ) (n) 的滤波器(高度设置为变量数目)。
  • 每个滤波器 ( W k ) ( W_k ) (Wk) 扫过输入矩阵 ( X ) ( X ) (X),并产生输出 ( h k = RELU ( W k ∗ X + b k ) ) ( h_k = \text{RELU}(W_k * X + b_k) ) (hk=RELU(WkX+bk)),这里 ( ∗ ) ( * ) () 表示卷积操作, ( RELU ( x ) = max ⁡ ( 0 , x ) ) ( \text{RELU}(x) = \max(0, x) ) (RELU(x)=max(0,x)) 是激活函数。
  • 通过在输入矩阵 ( X ) ( X ) (X) 的左侧进行零填充,使得每个 ( h k ) ( h_k ) (hk) 都是长度为 ( T ) ( T ) (T) 的向量。
  • 卷积层的输出矩阵大小为 ( d c × T ) ( d_c \times T ) (dc×T),其中 ( d c ) ( d_c ) (dc) 是滤波器的数量。

3.3 循环组件

卷积层的输出同时被馈送到循环组件和循环跳跃组件(在第 3.4 小节中描述)。循环组件采用门控循环单元(GRU)[6]作为循环层,并使用 RELU 函数作为隐藏状态的更新激活函数。时间 ( t ) ( t ) (t) 时刻的循环单元的隐藏状态计算如下:

  • 重置门 ( r t = σ ( x t W x r + h t − 1 W h r + b r ) ) ( r_t = \sigma(x_t W_{xr} + h_{t-1} W_{hr} + b_r) ) (rt=σ(xtWxr+ht1Whr+br))
  • 更新门 ( u t = σ ( x t W x u + h t − 1 W h u + b u ) ) ( u_t = \sigma(x_t W_{xu} + h_{t-1} W_{hu} + b_u) ) (ut=σ(xtWxu+ht1Whu+bu))
  • 计算单元 ( c t = RELU ( x t W x c + r t ⊙ ( h t − 1 W h c ) + b c ) ) ( c_t = \text{RELU}(x_t W_{xc} + r_t \odot (h_{t-1} W_{hc}) + b_c) ) (ct=RELU(xtWxc+rt(ht1Whc)+bc))
  • 最终隐藏状态 ( h t = ( 1 − u t ) ⊙ h t − 1 + u t ⊙ c t ) ( h_t = (1 - u_t) \odot h_{t-1} + u_t \odot c_t ) (ht=(1ut)ht1+utct)

这些组件共同构成了LSTNet模型的核心部分,用于处理多元时间序列数据,并能有效地捕捉数据中的长期和短期模式。

4. MLP (Multilayer Perceptron)

  • 论文链接: 通常,MLP作为基本的神经网络结构,并没有单独的特定论文,但相关应用和原理可以在深度学习教科书或基础论文中找到。

5. NBEATS (Neural Basis Expansion Analysis)

  1. 基础架构的简单性与深度性:基础架构应该简单而通用,同时能够表达复杂的关系。
  2. 不依赖于时间序列特定的特征工程或输入缩放:这允许探索纯深度学习架构在时间序列预测中的潜力。
  3. 可扩展性:为了探索可解释性,架构应可扩展以使其输出对人类可解释。
    N-BEATS模型的基本构建块具有分叉架构,如图1(左)所示。每个块接受其相应的输入x并输出两个向量x和y。对于模型中的第一个块,其相应的x是整体模型的输入——一个历史回看窗口,长度为特定长度,以最后一个测量观测值为结束。我们设置回看窗口的长度为2H到7H的预测范围H的倍数。对于其余的块,它们的输入x是前一个块的残差输出。每个块有两个输出:y,块的前向预测长度H;和x,块的最佳估计x,也称为‘backcast’,给定块可以用来近似信号的函数空间约束。
    内部,基本构建块包含两个部分。第一部分是一个全连接网络,用于预测扩展系数的向前和向后预测器。第二部分包含向后和向前基层,它们接受相应的向前和向后扩展系数,并在基函数集合上投影它们,产生向后cast x和向前预测输出y。
    N-BEATS模型的核心创新之一是双层残差堆叠原理。它有两个残差分支:一个沿着每个层的backcast预测,另一个沿着每个层的forecast分支。这种结构使得网络在梯度传播上更加透明,并允许通过有意义的部分预测的聚合来实现可解释性。
    为了提高模型的可解释性,提出了两种配置:一种是不依赖于时间序列特定知识的通用深度学习架构,另一种是增加某些归纳偏置以使其可解释。在可解释的架构中,通过在堆叠级别为基层添加结构来设计趋势和季节性分解,使得堆叠输出更容易解释。例如,趋势模型可以通过限制gbs和gf为小度数p的多项式来实现单调或缓慢变化的函数,而季节性模型则通过限制gbs和gf为周期性函数来实现周期性的季节性波动。
    N-BEATS模型的整体可解释架构包含两个堆叠:趋势堆叠后是季节性堆叠。通过双层残差堆叠和forecast/backcast原理,趋势组件在输入窗口x被喂入季节性堆叠之前被移除,部分预测的趋势和季节性作为可解释的独立输出。每个堆叠由几个连接的块组成,并且每个堆叠共享其相应的非可学习的gb和gf。我们发现,除了共享gb和gf之外,在堆叠内共享所有块的权重可以获得更好的验证性能。
    N-BEATS模型提供了两种架构配置,一种是不依赖于时间序列特定知识的通用深度学习架构,另一种是增加某些归纳偏置以使其可解释。在通用架构中,gb和gf被设置为前一层输出的线性投影。这种配置的输出可以表示为:
    y = V f f + b f y = V_f f + b_f y=Vff+bf
    x = V b b + b b x = V_b b + b_b x=Vbb+bb
    其中,Vf和Vb是预测和回溯的基向量,f和b是相应的扩展系数。在这种配置中,基本构建块中的全连接层(FC层)学习部分预测y的预测分解,该分解是基于网络学习到的基Vf。矩阵Vf的维度是H dim(f),其中H是预测步长,dim(f)是f的维度。因此,Vf的第一维度在预测域中表示离散时间索引,第二维度表示基函数的索引。Vf的列可以被视为时间域中的波形。由于没有对Vf的形式施加额外的约束,深度模型学习到的波形没有内在的结构(在我们的实验中没有表现出任何结构)。这导致y不可解释。
    为了使模型可解释,我们建议在堆叠级别为基层添加结构,以设计趋势和季节性分解。例如,季节性模型可以通过限制gb和gf为周期性函数来实现,例如使用傅立叶级数作为基函数。这种配置的输出可以表示为:
    y s e a s = S f y_{seas} = S f yseas=Sf
    其中,S是基矩阵,包含周期性函数的基,f是预测的傅立叶系数。
    整体可解释架构包含两个堆叠:趋势堆叠后是季节性堆叠。通过双层残差堆叠和forecast/backcast原则,趋势组件在输入窗口x被喂入季节性堆叠之前被移除,趋势和季节性的部分预测作为可解释的独立输出。每个堆叠由几个连接的块组成,如图1所示,并且每个堆叠共享其相应的非可学习的gb和gf。在趋势和季节性模型中,每个堆叠包含3个块。我们发现,除了共享gb和gf之外,在堆叠内共享所有块的权重可以获得更好的验证性能。

6. NHiTS (Neural Hierarchical Interpolation for Time Series)

  • 论文链接: https://arxiv.org/pdf/2201.12886.pdf
  • 时间 2022年
    多速率数据采样: 我们在全连接块前引入了子采样层,显著减少了内存占用和所需计算量,同时保持了模拟长期依赖关系的能力。

分层插值: 我们通过减少神经网络预测的维度,并通过多尺度分层插值将其时间尺度与最终输出匹配,以确保多步预测的平滑性。这一新颖技术并非仅适用于我们提出的模型,也可以融入到不同的架构中。

N-HiTS 架构: 这是一种新颖的方法,通过在各个块之间同步输入采样速率与输出插值尺度,使得每个块专注于预测时间序列信号的特定频率带。
在多变量长期预测领域,基于Transformer的方法近年来主导了这一领域。例如,Autoformer(Wu等,2021)是一种具有分解能力和基于傅里叶变换的注意力近似的编码器-解码器模型;Informer(Zhou等,2020)采用了基于MLP的多步预测策略,通过稀疏性逼近自注意力;Reformer(Kitaev, Łukasz Kaiser和Levskaya,2020)利用局部敏感哈希来逼近注意力;LogTrans(Li等,2019)则使用了局部/对数稀疏注意力。

关于多步预测策略的研究揭示了在偏差/方差权衡中的不同策略。直接策略为每个预测步骤分配一个不同的模型,降低了偏差但增加了方差,避免了经典递归策略中预测步骤之间的误差累积。相反,联合预测策略使用单一模型一次性生成所有步骤的预测,达到了方差和偏差之间的平衡,避免了误差累积,并利用了共享的模型参数(Bao, Xiong和Hu,2014;Atiya和Taieb,2016;Wen等,2017)。

多速率输入采样是应对极长预测时段挑战的另一重要方法。之前的预测文献意识到这一问题,并提出了混合数据采样回归(MIDAS;Ghysels, Sinko和Valkanov,2007;Armesto, Engemann和Owyang,2010),以缓解参数过多的问题,同时保留高频时间信息。MIDAS回归保持了线性自回归模型的经典递归预测策略,但定义了一种简洁的输入馈送方式。

插值在许多领域广泛应用于增强建模信号的分辨率,例如信号和图像处理(Meijering,2002)。在时间序列预测中,插值的应用包括完成不均匀采样数据和噪声滤波器(Chow和Loh Lin,1971;Fernandez,1981)。当介绍N-HiTS方法时,可以强调其与N-BEATS相似和创新之处,以及其在长期预测中的优势。

N-HiTS方法扩展了Neural Basis Expansion Analysis方法(N-BEATS),在多个关键方面进行了优化,特别是在长期预测的背景下,提高了准确性和计算效率。该方法利用了输入信号的多速率采样和多尺度合成预测,从而构建了预测的分层结构,显著减少了计算需求并改善了预测的准确性。

与N-BEATS类似,N-HiTS通过多个块上的本地非线性投影来实现其预测能力。每个块包含一个多层感知器(MLP),用于学习生成其基础的回溯和预测输出的系数。回溯输出用于清洁后续块的输入,而预测输出则通过求和来组成最终的预测。

N-HiTS的架构由多个堆栈(stacks)组成,每个堆栈中有多个块(blocks)。每个块包含一个MLP,用于预测前向和后向的基础系数。这种结构允许N-HiTS在不同层次上学习和合成信号特征,通过控制不同堆栈和块之间的表达能力比率,进一步提升了预测的精度和泛化能力。

7. RNN (Recurrent Neural Network)

  • 论文链接: RNN作为基础的循环神经网络结构,在深度学习文献中有大量相关文献和应用。

8. SCINet (SCINet: Time Series Modeling and Forecasting with Sample Convolution and Interaction)

这些论文链接将帮助你进一步了解每个模型的技术细节和应用背景。


### 2. `paddlets.models.representation` - 时序表征模型模块

#### 功能
- 提供时序数据的表征学习模型。
- 支持将时序数据转化为低维表示。
- 常用模型包括Autoencoder、VAE等。

#### 示例
```python
from paddlets.models.representation import TSEncoder

# 假设已经准备好训练数据train_data
model = TSEncoder(in_chunk_len=24, out_chunk_len=24)
model.fit(train_data)
representations = model.transform(test_data)

3. paddlets.models.anomaly - 时序异常检测模型模块

功能
  • 提供多种用于时序数据异常检测的模型。
  • 支持无监督和有监督的异常检测。
  • 常用模型包括Isolation Forest、Autoencoder、LSTM-VAE等。
示例
from paddlets.models.anomaly import LSTMAutoEncoder

# 假设已经准备好训练数据train_data
model = LSTMAutoEncoder(in_chunk_len=24)
model.fit(train_data)
anomalies = model.predict(test_data)

4. paddlets.models.classify - 时序分类模型模块

功能
  • 提供多种用于时序数据分类的模型。
  • 支持多类别分类任务。
  • 常用模型包括LSTMClassifier、CNNClassifier等。
示例
from paddlets.models.classify import LSTMClassifier

# 假设已经准备好训练数据train_data和标签train_labels
model = LSTMClassifier(in_chunk_len=24, n_classes=3)
model.fit(train_data, train_labels)
predictions = model.predict(test_data)

结语

通过这些模块,PaddleTS为用户提供了一个完整的时序数据分析解决方案。学生们可以根据不同的应用需求选择相应的模型模块,快速构建并部署时序预测、表征、异常检测和分类模型。

  • 23
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值