处理存在缺失值和非等时间间隔的 RNN 模型

处理存在缺失值和非等时间间隔的 RNN 模型

论文题目:Recurrent Neural Networks for Multivariate Time Series with Missing Values (发表在 Scientific reports 2018,被引用160+

背景

多变量的时间序列广泛存在于各种应用场景。由于种种原因,它们往往不可避免地会携带遗漏的观测结果,这些缺失值或缺失的 pattern 往往能够为一些有监督的学习任务(如分类)提供丰富的信息。

目前已经有些方法能够处理时间序列中缺失值。最简单的方法是忽略掉缺失值,直接在观察到的值上做分析,当缺少率较高时显然效果不好。另一类方法是去填充缺失的值,也叫数据补全。实际中用的比较多的有平滑(smoothing)、插值(interpolation)和样条(spline)等,但是这类方法在补全时不能捕获变量之间的相关性已经复杂的 pattern。其他比较高级的补全方法是去估计缺失值,这类方法包括 spectral analysis, kernel methods, EM algorithm, matrix completion 和 matrix factorization。这些方法可以结合起来利用,降低结果的不确定性。但是,数据补全和下游的任务(如预测)被分离为两个子任务,这样补全的pattern 不能被下游任务充分利用,导致次优解。

现有的 RNN 模型(LSTM/GRU)在序列建模任务上表现优秀。因此本文设计了一个基于 GRU 的模型(GRU-D)能够充分利用缺失的 pattern (missingness patterns)。缺失的 pattern 包含两个表示:masking time interval接下来具体介绍。

方法

定义

多变量时间序列 X=\{x_1,x_2,......,x_T\}\in\Re ^{T\times D} ,长度为 T ,变量数为 Dx_t^d 表示 t 时刻的第 d 个变量。由于数据存在缺失值,本文引入了 masking 向量 m_t\in \{0,1\}^D 表示每一个变量是否缺失:

由于本文中时间序列是非等时间间隔的, s_t 表示 x_t 对应的时刻。此外,为每一个变量维护一个time interval \delta _t^d 表示每一个变量当前时刻和最近的非缺失值对应时刻的时间间隔:

下图给出了一个例子:

针对上述的场景,本文只考虑分类任务。首先给出了三种基于 GRU 的简单方法。

简单方法1:GRU-Mean

思想:用所有数据的平均值填充缺失值,然后将该序列送入 GRU 中。

简单方法2:GRU-Forward

思想:将过去时刻中最近的那个值去填充缺失值,然后将该序列送入 GRU 中。

简单方法3:GRU-Simple

思想:将三个值拼接得到的序列送入 GRU 中。

重点:GRU-D

图中左下为修改后的GRU,左上为原始的GRU,右图为模型的输入和输出。

本文引入了decay rates \gamma ,由time interval \delta _t^d做转换得到:

decay rates \gamma 包含两种,一种是input decay\gamma _x,相当于用来填充缺失值,缺失值的填充与历史最近的非缺失值和平均值有关。

x_{t'}^d 为历史最近的非缺失值, \tilde{x}^d 为该变量的平均值。

第二种是hidden state decay \gamma _h,用来延迟前一个时刻的隐状态:

最后,将masking 向量 m_t 直接输入到模型:

另外给出原始GRU的公式,便于做对比看:

发布于 2019-03-17 17:39