LSTNet时间序列预测

在阅读完Modeling Long- and Short-Term Temporal Paterns with Deep Neural Networks这篇文章后,发现自己有一些不太懂的地方,网上也很少有讲解这篇文章的,于是自己在博客中记录一下文章的核心部分,理清思路。
ps:该博客中的()表示下角标,^表示上角标。

框架
问题公式化描述
  • 在这篇文章中,我们关注多变量时间预测的任务。正式的说,给定一系列观察到的时间序列信号Y = {y(1),y(2),…,y(T)},其中,yt∈Rn, n为变量维数,我们的目标是以滚动预测的方式预测一系列未来信号。为了预测y(T+h),我们需要提供{y(1),y(2),…,y(T)}的数据,其中h是当前时间戳的理想界限(horizon我不知道该如何翻译,暂且认为是一个极限值)。同样的,为了预测下一个时间戳的值y(T+h+1),需要提供{y(1),y(2),…,y(T),y(T+1)}。因此我们把时间戳T的输入矩阵表示为X(T)={y1,y2,…,yT},这个矩阵的维度是R(n*T)。
  • 在大多数情况下,预测任务中horizon的值是由环境设置的需求所选择的,例如对于交通问题,horizon的值可以从数小时hours到一天day进行选择;对于股票市场的数据,即使提前几秒或几分钟的预测对于产生回报也是有意义的。
  • 图2呈现了对提出的LSTnet框架的概述。LSTnet是一个专门针对多变量时间序列预测任务所设计的深度学习框架,它综合了长期模式和短期模式。在下面的章节中,我们从细节上引入LSTnet的每个模块。
    在这里插入图片描述
卷积组件
  • LSTnet的第一层结构是没有池化层的卷积神经网络,该结构可以提取在时间维度中的短期特征,并且提取变量之间的局部依赖性。卷积层包含多个过滤器,过滤器宽度为w,高度为n(高度设置为与变量的个数相同)。第k个过滤器扫描输入矩阵X并产生:
    在这里插入图片描述
  • 在此处*代表卷积运算,输出矩阵h(k)是一个向量,RELU函数为RELU (x) = max(0, x)。通过在输入矩阵的左边进行zero-padding,使进行卷积运算之后的向量h(k)长度为T。卷积核的数量为d©,卷积层的输出矩阵尺寸为d©*T。(这里可以认为是每个过滤器产生了长度为T的行向量,d©个过滤器则产生了d©行)。
递归组件
  • 卷积层的输出被同时传入到递归组件和递归-跳跃组件中。递归组件是一个带有门控递归单元(GRU)的递归层,使用RELU函数作为隐藏层更新激活函数。在t时刻的递归单元的隐藏状态可以按如下方式计算:
    在这里插入图片描述
  • 此处 ⊙ 是 element-wise(按位乘)运算,σ 是sigmoid激活函数,x(t)是在t时刻该层的输入,该层的输出是在每个时间戳的隐藏状态。尽管大多数人习惯于使用tanh函数作为隐藏层的更新激活函数,我们发现RELU可以拥有更稳定的性能,此时的梯度更容易反向传播。
递归-跳跃组件
  • 带有GRU和LSTM单元的递归层经过精心设计,以记住历史信息,从而了解相对长期的依赖关系。**然而由于梯度消失问题,GRU和LSTM在实践中通常不能捕捉到非常长期的相关性。**我们提出通过一种新的递归跳过组件来缓解这个问题,该组件利用了真实数据中的周期性模式。例如,每天的用电量和交通情况都包含明显的模式。如果我们想要预测今天t时的电量消耗,季节预测模型的一个经典技巧是利用历史日t时的记录,而不是最近的记录。**由于一个周期(24小时)的长度非常长,以及随后的优化问题,这种类型的依赖关系很难被现成的循环单元捕获。**受此技巧的启发,我们开发了一个具有时间跳跃连接的递归结构,以扩展信息流的时间跨度,从而简化优化过程。具体地,在当前的隐藏单元和相邻周期的同一相位的隐藏单元之间添加跳转链接。更新过程可以使用公式表示为:
    在这里插入图片描述
  • 其中这一层的输入是卷积层的输出,p是跳过的隐藏单元的个数。对于具有明确周期模式的数据集(例如,每小时耗电量和交通数据集中p = 24),可以很容易地确定p的值,否则必须进行调整。在我们的实验中,我们根据经验发现,即使是对于后一种情况,调优后的p也可以显著地提高模型性能。此外,可以很容易地扩展LSTNet,以此产生包含跳跃长度p的变体算法。
  • 我们使用全连接层来组合递归组件和递归-跳跃组件的输出。全连接层的输入包括在时间戳t时刻递归组件的隐藏状态和t-p+1到t时刻递归-跳跃组件的p个隐藏状态,标记为h^R(t), hS(t-p+1),hS(t-p+2),h^S(t)。全连接层的输出可以表示为:
    在这里插入图片描述
  • 其中h^D(t)为图2中t时刻神经网络(上)部分的预测结果。在每个t时刻,递归-跳跃层都会产生一个h(t),每个该h(t)都是此刻x(t)和与该单元相距为p的单元作用。每次计算全连接层的输出时,递归层的h(t)都要与p个递归-跳跃层的h(t)相加,所以每次有p次距离为p的作用。
