Long-term Forecasting with TiDE: Time-series Dense Encoder 学习笔记

发布时间 2023-08-15 22:08:53作者: white514

Long-term Forecasting with TiDE: Time-series Dense Encoder
论文地址:https://arxiv.org/abs/2304.08424
代码地址:https://github.com/google-research/google-research/tree/master/tide

摘要:这篇论文提出了时间序列密集编码器(TiDE),一种基于MLP的编码器-解码器模型,用于长期时间序列预测,它具有线性模型的简单性和速度,同时也能够处理协变量和非线性依赖关系。


图1:模型总体结构

1 前情提要

1.1 残差块 Residual Block

结构如下(下面的代码全部都有省略,lin_a, lin_b, lin_res都是个全连接层):

class MLPResidual(keras.layers.Layer):
  """Simple one hidden state residual network."""
   def call(self, inputs):
    """Call method."""
    h_state = self.lin_a(inputs)
    out = self.lin_b(h_state)
    out = self.dropout(out)
    res = self.lin_res(inputs)
    if self.layer_norm:
      return self.lnorm(out + res)
    return out + res

图2:残差块结构

1.2 数据处理

给数据添加了许多时间维度的标签,如“minutes of hour, hours of day, days of month”等,以及节日标签“ChristmasDay,NewYearsEve,BlackFriday”等。

看了下代码,数据迭代器iterator中,数据格式如下图:

图3:iterator中的数据结构

2 模型框架

2.1 Encoding

第一步,从数据中提取past_x和future_x:将1,2合并成past_x, 4,5合并成future_x,其中对2和5做了embedding
第二步,对past_x和future_x做残差操作。
第三步,合并x, y, a:enc_pase+enc_future=x,past_ts=y,ts_embs=a
第四步,encoder

图4:encoding操作

# 从数据中提取past_x和future_x
past_feats = self._assemble_feats(past_data[1], past_data[2])
future_feats = self._assemble_feats(future_features[0], future_features[1])
# 残差操作
encoded_past_feats = tf.transpose(
    self.time_encoder(tf.transpose(past_feats))
)
encoded_future_feats = tf.transpose(
    self.time_encoder(tf.transpose(future_feats))
)
# 合并
encoder_input = tf.concat([past_ts, enc_past, enc_future, ts_embs], axis=1)
# encoder
encoding = self.encoder(encoder_input)

2.2 decoding

第一步,对编码输出进行解码
第二步,将解码结果与x_future合并
第三步,将合并结果通过残差块
第四步,与y_past相加

# decoder
decoder_out = self.decoder(encoding)
# stack
enc_fut = tf.repeat(
    tf.expand_dims(encoded_future_feats, axis=0), bsize, 0
)
final_in = tf.concat([decoder_out, enc_fut], axis=1)
# 残差块
out = self.final_decoder(tf.transpose(final_in, (0, 2, 1)))
# 与y残差相加
residual_out = self.linear(past_ts)
out += residual_out

3 其它内容

1 一个数学与实验证明
在某些条件下,将有限环境的过去和协变量映射到未来的线性模型可以最优地用于LDS(线性动态系统)的预测。

2 实验结果

图5:对比实验结果

  1. 对比试验显示准确度比PatchTST好一点。
  2. 训练和预测效率(速度)比PatchTST快
  3. 通过消融实验,展示了时间解码器对历史信息更强的保存能力

由于数据集太大了,实验的epoch又多,复现起来花的时间太长。所以我只是跑了一部分数据,证明程序确实可以运行(

3 某个暴论
我们的研究表明,至少对于这些长期预测基准来说,自我关注可能不是学习周期性和趋势模式所必需的。