|
这里是清华大学软件学院机器学习组官方公众号(THUML-LAB),欢迎关注我们,获取最新资讯!
本文介绍本组ICLR2023时间序列分析方向的最新工作:TimesNet: Temporal 2D-Variation Modeling for General Time Series Analysis

作者列表:吴海旭*,胡腾戈*,刘雍*,周航,王建民,龙明盛
链接:https://openreview.net/pdf?id=ju_Uqw384Oq
论文代码:https://github.com/thuml/TimesNet
时序算法库:https://github.com/thuml/Time-Series-Library
1. 引言
时间序列分析被广泛应用于众多领域中,如天气预报中预测气象要素的未来变化、数据质控时填补缺失值、工业生产中监控设备状态、医疗诊断时分析心跳曲线等。
不同于自然语言、视频等序列数据,时间序列中单个时刻仅保存了一些标量,其关键信息更多地被蕴含在时序变化(Temporal Variation)中。因此,建模时序变化是各类时序分析任务共同的核心问题。
本文即围绕时序变化建模展开,设计提出了时序基础模型TimesNet,在长时、短时预测、缺失值填补、异常检测、分类五大任务上实现了全面领先。

2. 设计思路
近年来,深度模型被广泛用于时序分析任务中,例如循环神经网络(RNN)、时序卷积网络(TCN)和变换器网络(Transformer)。然而,前两类方法主要关注捕捉临近时刻之间的变化,在长期依赖上建模能力不足。Transformer虽然在建模长期依赖上具有天然优势,但是由于现实世界的时序变化极其复杂,仅仅依靠离散时间点之间的注意力(Attention)难以挖掘出可靠的时序依赖。

左:多周期视角;右:二维时序变化
为此,本文从一个全新的多周期(multi-periodicity)视角分析时序变化,如上图所示,我们观察到:
- 现实世界的时序数据往往是多种过程叠加,如交通数据的日变化和周变化,天气数据的日变化和年变化等。这种内在的多周期属性使得时序变化极其复杂。
- 对于某一特定周期过程,其内部每个时间点的时序变化不仅仅与临近时刻有关,也与邻近周期高度相关,即呈现周期内(Intraperiod-)与周期间(Interperiod-)两种时序变化。其中周期内变化对应着一个周期内的短期过程,周期间变化则可以反应连续周期间的长期趋势。
注:如果数据没有明显的周期性,则时序变化被周期内变化主导,等价于周期长度无穷大的情况。
基于上述观察,多周期属性自然地启发了一个模块化(Modular)的设计思路,即一个模块捕捉由某一特定周期主导的时序变化。这种模块化的设计思路可以将复杂的时间变化分解开,从而有利于后续建模。但是,受限于时间序列的固有的一维结构,原始序列难以同时表现出周期内与周期间两种不同的时序变化。
本文创新性地将将一维时序数据扩展至二维空间进行分析。如上图所示,将一维时间序列基于多个周期进行折叠,可以得到多个二维张量(2D tensors),每个二维张量的列和行分别反应了周期内与周期间的时序变化,即得到了二维时序变化(Temporal 2D-variations)。
3. TimesNet
本文中,我们提出了TimesNet模型,通过模块化结构将复杂时序变化分解至不同周期,并通过将原始一维时间序列转化至二维空间实现了周期内与周期间变化的统一建模。
3.1 时序变化:从一维至二维

