当前位置: > 股票>正文

python量化将Informer用于股价预测 黄金价格股票代码

2023-07-29 06:26:57 互联网 未知 股票

python量化将Informer用于股价预测

写在前面

Informer模型来自发表于AAAI21的一篇best paper《Informer: Beyond Efficient Transformer for Long Sequence Time-Series Forecasting》。Informer模型针对Transformer存在的一系列问题,如二次时间复杂度、高内存使用率以及Encoder-Decoder的结构限制,提出了一种新的思路来用于提高长序列的预测问题。下面的这篇文章主要带大家使用作者开源的Informer代码,并将其用于股票价格预测当中。

1

Informer模型

近年来的研究表明,Transformer具有提高预测能力的潜力。然而,Transformer存在几个严重的问题,使其不能直接适用于长期时序预测问题,例如二次时间复杂度、高内存使用量和编码器-解码器体系结构固有的局限性。为了解决这些问题,这篇文章中设计了一种基于Transformer的长期时序预测模型,即Informer模型,该模型具有三个显著特征: 

一种ProbSpare self-attention机制,它可以在时间复杂度和空间复杂度方面达到   。

self-attention机制通过将级联层输入减半来突出主导注意,并有效地处理过长的输入序列。

生成式解码器虽然概念简单,但对长时间序列序列进行一次正向操作而不是step-by-step的方式进行预测,这大大提高了长序列预测的推理速度。

并且,在4个大规模数据集上的大量实验表明,Informer方法显著优于现有方法,为长期时序建模问题提供了一种新的解决方案。

文中提出的模型的整体框架如下图所示,可以看出提出的Informer模型仍然保存了Encoder-Decoder的架构:

Self-attention mechanism

首先,传统的self-attention机制输入形式是   ,然后进行scaled dot-product。第i个Query的attention系数的概率形式是:

self-attention机制要求二次时间复杂度的点积运算来计算上面的概率  ,计算需要  的空间复杂度。因此,这是提高预测能力的主要障碍。另外,之前的研究发现,self-attention的概率分布具有潜在的稀疏性,并对所有的  都设计了一些“选择性”的计数策略,而不显著影响性能。因此,作者首先对典型的self-attention的学习模式进行定性评估。“稀疏性” self-attention的分布呈长尾分布,即少数点积对主要注意有贡献,其他点积对可以忽略。那么,下一个问题是如何区分它们?

为了度量query的稀疏性,作者用到了KL散度。其中第i个query的稀疏性的评价公式是:

其中第一项是  对于所有的key的Log-Sum-Exp (LSE),第二项是它们的算数平均值。

基于上面的评价方式,就可以得到ProbSparse self-attetion的公式,即:

其中,  是和  具有相同尺寸的稀疏矩阵,并且它只包含在稀疏评估  下top-u的queries。其中,u的大小通过一个采样参数来决定。这使得ProbSparse self-attention对于每个query-key只需要计算  点积操作。另外经过文章Lemma 1的证明,其对稀疏评估进行了上边界的计算,从而保证了计算的时间和空间复杂度为  。

Encoder

Encoder的设计目的是提取长序列输入的远期依赖性。作为ProbSpare自注意机制的结果,encoder的特征映射存在值V的冗余组合,因此,这里利用distilling操作对具有主导特征的优势特征进行赋予更高权重,并在下一层生成focus self-attention特征映射。从j到j+1层的distilling操作的过程如下:

其中,  包含了multi-head probsparse self-attention以及在attention block中的关键操作。Conv1d表示时间序列上的一维卷积操作,并通过ELU作为了激活函数。

Decoder

Decoder部分中使用了一个标准的decoder结构 (Vaswani et al. 2017),它由两个相同的多头注意层组成。另外,生成推理被用来缓解长期预测的速度下降。我们向decoder提供如下输入向量:

其中,将masked multi-head attention应用于probsparse self-attention的计算中。它防止每个位置都注意到下一个位置,以此避免了自回归。最后,一个全连接层获得最终的输出,它的输出维度取决于我们是在进行单变量预测还是多变量预测。

Loss Function

模型选取MSE作为loss function以将decoder的输出与目标序列的误差进行反向传播。

2

环境配置

本地环境:

Python 3.7IDE:Pycharm

库版本:

numpy 1.18.1pandas 1.0.3 sklearn 0.22.2matplotlib 3.2.1torch 1.10.1

Informer源码Github

版权声明: 本站仅提供信息存储空间服务,旨在传递更多信息,不拥有所有权,不承担相关法律责任,不代表本网赞同其观点和对其真实性负责。如因作品内容、版权和其它问题需要同本网联系的,请发送邮件至 举报,一经查实,本站将立刻删除。