来源:PaperWeekly
本文约1900字,建议阅读5分钟
本文介绍了通用时间序列神经网络骨干—TimesNet。
本文中了 ICLR 2023,是清华软院老师组的文章,一如既往的 Solid。
论文标题:
TimesNet: Temporal 2D-Variation Modeling for General Time Series Analysis
论文链接:
https://openreview.net/forum?id=ju_Uqw384Oq
代码链接:
https://github.com/thuml/TimesNet
本文的作者就是 Autoformer 的作者,所以本文的很多思想都延续了 Autoformer。
Autoformer 在知乎有作者团队官方的解析,如下:
https://zhuanlan.zhihu.com/p/385066440
不同于 Autoformer 只集中于时间序列预测,本文提出的 TimesNet 是一个通用的时间序列神经网络骨干,可处理各种不同的时间序列任务,如最常见的任务:预测、分类、异常检测等等。其实几乎所有的时间序列预测模型也可以当做是通用骨干,比如 Autoformer,Informer,FEDformer,Preformer 这些 Transformer-based 模型中只采用 Encoder 就相当于是一个时间序列的特征提取器,区别在于它们捕获时序依赖性的方式不同。
比如 Autoformer 是用 Auto-Correlation,Informer 中的概率稀疏 Attention,FEDformer 的频域 Attention,Preformer 中的 Multi-Scale Segment-Correlation。还有那些 MLP-based 模型比如 DLinear 也可以当做是通用骨干,它是直接采用线性层权重来表示时序依赖性。
这是本文的核心。大部分现有方法都是作用于时间序列的时间维度,捕获时序依赖性。实际上,现实时间序列一般都有多种模式,比如不同的周期,各种趋势,这些模式混杂在一起。如果直接对原始序列的时间维度来建模,真正的时序关系很可能隐藏在这些混杂的模式中,无法被捕获。
考虑到:现实世界的时间序列通常具有多周期性,比如每天周期、每周周期、每月周期;而且,每个周期内部的时间点是有依赖关系的(比如今天 1 点和 2 点),不同的相邻周期内的时间点也是有依赖关系的(比如今天 1 点和明天 1 点),作者提出将 1D 的时间维度 reshape 成 2D 的,示意图如下。
下图左侧的时间序列具有三个比较显著的周期性(Period 1、Period 2、Period 3),将其 reshape 成三种不同的 2D-variations,2D-variations 的每一列包含一个时间段(周期)内的时间点,每一行包含不同时间段(周期)内同一阶段的时间点。变成 2D-variations 之后,就可以采用 2D 卷积等方式来同时捕获时间段内部依赖和相邻时间段依赖。
那么怎么确定时间序列中的周期性呢?采用傅里叶变换。给时间序列做傅里叶变换后,主要的周期会呈现对应的高幅值的频率分量。设定超参数 k,然后只取 top k 个最大的幅值对应的频率分量,即可得到 top k 个主要的周期,这和 Autoformer中的处理类似。
具体操作如下图,左侧是确定 top k 个周期,在此只画了三个,然后将 1D 的时间序列 reshape 成 3 种不同的 2D-variations(不能整除的可以用padding),对这三种 2D-variations 用 2D 卷积进行处理之后再聚合结果即可。
一般来说,对于一个多变量时间序列 ,其中 是变量维数, 是长度,虽然它是一个 2D tensor,但作者将其称为是 1D 的,这是因为在时间维度上来看是 1D 的。可以通过上图中这种方式,先算出主要周期和频率,再根据主要周期和频率将时间维度上是 1D 的时间序列 reshape 成 k 个 2D-variations。
注意,对于 个变量,最终算得的主要周期是所有变量的主要周期的平均,这也说明输入的多变量时间序列中包含的不同单变量时间序列的周期模式需要相似。最后,第 i 个 2D-variations 即是 ,其中 和 分别表示第 i 个周期和频率,它们的关系如下式:
得到 k 个 2D-variations之后该怎么处理呢?本文提出了 TimesBlock,每层 TimesBlock 又分为两步。首先是要先对这些 2D-variations 分别用 2D 卷积(可以是 ResNet、ConvNeXt 等)或者其他的视觉骨干网络(比如 Swin,Vit)处理;其次将 k 个处理后的结果再聚合起来。
对于第一步,本文采用了一种参数高效的 Inception block。Inception block 是GoogleNet 中的模块,包含多个尺度的 2D 卷积核。如下图左侧蓝色区域,处理 k 个 2D-variations 的 Inception block 是参数共享的。因此,模型整体的参数量不会随着超参数 k 的增大而增大,因此本文将其称为参数高效的. Inception block(Parameter-efficient Inception block)。
对于第二步,在处理完 k 个 2D-variations 之后,需要将其展平回 1D-variations,并截断到原始长度 (这对应于前面不能整除时使用 padding 的情况,相当于把多余的 padding 给去掉)。总之,得到 k 个变换回去的 1D-variations 之后,该如何聚合这 k 个结果呢?
如上图右侧所示,也是延续 Autoformer 的思路,根据傅里叶变换后频率周期对应的赋值大小来加权聚合,幅值大的证明该频率周期的分量越显著也越重要,给它较大的聚合权重,幅值小的则相反。直接用 softmax 归一化这些幅值 ,然后将归一化后幅值作为加权权重来聚合上面得到的 k 个 1D-variations 即可:
作者在五种时间序列任务上做了实验,充分对比了一些其他的时间序列骨干。五边形战士:
作者也用了不同的视觉骨干来处理 2D-variations:
在长时间序列预测上的效果:
文章真的写的很好,idea 很清晰合理,实验很充分效果也很不错,在长时间序列预测上超越了很多很先进的 Transformer-based 模型和 MLP-based 模型。有些新中 2023 ICLR 的论文在长时间序列预测上的效果非常差,甚至是一些时序预测任务上中了 oral 的文章,写的花里胡哨,创新性也没有特别显著,常看这个领域的基本看一遍那些文章就知道大概啥水平,效果也不能打,根本不实用。
编辑:王菁
校对:林亦霖