将一维时间序列转换至二维
为了统一表示周期内与周期间的时序变化,我们首先需要发掘时间序列的周期性。
对于一个时间长度为T、通道维度为C的一维时间序列\mathbf{X}_{1D}\in\mathbb{R}^{T\times C},其周期性可以由时间维度的快速傅立叶变换(FFT)计算得到,即:
\mathbf{A} = \operatorname{Avg}\bigg(\operatorname{Amp}\big(\operatorname{FFT}(\mathbf{X}_{\text{1D}})\big)\bigg) \\ f_{1},\cdots,f_{k} = \mathop{\arg\mathrm{Topk}}_{f_{\ast}\in\{1,\cdots,[\frac{T}{2}]\}}\left(\mathbf{A}\right) \\ p_{1},\cdots,p_{k} = \left\lceil\frac{T}{f_{1}}\right\rceil,\cdots,\left\lceil\frac{T}{f_{k}}\right\rceil, \\
其中,\mathbf{A}\in\mathbb{R}^T代表了\mathbf{X}_{1D}中每个频率分量的强度,强度最大的k个频率\{f_{1},\cdots,f_{k}\}对应着最显著的k个周期长度\{p_{1},\cdots,p_{k}\}。我们上述过程简记为:
\mathbf{A},\{f_{1},\cdots,f_{k}\},\{p_{1},\cdots,p_{k}\} = \operatorname{Period(\mathbf{X}_{1D})}. \\
接下来,如上图所示,我们可以基于选定的周期对原始的一维时间序列\mathbf{X}_{1D}进行折叠,该过程可以形式化为:
\mathbf{X}^{i}_{\text{2D}} =\operatorname{Reshape}_{p_{i},f_{i}}\left(\operatorname{Padding}(\mathbf{X}_{\text{1D}})\right),\ i\in\{1,\cdots, k\}, \\
其中,\operatorname{Padding}(\cdot)为在序列末尾补0,使得序列长度可以被p_i整除。通过上述操作,我们得到了一组二维张量\{\mathbf{X}^1_{2D}, \mathbf{X}^2_{2D},...,\mathbf{X}^k_{2D}\},\mathbf{X}^{i}_{\text{2D}}对应着由周期p_i主导的二维时序变化。
需要注意的是,对于上述二维向量,其每列与每行分别对应着相邻的时刻与相邻的周期,而临近的时刻与周期往往蕴含着相似的时序变化。因此,上述二维张量会表现出二维局部性(2D locality),从而可以很容易通过2D卷积捕捉信息。
3.2 TimesBlock

TimesNet架构
如上图所示,TimesNet由堆叠的TimesBlock组成。输入序列首先经过嵌入层得到深度特征\mathbf{X}_{\text{1D}}^{0}\in\mathbb{R}^{T\times d_{\text{model}}}。对于第l层TimesBlock,其输入为\mathbf{X}_{\text{1D}}^{l-1}\in\mathbb{R}^{T\times d_{\text{model}}},之后通过2D卷积提取二维时序变化:
{\mathbf{X}}_{\text{1D}}^{l}=\operatorname{TimesBlock}\left(\mathbf{X}_{\text{1D}}^{l-1}\right)+{\mathbf{X}_{\text{1D}}^{l-1}}. \\
具体地,如下图所示,TimesBlock包含以下子过程:

(1)一维变换至二维:首先对输入的一维时序特征\mathbf{X}_{\text{1D}}^{l-1}提取周期,并将之转换成为二维张量来表示二维时序变化,即在上一节中所描述的过程:
\mathbf{A}^{l-1},\{f_{1},\cdots,f_{k}\},\{p_{1},\cdots,p_{k}\}=\operatorname{Period}\left({\mathbf{X}}_{\text{1D}}^{l-1}\right) \\\mathbf{X}^{l,i}_{\text{2D}} =\operatorname{Reshape}_{p_{i},f_{i}}\left(\operatorname{Padding}(\mathbf{X}_{\text{1D}}^{l-1})\right),\ i\in\{1,\cdots, k\}. \\
(2)提取二维时序变化表征:对于二维张量\{\mathbf{X}^{l,1}_{2D}, \mathbf{X}^{l,2}_{2D},...,\mathbf{X}^{l,k}_{2D}\},由于其具有二维局部性,因此,我们可以使用2D卷积提取信息。在这里,我们选取了经典的Inception模型,即:
\widehat{\mathbf{X}}^{l,i}_{\text{2D}} =\operatorname{Inception}\left(\mathbf{X}^{l,i}_{\text{2D}}\right). \\
(3)二维变换至一维:对于提取的时序特征,我们将其转化回一维空间以便进行信息聚合:
\widehat{\mathbf{X}}^{l,i}_{\text{1D}} =\operatorname{Trunc}\left(\operatorname{Reshape}_{1,(p_{i}\times f_{i})}\left(\widehat{\mathbf{X}}^{l,i}_{\text{2D}}\right)\right),\ i\in\{1,\cdots, k\}, \\
其中,\widehat{\mathbf{X}}^{l,i}_{\text{1D}}\in\mathbb{R}^{T\times d_{\text{model}}},\operatorname{Trunc}(\cdot)表示将步骤(1)中\operatorname{Padding}(\cdot)操作补充的0去除。
(4)自适应融合:类似Autoformer中的设计,我们将得到的一维表征\{\widehat{\mathbf{X}}^{l,1},\cdots,\widehat{\mathbf{X}}^{l,k}\}以其对应频率的强度进行加权求和,得到最终输出。
\widehat{\mathbf{A}}^{l-1}_{f_{1}},\cdots,\widehat{\mathbf{A}}^{l-1}_{f_{k}}= \mathrm{Softmax}\left(\mathbf{A}^{l-1}_{f_{1}},\cdots,\mathbf{A}^{l-1}_{f_{k}}\right) \\ {\mathbf{X}}_{\text{1D}}^{l}=\sum_{i=1}^{k}\widehat{\mathbf{A}}_{f_{i}}^{l-1}\times \widehat{\mathbf{X}}^{l,i}_{\text{1D}}. \\
通过上述设计,TimesNet完成了“多个周期分别提取二维时序变化,再进行自适应融合”的时序变化建模过程。
注意,由于TimesNet将一维时序特征转换为二维张量进行分析,因此可以直接采用先进的视觉骨干网络进行特征提取,例如Swin Transformer、ResNeXt、ConvNeXt等。这种设计也使得时序分析任务可以直接受益于蓬勃发展的视觉骨干网络。
4. 实验
我们在长时、短时预测、缺失值填补、异常检测、分类五大任务上进行了实验,涵盖36个数据集、81种不同的实验设置。

