【论文阅读】TimesNet: Temporal 2D-Variation Modeling for General Time Series Analysis

TimesNet: Temporal 2D-Variation Modeling for General Time Series Analysis

引用: Wu H, Hu T, Liu Y, et al. Timesnet: Temporal 2d-variation modeling for general time series analysis[C]//The eleventh international conference on learning representations. 2022.

作者:Haixu Wu, Tengge Hu, Yong Liu, Hang Zhou, Jianmin Wang, Mingsheng Long

单位:清华大学软件学院

论文: [2210.02186] TimesNet: Temporal 2D-Variation Modeling for General Time Series Analysis (arxiv.org)

代码: https://github.com/thuml/timesnet

简介

文章的重点是时间变化建模,这是广泛分析任务的常见关键问题。单个时间点通常无法提供足够的语义信息进行分析,时间变化更能反映时间序列的内在属性,如连续性、周期性、趋势等。

许多经典方法假设时间变化遵循预定义的模式,例如ARIMA,Holt-Winter和Prophet。然而,现实世界时间序列的变化通常过于复杂,无法被预定义的模式所覆盖,从而限制了这些经典方法的实际适用性。

当前基于深度学习的方法,主要有三类:

  1. 采用递归神经网络(RNN)基于马尔可夫假设对连续时间点进行建模。然而,这些方法通常无法捕获长期相关性,并且它们的效率受到顺序计算范式的影响。

  2. 利用沿时间维度的卷积神经网络(TCN)来提取变化信息,由于一维卷积核的局部性,它们只能对相邻时间点之间的变化进行建模,因此在长期依赖性方面仍然存在不足。

  3. 基于Transformer的模型采用注意力机制或其变体来捕捉时间点之间的成对时间依赖性,但注意力机制很难直接从离散的时间点中找出可靠的依赖关系。

对于时间序列,可以观测到两种明显变化:

  1. 周期内变化:表示一个时期内的短期时间模式,真实世界的时间序列通常呈现多周期性 ,例如天气观测的每日和年度变化,电力消耗的每周和季度变化。这些多个周期相互重叠和相互作用,使得变化建模变得棘手

  2. 周期间变化:反映连续不同时期的长期趋势,每个时间点的变化不仅受其相邻区域的时间格局影响,而且与其相邻周期的变化高度相关

因此,作者从多周期性的新维度分析了时间序列 。基于对时间序列多周期性的观察,论文提出了2D变化建模的TimesNet,将1D时间序列转换为2D张量(1D时间序列很难同时明确地呈现两种不同类型的变化),将周期内变化和周期间变化分别嵌入到2D张量的列和行中,最终将时间变化的分析扩展到2D空间。TimesNet在五个主流时间序列分析任务中实现了一致的最先进水平,包括短期和长期预测、插补、分类和异常检测。

注意,对于没有明确周期性的时间序列,变化将由周期内变化主导,并且等效于具有无限周期长度的时间序列

Method

Transform 1D-Variations Into 2D-Variations

如图1所示,每个时间点同时涉及两种类型的时间变化,其相邻区域和不同周期之间的相同阶段,即期内和期间变化。然而,这种原始的一维时间序列结构只能呈现相邻时间点之间的变化。为了解决这一局限性,探索了时间变化的二维结构,它可以明确地呈现周期内和周期之间的变化,从而在表示能力方面具有更大的优势,并有利于后续的表示学习。

具体来说,对于具有 C C C 个变量的长度为 T T T 时间序列,原始 1D 序列结构为 X 1 D ∈ R T × C X _ { 1 D } \in R ^ { T \times C } X1D∈RT×C 。为了表示周期间变化,需要首先提取周期。从技术上讲,通过快速傅里叶变换(FFT)分析频域中的时间序列如下:

A = A v g ( A m p ( F F T ( X 1 D ) ) ) A = A v g ( A m p ( F F T ( X _ { 1 D } ) ) ) A=Avg(Amp(FFT(X1D)))

{ f 1 , ⋯   , f k } = a r g T o p k ( A ) \left\{ f _ { 1 } , \cdots , f _ { k } \right\} = a r g T o p k ( A ) {f1,⋯,fk}=argTopk(A)

p i = [ T f i ] , i ∈ { 1 , ⋯   , k } p _ { i } = \left[ \frac { T } { f _ { i } } \right] , i \in \left\{ 1 , \cdots , k \right\} pi=[fiT],i∈{1,⋯,k}

这里,FFT(·) 和 Amp(·) 表示 FFT 和振幅的计算。 A ∈ R T A \in R ^ { T } A∈RT 表示每个频率的计算幅度,该振幅通过 Avg(·)计算 C 个维度的平均 。考虑频域的稀疏性,避免无意义的高频带来的噪声,只选择top-k的振幅值,得到最有效频率 { f 1 , ⋯   , f k } \left\{ f _ { 1 } , \cdots , f _ { k } \right\} {f1,⋯,fk},其中 k k k是超参数。这些选定的频率也对应于 k k k 周期长度 { p 1 , ⋯   , p k } \left\{ p _ { 1 } , \cdots , p _ { k } \right\} {p1,⋯,pk}。由于频域的共轭性,只考虑 { 1 , ⋯   , [ T 2 ] } \left\{ 1 , \cdots , \left[ \frac { T } { 2 } \right] \right\} {1,⋯,[2T]} 以内的频率。上述公式可以总结如下:

