logo

【Paper】DeepAR

wangzf / 2023-03-10


目录

论文简介

历史研究和瓶颈

很多时候我们需要的并不是预测单条或少量的时间序列,而是要预测成千上万条时间序列, 例如对于 Amazon 来说,想预测它提供的各种产品的需求量。

此外,碰到大量时间序列数据需要建模预测时,常见的方法是通过人工分组的方式, 将量级相同的时间序列看作一组,然后分组拟合模型提供预测。 但是如果不同时间序列的量级相差很大时,分组将需要耗费大量的人工操作。 例如,下图显示了亚马逊的数百万件商品平均每周销量的分布, 可以明显看到不同商品的周销量近似服从幂律分布,有的商品销量非常高,但是有的商品销量很低。 对于这种百万数量级的时间序列进行人工分组,无疑工作量巨大。

有时,多条时间序列的幅度差异很大, 而且幅度分布可能强烈有偏(skew distribution)。由于幅度难找到分组标准,导致时序很难被分组建模。 历史有些 Normalization 做法,例如输入标准化或 Batch Normalizaiton,但效率不高。

比如,下图的销售量和销售额的幂律函数(一个量的相对变化会导致另一个量的相应幂次比例的变化)的双对数形式, 就有长尾表现:

img

论文贡献

DeepAR 提出一种方法解决时序幅度分布大的算法框架。相比于传统模型,DeepAR 的好处:

  1. 引入协变量,通过学习季节性行为以及时间序列与协变量的依赖关系。减少人工特征工程去挖掘负责的组间依赖行为;
  2. 使用蒙特卡洛采样能估计未来概率分布的分位数,提供概率预测;
  3. 通过学习相似走势,为历史数据量较少或根本没有历史数据的个体进行未来预测;
  4. 噪声并不限制为高斯噪声,允许用户选择一个适合数据统计属性的噪声分布;
  5. 允许基于数据统计性质,选择不同的似然函数。

DeepAR 的主要特色是:预测未来时序的分布处理多条序列之间振幅对模型的影响,从而提高准确性。

模型定义

如果一句话概括 DeepAR, 可以认为它是一个基于循环神经网络并能同时处理多条时间序列, 并以概率分布的方式提供预测的预测模型。 用 $z_{i,t}$ 表示第 $i$ 条时间序列在时刻 $t$ 的取值,目标是建立如下条件分布模型:

$$P(\mathbb{z}_{i,t_{0}:T}|\mathbb{z}_{i,1:t_{0}-1}, \mathbb{x}_{i,1:T})$$

其中:

给定时序 $z_{i,t}$ 过去 $t_{0}-1$ 个时刻的观测值 $\mathbb{z}_{i,1:t_{0}-1}$, 以及协变量 $x_{i, 1:T}$,我们想知道时间序列从 $t_{0}$$T$ 时刻的取值的概率。

DeepAR 的模型是自回归循环网络(autoregressive recurrent network)结构, 下图是 DeepAR 的 Encoder 和 Decoder(共享模型结构和参数):

img

上图左边是训练过程,右边是预测过程,结构大致相同,唯一区别是预测阶段由于没有对应点的观察值, 需要把上一个时刻的预测值作为下一个时刻的输入值。

在上述过程中,$h_{i,t} = \varphi(h_{i,t-1}, z_{i,t-1}, x_{i,t})$ 表示网络的隐藏状态, $\varphi$ 是由具有 LSTM 单元的多层递归神经网络实现的函数。 $h_{i,0}$ 初始化为 0,$z_{i,0}$ 也初始化为 0。可以看到,这个模型是自回归的, 这表现在 $h_{i,t-1}$$h_{i,t}$ 有关,$z_{i,t}$ 也与 $z_{i,t-1}$ 有关。

DeepAR 假设:

$$\begin{align} P_{\theta}(z_{i,t_{0}:T} | z_{i,1:t_{0}-1}, x_{i,1:T}) &= \prod_{t=t_{0}}^{T}P_{\theta}(z_{i,t}|z_{i,1:t-1}, x_{i,1:T}) \\ &= \prod_{t=t_{0}}^{T}l(z_{i,t} | \theta(h_{i,t}, \Theta)) \end{align}$$

即认为,每个时刻的数据都服从某种类型的分布, 当参数 $\theta$ 由网络输出 $h_{i,t}$ 的函数 $\theta(h_{i,t}, \theta)$ 给出后, 似然函数 $l(z_{i,t} | \theta(h_{i,t}, \theta))$ 就对应一个参数为 $\theta$ 的固定分布中取值为 $z_{i,t}$ 的概率或者概率密度。这个分布的选取要求匹配数据的统计学性质,文章中选择了两种分布:

为什么选择 $\alpha$ 这个参数?文中解释是实验发现,相对而言这个参数收敛很快。 进一步可以得到此时的似然函数为:

$$l_{\text{NB}}(z_{i,t} | \theta(h_{i,t})) = \frac{\Gamma(z_{i,t} + \frac{1}{\alpha})}{\Gamma(z_{i,t} + 1)\Gamma(\frac{1}{\alpha})}\Big(\frac{1}{1+\alpha\mu}\Big)^{1/ \alpha}\Big(\frac{\alpha \mu}{1+\alpha \mu}\Big)^{z_{i,t}}$$

模型训练时的目标函数就是最大化对数似然:

$$L = \sum_{i=1}^{N}\sum_{t=1}^{t_{0}-1}\text{ln}l(z_{i,t} | \theta(h_{i,t}))$$

或者说需要极小化的损失函数就是 $-L_{o}$。注意 $h_{i,t}=\varphi(h_{i,t-1}, z_{i,t-1}, x_{i,t}, \theta)$, 因此除去神经网络中计算 $h_{i,t}$ 所需的参数和 $\Theta$ 以外,所有信息都是可以观测到的, 因此极小化损失函数可以通过梯度下降法实现,得到合适的参数值。

另外,之前提到 DeepAR 可以处理存在规模量级差异的时间序列数据集, 文章主要采用了两个操作:

总结

本文介绍了一个基于深度学习的时间序列预测方法 DeepAR。DeepAR 的文章发表距今已有 3 年, 事实上早在 2017 年,亚马逊内部就已经开始使用这个模型。由于机器学习相关的研究发展非常迅猛, 后续也出现了处理同样问题的新方法,因此,现在 DeepAR 可能主要是一个用于做 baseline 的常用模型。 但它作为一个经典的方法,依然有值得我们学习了解的地方

资料