同时,对比了19种不同的深度方法,包含最新的基于RNN、CNN、MLP、Transformer的模型,例如N-BEATS(2019),Autoformer(2021),LSSL(2022),N-Hits(2022),FEDformer(2022),Dlinear(2023)等。
4.1 总体结果
如开篇雷达图所示,TimesNet在五项任务上均达到了SOTA。
(1)长期预测:在此备受关注任务上,TimesNet超过了先进的基于Transformer与MLP的模型。

(2)短期预测:M4数据集包含超过10万条不同频率采样的数据。TimesNet在此复杂数据分布情况下依然取得了最优的效果,验证了模型的时序变化建模能力。

(3)分类任务:在此任务上,TimesNet超过了经典的Rocket算法以及前沿深度学习模型Flowformer。

更多任务的对比请见论文。
4.2 视觉骨干网络的泛化性
我们将TimesNet中的Inception网络替换为不同的视觉骨干网络,例如ResNet,ConvNext,Swin Transformer。如下图所示,更先进的视觉骨干网络可以带来更优秀的效果。

4.3 表征分析
为了进一步探索TimesNet的效果来源,我们展示了“模型底层-顶层表征之间的CKA相似度”与“模型效果”之间的关系。其中,CKA相似度越低,代表模型底层-顶层之间的表征差异越大,即更加层次化的表征。


从上述可视化中,我们可以观察到:
- 在预测与异常检测任务中,效果越好的模型往往底层-顶层的表征相似度越高,表明任务期待更加底层的表征(low-level representations);
- 在分类与缺失值填补任务中,效果越好的模型往往底层-顶层的表征相似度越低,表明该任务需要层次化表征(hierarchical representation)。
得益于2D空间中的卷积操作,TimesNet可以根据不同任务学习合适的表征,例如预测与异常检测任务中,学习到低层次表征;而分类与缺失值填补任务中,学习到层次化的抽象特征。这也进一步证明了TimesNet作为基础模型的任务泛化性。
4.4 二维时序变化可视化
为了佐证二维时序变化的分析,我们在下图可视化了一个样例,其中Period方向反应周期内变化,而Frequency方向代表周期间变化。

在上图中我们可以看出转化至二维空间的时序数据具有明显的二维局部性(2D locality),这也印证了使用视觉骨干网络提取二维时序变化的合理性。
5. 总结
围绕时序变化建模这一关键问题,本文创新地将一维时间序列转化至二维空间进行分析,并进一步提出了任务通用的时序基础模型——TimesNet,在长时、短时预测、缺失值填补、异常检测、分类五大主流时序分析任务上实现了全面领先。
同时,得益于在2D空间中分析时序变化的设计,TimesNet使得时序分析任务可以直接受益于蓬勃发展的视觉骨干网络,对于后续深度时序模型研究具有良好的启发意义。
欢迎感兴趣的朋友阅读我们的论文(https://openreview.net/pdf?id=ju_Uqw384Oq)或者访问GitHub项目页面(https://github.com/thuml/TimesNet)查看更多细节内容。 |
|