A , { f 1 , ⋯   , f k } , { p 1 , ⋯   , p k } = P e r i o d ( X 1 D ) A , \left\{ f _ { 1 } , \cdots , f _ { k } \right\} , \left\{ p _ { 1 } , \cdots , p _ { k } \right\} = P e r i o d ( X _ { 1 D } ) A,{f1,⋯,fk},{p1,⋯,pk}=Period(X1D)

根据选择的频率 { f 1 , ⋯   , f k } \left\{ f _ { 1 } , \cdots , f _ { k } \right\} {f1,⋯,fk} 和相应的周期长度 { p 1 , ⋯   , p k } \left\{ p _ { 1 } , \cdots , p _ { k } \right\} {p1,⋯,pk},可以通过以下方程将一维时间序列 X 1 D ∈ R T × C X _ { 1 D } \in R ^ { T \times C } X1D∈RT×C 转换为多个二维张量:

X 2 D i = R e s h a p e p i , f i ( P a d d i n g ( X 1 D ) ) , i ∈ { 1 , ⋯   , k } X _ { 2 D } ^ { i } = R e s h a p e _ { p _ { i } , f _ { i } } ( P a d d i n g ( X _ { 1 D } ) ) \ , i \in \left\{ 1 , \cdots , k \right\} X2Di=Reshapepi,fi(Padding(X1D)) ,i∈{1,⋯,k}

其中 Padding(·) 是沿时间维度将时间序列补零,使其与 R e s h a p e p i , f i ( . ) R e s h a p e _ { p _ { i } , f _ { i } }(.) Reshapepi,fi(.) 匹配,其中 p i p_i pi 和 f i f_i fi 分别表示转换后的 2D 张量的行数和列数。请注意,习二维 X 2 D i ∈ R P i × f i × C X _ { 2 D } ^ { i } \in R ^{P_i \times f _ { i } \times C} X2Di∈RPi×fi×C 表示基于频率 f i f_i fi 的第 i i i 个重塑时间序列,其列和行分别表示相应周期长度 p i p_i pi 下的周期内变化和周期间变化。最终,如图所示,根据选定的频率和估计周期,得到了一组 2D 张量 { X 2 D 1 , ⋯   , X 2 D k } \left\{ X _ { 2 D } ^ { 1 } , \cdots , X _ { 2 D } ^ { k } \right\} {X2D1,⋯,X2Dk},它表示了 k k k 个不同周期得出的不同时间 2D 变化。

这种变换为转换后的二维张量带来了两种类型的局部,即相邻时间点(列、周期内变化)和相邻周期(行、周期间变化)之间的局部。因此,时间上的2D变化可以很容易地被2D卷积核处理。

TimesBlock

如图所示,以残差方式组织 TimesBlock。具体来说,对于 length-T 1D 输入时间序列 X 1 D ∈ R T × C X _ { 1 D } \in R ^ { T \times C } X1D∈RT×C ,通过嵌入层 X 1 D 0 = E m b e d ( X 1 D ) X^{0}{1D} = Embed(X{1D}) X1D0=Embed(X1D) 将原始输入投影到深度特征 X 1 D 0 ∈ R T × C × d m o d e l X ^{0} _ { 1 D } \in R ^ { T \times C \times d_{model} } X1D0∈RT×C×dmodel 中。对于 TimesNet 的第 l l l 层,输入是 X 1 D l − 1 ∈ R T × d m o d e l X ^{l-1} _ { 1 D } \in R ^ { T \times d_{model} } X1Dl−1∈RT×dmodel,该过程可以表示为:

X 1 D l = T i m e s B l o c k ( X 1 D l − 1 ) + X 1 D l − 1 X _ { 1 D } ^ { l } = T i m e s B l o c k ( X _ { 1 D } ^ { l - 1 } ) + X _ { 1 D } ^ { l - 1 } X1Dl=TimesBlock(X1Dl−1)+X1Dl−1

如图所示,对于第 l l l 个 TimesBlock,整个过程涉及两个连续的部分:捕获时间 2D 变化和自适应聚合来自不同时期的表示。

Capturing temporal 2D-variations :首先通过 Period(·) 来估计深层特征 X 1 D l X _ { 1 D } ^ { l } X1Dl 的周期长度。基于估计的周期长度,可以将1D时间序列转换到2D空间中,并获得一组2D张量,从中可以通过parameter-efficient inception block获得特征表示