时间注意力层
  • 然而,递归跳跃层需要一个预先定义好的超参数p,这对于非季节性的时间序列预测是不利的,或者其周期长度是随时间变化的。为了缓解这一问题,我们考虑了另一种方法,即注意力机制,它学习输入矩阵每个窗口位置的隐藏表示的加权组合。具体的,在当前时间戳t时刻的注意力权重a(t)(该值维度为q*1)可以按如下公式计算:
    在这里插入图片描述
  • 备注:此部分的h(t)等均为递归层产生的,而不是递归-跳跃层产生的。
  • 其中H(t) = [h(t-q),…h(t-1)]是一个矩阵,它巧妙地将RNN列的隐藏表示形式堆叠起来,而AttnScore是一些相似函数,如点积、余弦函数或由一个简单的多层感知器参数化。
  • 时间注意力层的最后输出是加权上下文向量c(t)和最后窗口的隐藏表示h^R(t-1)的组合,此后进行线性映射:
    在这里插入图片描述在这里插入图片描述
  • 该组件首先求得h(t-1)与H(t)每一列的相似性关系,即h(t-q)…h(t-1)(共q列),然后将权重乘到每一列上,将加权后的矩阵与h(t-1)堆叠起来进行线性映射求得h(t)。由于H(t)中包含了h(t-1),矩阵加权后也包含加权的h(t-1),最后堆叠时加上h(t-1)的话总感觉多用了该时刻的隐藏状态,这是我不解的地方。
自回归组件
  • 由于卷积和递归组件的非线性特性,神经网络模型的一个主要缺点是输出的比例对输入的比例不敏感。遗憾的是,在特定的真实数据集中,输入信号的尺度会以非周期的方式不断变化,这就大大降低了神经网络模型的预测精度。这个失败的具体例子在第4.6节中给出。为了解决这一问题,我们将LSTNet的最终预测分解为一个线性部分(主要关注局部尺度问题)和一个包含重复模式的非线性部分。在LSTNet体系结构中,我们采用经典的自回归(AR)模型作为线性分量。将AR组件的预测结果表示为hL(t),该值维度为n;将AR模型的系数表示为W(ar),该值维度为q(ar),b(ar)维度为1*1,其中q^(ar)是输入矩阵上的输入窗口的大小。注意,在我们的模型中,所有维都共享相同的一组线性参数。AR模型可以按如下公式表示:
    在这里插入图片描述
  • LSTNet的最终预测是由神经网络部分和AR模型部分结合得到的,此处的Y^(t)表示了在t时刻的模型最终预测:
    在这里插入图片描述
目标函数
  • 平方误差是许多预测任务的默认损失函数,其优化目标为:
    在这里插入图片描述
  • Θ表示我们模型的参数,ΩTrain是用于训练的时间戳的集合,||·||F是Frobenius范数,h是上文提到过的界限。传统使用平方损失函数的线性模型成为Linear Ridge,它等价于脊正则化的向量自回归模型。然而,实验表明,在某些数据集中,线性支持向量回归(Linear Support Vector Regression, Linear SVR)控制着Linear Ridge模型。线性SVR与Linear Ridge的唯一区别在于目标函数。线性SVR的目标函数为:
    在这里插入图片描述
  • C和ϵ是超参数。由于线性SVR模型的卓越性能,我们将其目标函数加入到LSTNet模型中,作为平方损失的替代方案。为简单起见,我们假设ϵ= 1,上述目标函数减少绝对损失(L1-loss)函数后的形式如下:
    在这里插入图片描述
  • 绝对损失函数的优点是对实时序列数据中的异常具有较强的鲁棒性。在实验部分,我们使用验证集来决定使用哪一个目标函数,选择平方损失函数还是线性SVR模型的目标函数。
优化策略
  • 本文的优化策略与传统的时间序列预测模型相同。假定输出时间序列为Y(t) = {y(1),y(2),…,y(t)},我们定义一个可变窗口大小q,然后将t时刻的输出重新表示为X(t) = {y(t-q+1),y(t-q+2),…y(t)}。然后,这个问题就变成了一个带有一组特征值对{X(t),Y(t+h)}的回归任务,并且可以通过随机梯度像样(SGD)或它的变体(如Adam)来解决。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值