TimeMixer: Decomposable Multiscale Mixing for Time Series Forecasting
论文链接:
https://openreview.net/pdf?id=7oLshfEIC2
代码链接:
https://github.com/kwuking/TimeMixer
Key Point
整个文章的 idea 是,对一个原始的时间序列,用不同的频率来采样它,得到的新的序列所蕴含的时域信息是不同的。比如用电量序列,如果以每小时采样,那它就呈现以天为周期的形式;如果以每天采样,那它就可能呈现以周末、节假日相关的波动。 因此,如何利用好不同尺度的序列(即用不同频率采样得到的序列)之间的关系,对时序预测任务很重要。这个 idea 有点类似于 NHits 和 Scaleformer,这两篇我在之前的文章中有介绍:
● 对于周期项:如上图左侧,下面细粒度的 seasonal 序列用一个两层的 MLP 映射到和上面粗粒度的 seasonal 序列尺度对齐,然后相加即可得到融合后的结果,然后依此类推,把所有尺度的 seasonal 全部融合一遍。可是为什么要用 bottom-up 的流动方式呢? 作者的原文如下:In seasonality analysis, larger periods can be seen as the aggregation of smaller periods, such as the weekly period of traffic flow formed by seven daily changes, addressing the importance of detailed information in predicting future seasonal variation. 我的理解是,细粒度周期本身就包含了粗粒度周期,比如一个每小时采样的序列,周期严格是 24,那么用每 2 小时、每半天、每一天的频率来采样该序列,则周期可以直接推算出来,分别是 12,2,1。所以细粒度周期包含的信息多一些,用它来指导粗粒度周期会好一些。 ● 对于趋势项:如上图右侧,其实是和周期项一样的处理方式,唯一的区别是方向是反的,是粗粒度逐渐映射到细粒度的。为什么用 top-down 的流动方式呢? 作者的原文如下:Contrary to seasonal parts, for trend items, the detailed variations can introduce noise in capturing macroscopic trend. Note that the upper coarse scale time series can easily provide clear macro information than the lower level. Therefore, we adopt a top-down mixing method to utilize the macro knowledge from coarser scales to guide the trend modeling of finer scales. 我的理解是,越是细粒度,趋势就包含越多的噪声和意想不到的变化,因此需要宏观趋势(粗粒度)来指导微观趋势(细粒度)。 注意,经过上述操作后,每个 block 得到的输出仍然是多个尺度序列的周期项和趋势项,只不过每个尺度的周期项和趋势项已经融合了其他尺度的信息。然后,把每个尺度的周期项和趋势项相加(趋势周期合并),即可得到每个尺度的未分解序列。再进行一个 FFN 变换,即可得到下一个 block 的输入。所以,每个 block 的输入是多个尺度的序列,依次进行趋势周期分解、尺度间交互、趋势周期合并,FFN,输出新的多个尺度的序列。