A l − 1 , { f 1 , ⋯   , f k } , { p 1 , ⋯   , p k } = P e r i o d ( X 1 D l − 1 ) A ^ { l - 1 } , \left\{ f _ { 1 } , \cdots , f _ { k } \right\} , \left\{ p _ { 1 } , \cdots , p _ { k } \right\} = P e r i o d ( X _ { 1 D } ^ { l - 1 } ) Al−1,{f1,⋯,fk},{p1,⋯,pk}=Period(X1Dl−1)

X 2 D l , i = R e s h a p e p i , f i ( P a d d i n g ( X 1 D l − 1 ) ) , i ∈ { 1 , ⋯   , k } X _ { 2 D } ^ { l , i } = R e s h a p e _ { p _ { i } , f _ { i } } ( P a d d i n g ( X _ { 1 D } ^ { l - 1 } ) ) , i \in \left\{ 1 , \cdots , k \right\} X2Dl,i=Reshapepi,fi(Padding(X1Dl−1)),i∈{1,⋯,k}

X ^ 2 D l , i = I n c e p t i o n ( X 2 D l , i ) , i ∈ { 1 , ⋯   , k } \widehat { X } _ { 2 D } ^ { l , i } = I n c e p t i o n ( X _ { 2 D } ^ { l , i } ) , i \in \left\{ 1 , \cdots , k \right\} X 2Dl,i=Inception(X2Dl,i),i∈{1,⋯,k}

X ^ 1 D l , i = T r u n c ( R e s h a p e 1 , ( p i × f i ) ( X ^ 2 D l , i ) ) , i ∈ { 1 , ⋯   , k } \widehat { X } _ { 1 D } ^ { l , i } = T r u n c \left( R e s h a p e _ { 1 , ( p _ { i } \times f _ { i } ) } \left( \widehat { X }_ { 2 D } ^ { l , i } \right) \right) , i \in \left\{ 1 , \cdots , k \right\} X 1Dl,i=Trunc(Reshape1,(pi×fi)(X 2Dl,i)),i∈{1,⋯,k}

其中,首先利用上一节的 Period(·) 提取周期,然后使用padding和reshape转换成2D

张量,再使用一个共享参数的Inception block提取特征,最后reshape回1D,并用 Trunc(·) 将长度为 ( p i × f i ) ( p _ { i } \times f _ { i } ) (pi×fi) 的填充序列截断为原始长度 T T T。

Adaptive aggregation :受自相关的启发,振幅 A A A 可以反映所选频率和周期的相对重要性,从而对应于每个变换的 2D 张量的重要性。因此,根据振幅聚合一维表示:

A ^ f 1 l − 1 , ⋯   , A ^ f k l − 1 = S o f t max ⁡ ( A f 1 l − 1 , ⋯   , A f k l − 1 ) \widehat { A } _ { f _ { 1 } } ^ { l - 1 } , \cdots , \widehat { A } _ { f _ { k } } ^ { l - 1 } = S o f t \max \left( A _ { f _ { 1 } } ^ { l - 1 } , \cdots , A _ { f _ { k } } ^ { l - 1 } \right) A f1l−1,⋯,A fkl−1=Softmax(Af1l−1,⋯,Afkl−1)

X 1 D l = ∑ i = 1 k A ^ f i l − 1 × X ^ 1 D l , i X _ { 1 D } ^ { l } = \sum _ { i = 1 } ^ { k } \widehat { A } _ { f _ { i } } ^ { l - 1 } \times \widehat { X } _ { 1 D } ^ { l , i } X1Dl=i=1∑kA fil−1×X 1Dl,i

由于周期内和周期之间的变化已经涉及多个高度结构化的二维张量,因此 TimesBlock 可以同时完全捕获多尺度时间二维变化。

实验




相关推荐
阿正的梦工坊9 分钟前
深入理解 PyTorch 的 view() 函数:以多头注意力机制(Multi-Head Attention)为例 (中英双语)
人工智能·pytorch·python
Ainnle14 分钟前
GPT-O3:简单介绍
人工智能
冠位观测者37 分钟前
【Leetcode 热题 100】208. 实现 Trie (前缀树)
数据结构·算法·leetcode
OceanBase数据库官方博客39 分钟前
向量检索+大语言模型,免费搭建基于专属知识库的 RAG 智能助手
人工智能·oceanbase·分布式数据库·向量数据库·rag
测试者家园39 分钟前
ChatGPT助力数据可视化与数据分析效率的提升(一)
软件测试·人工智能·信息可视化·chatgpt·数据挖掘·数据分析·用chatgpt做软件测试
小王爱吃月亮糖2 小时前
C++的23种设计模式
开发语言·c++·qt·算法·设计模式·ecmascript
Loving_enjoy2 小时前
ChatGPT详解
人工智能·自然语言处理
人类群星闪耀时2 小时前
深度学习在灾难恢复中的作用:智能运维的新时代
运维·人工智能·深度学习
图王大胜3 小时前
模型 确认偏误(关键决策)
人工智能·职业发展·管理·心理·认知·决策