【时间序列】TimeMixer (ICLR2024)
原文链接:TIMEMIXER: DECOMPOSABLE MULTISCALE MIXING
FOR TIME SERIES FORECASTING
代码仓库:https://github.com/kwuking/TimeMixer

符号定义
| 符号 | 含义 | 
|---|---|
| P | 用于预测的历史序列长度(seq_len) | 
| F | 预测序列长度(pred_len) | 
| C | 变量数量(通道数量) | 
| M | 划分的尺度数(降采样次数) | 
| L | Past Decomposable Mixing的层数 | 
Multiscale Mixing Architecture
设输入序列为 
     
      
       
       
         X 
        
       
         ∈ 
        
        
        
          R 
         
         
         
           P 
          
         
           ∗ 
          
         
           C 
          
         
        
       
      
        X\isin R^{P*C} 
       
      
    X∈RP∗C,为获得不同尺度下的时间序列,对原序列进行降采样:
  
      
       
        
         
         
           X 
          
         
           m 
          
         
        
          ∈ 
         
         
         
           R 
          
          
          
            ⌊ 
           
           
           
             P 
            
            
            
              2 
             
            
              m 
             
            
           
          
            ⌋ 
           
          
            ∗ 
           
          
            C 
           
          
         
        
          , 
         
        
          m 
         
        
          ∈ 
         
        
          { 
         
        
          0 
         
        
          , 
         
        
          1 
         
        
          , 
         
        
          . 
         
        
          . 
         
        
          . 
         
        
          , 
         
        
          M 
         
        
          } 
         
        
          . 
         
        
       
         X_m \isin R^{\lfloor \frac{P}{2^m} \rfloor * C}, m\isin \{0, 1,..., M\}. 
        
       
     Xm∈R⌊2mP⌋∗C,m∈{0,1,...,M}.
简单来说第 2 m 2^m 2m层降采样,就是每隔 2 m 2^m 2m个点取一个点
然后对m层降采样的结果分别进行嵌入(Embed),得到多尺度的时间序列输入。
Past Decomposable Mixing
PDM模块一共有L层,每层的输入为前一层的结果:
  
      
       
        
         
         
           X 
          
         
           L 
          
         
        
          = 
         
        
          P 
         
        
          D 
         
        
          M 
         
        
          ( 
         
         
         
           X 
          
          
          
            L 
           
          
            − 
           
          
            1 
           
          
         
        
          ) 
         
        
          , 
         
        
          l 
         
        
          ∈ 
         
        
          { 
         
        
          0 
         
        
          , 
         
        
          1 
         
        
          , 
         
        
          . 
         
        
          . 
         
        
          . 
         
        
          , 
         
        
          L 
         
        
          } 
         
        
          . 
         
        
       
         \mathcal{X}^L = PDM(\mathcal{X}^{L-1}), l\isin\{0, 1,..., L\}. 
        
       
     XL=PDM(XL−1),l∈{0,1,...,L}.
 其中, 
     
      
       
        
        
          X 
         
        
          l 
         
        
       
         = 
        
       
         { 
        
        
        
          X 
         
        
          0 
         
        
          l 
         
        
       
         , 
        
        
        
          X 
         
        
          1 
         
        
          l 
         
        
       
         , 
        
       
         . 
        
       
         . 
        
       
         . 
        
       
         , 
        
        
        
          X 
         
        
          M 
         
        
          l 
         
        
       
         } 
        
       
         , 
        
        
        
          X 
         
        
          m 
         
        
          l 
         
        
       
         ∈ 
        
        
        
          R 
         
         
         
           ⌊ 
          
          
          
            P 
           
           
           
             2 
            
           
             m 
            
           
          
         
           ⌋ 
          
         
           ∗ 
          
          
          
            d 
           
           
           
             m 
            
           
             o 
            
           
             d 
            
           
             e 
            
           
             l 
            
           
          
         
        
       
      
        \mathcal{X}^l = \{X^l_0, X^l_1,...,X_M^l\}, X_m^l \isin R^{\lfloor \frac{P}{2^m} \rfloor * d_{model}} 
       
      
    Xl={X0l,X1l,...,XMl},Xml∈R⌊2mP⌋∗dmodel
简单来说,就是将降采样得到的M层多尺度时间序列,在PDM模块中迭代L次。
PDM 模块中首先有一个Decmpose操作,将时间序列分解成周期项(seasonal parts) 
     
      
       
        
        
          S 
         
        
          l 
         
        
       
         = 
        
       
         { 
        
        
        
          s 
         
        
          0 
         
        
          l 
         
        
       
         , 
        
        
        
          s 
         
        
          1 
         
        
          l 
         
        
       
         , 
        
       
         . 
        
       
         . 
        
       
         . 
        
       
         , 
        
        
        
          s 
         
        
          M 
         
        
          l 
         
        
       
         } 
        
       
      
        \mathcal{S}^l=\{s_0^l, s_1^l,...,s_M^l\} 
       
      
    Sl={s0l,s1l,...,sMl}和趋势项(trend parts) 
     
      
       
        
        
          T 
         
        
          l 
         
        
       
         = 
        
       
         { 
        
        
        
          t 
         
        
          0 
         
        
          l 
         
        
       
         , 
        
        
        
          t 
         
        
          1 
         
        
          l 
         
        
       
         , 
        
       
         . 
        
       
         . 
        
       
         . 
        
        
        
          t 
         
        
          M 
         
        
          l 
         
        
       
         } 
        
       
      
        \mathcal{T}^l = \{t_0^l,t_1^l,...t_M^l\} 
       
      
    Tl={t0l,t1l,...tMl}。分解方法采用Autoformer中提出的SeriesDecomp方法。
  
      
       
        
         
         
           s 
          
         
           m 
          
         
           l 
          
         
        
          , 
         
         
         
           t 
          
         
           m 
          
         
           l 
          
         
        
          = 
         
        
          S 
         
        
          e 
         
        
          r 
         
        
          i 
         
        
          e 
         
        
          s 
         
        
          D 
         
        
          e 
         
        
          c 
         
        
          o 
         
        
          m 
         
        
          p 
         
        
          ( 
         
         
         
           x 
          
         
           m 
          
         
           l 
          
         
        
          ) 
         
        
          , 
         
        
          m 
         
        
          ∈ 
         
        
          { 
         
        
          0 
         
        
          , 
         
        
          1 
         
        
          , 
         
        
          . 
         
        
          . 
         
        
          . 
         
        
          , 
         
        
          M 
         
        
          } 
         
        
          . 
         
        
       
         s_m^l, t_m^l = SeriesDecomp(x_m^l), m\isin \{0, 1, ..., M\}. 
        
       
     sml,tml=SeriesDecomp(xml),m∈{0,1,...,M}.
 分解后,分别进行Seasonal Mixing和Trend Mixing,每一层PDM模块的输出为:
  
      
       
        
         
         
           X 
          
         
           l 
          
         
        
          = 
         
         
         
           X 
          
          
          
            l 
           
          
            − 
           
          
            1 
           
          
         
        
          + 
         
        
          F 
         
        
          e 
         
        
          e 
         
        
          d 
         
        
          F 
         
        
          o 
         
        
          r 
         
        
          w 
         
        
          a 
         
        
          r 
         
        
          d 
         
        
          ( 
         
        
          S 
         
        
          − 
         
        
          M 
         
        
          i 
         
        
          x 
         
        
          ( 
         
        
          { 
         
         
         
           s 
          
         
           m 
          
         
           l 
          
         
         
         
           } 
          
          
          
            m 
           
          
            = 
           
          
            0 
           
          
         
           M 
          
         
        
          ) 
         
        
          + 
         
        
          T 
         
        
          − 
         
        
          M 
         
        
          i 
         
        
          x 
         
        
          ( 
         
        
          { 
         
         
         
           t 
          
         
           m 
          
         
           l 
          
         
         
         
           } 
          
          
          
            m 
           
          
            = 
           
          
            0 
           
          
         
           M 
          
         
        
          ) 
         
        
          ) 
         
        
          . 
         
        
       
         \mathcal{X}^l = \mathcal{X}^{l-1}+FeedForward(S-Mix(\{s_m^l\}_{m=0}^M)+T-Mix(\{t_m^l\}_{m=0}^M)). 
        
       
     Xl=Xl−1+FeedForward(S−Mix({sml}m=0M)+T−Mix({tml}m=0M)).
Seasonal Mixing & Trend Mixing
 
对于周期项(Seasonal Parts)和趋势项(Trend Parts)采用不同的合并策略。周期项采用自底向上:
  
      
       
        
        
          f 
         
        
          o 
         
        
          r 
         
        
            
         
        
          m 
         
        
          : 
         
        
          1 
         
        
          → 
         
        
          M 
         
        
            
         
        
          d 
         
        
          o 
         
        
          : 
         
         
         
           s 
          
         
           m 
          
         
           l 
          
         
        
          = 
         
         
         
           s 
          
         
           m 
          
         
           l 
          
         
        
          + 
         
        
          B 
         
        
          o 
         
        
          t 
         
        
          t 
         
        
          o 
         
        
          m 
         
        
          − 
         
        
          U 
         
        
          p 
         
        
          − 
         
        
          M 
         
        
          i 
         
        
          x 
         
        
          i 
         
        
          n 
         
        
          g 
         
        
          ( 
         
         
         
           s 
          
          
          
            m 
           
          
            − 
           
          
            1 
           
          
         
           l 
          
         
        
          ) 
         
        
          . 
         
        
       
         for ~m: 1 \rightarrow M~do: s_m^l = s_m^l + Bottom-Up-Mixing(s_{m-1}^l) . 
        
       
     for m:1→M do:sml=sml+Bottom−Up−Mixing(sm−1l).
 而对于趋势项,则是:
  
      
       
        
        
          f 
         
        
          o 
         
        
          r 
         
        
            
         
        
          m 
         
        
          : 
         
        
          ( 
         
        
          M 
         
        
          − 
         
        
          1 
         
        
          ) 
         
        
          → 
         
        
          0 
         
        
            
         
        
          d 
         
        
          o 
         
        
          : 
         
         
         
           t 
          
         
           m 
          
         
           l 
          
         
        
          = 
         
         
         
           t 
          
         
           m 
          
         
           l 
          
         
        
          + 
         
        
          T 
         
        
          o 
         
        
          p 
         
        
          − 
         
        
          D 
         
        
          o 
         
        
          w 
         
        
          n 
         
        
          − 
         
        
          M 
         
        
          i 
         
        
          x 
         
        
          i 
         
        
          n 
         
        
          g 
         
        
          ( 
         
         
         
           t 
          
          
          
            m 
           
          
            + 
           
          
            1 
           
          
         
           l 
          
         
        
          ) 
         
        
          . 
         
        
       
         for ~m: (M-1) \rightarrow 0~do: t_m^l = t_m^l + Top-Down-Mixing(t_{m+1}^l) . 
        
       
     for m:(M−1)→0 do:tml=tml+Top−Down−Mixing(tm+1l).
 其中Bottom-Up-Mixing和Top-Down-Mixing分别由两个线性全连接层组成,带有GELU激活函数。
这一步简单来说就是将不同尺度信息向上/下传递了一遍,周期信息是向上传递的,趋势信息是向下传递的。
选择两种方向的原因:根据后文消融实验测试出来的。
注意,进行合并的时候还是按照各个尺度分别计算的。
Future Multipredictor Mixing
利用第L层PDM的输出,计算预测结果:
  
      
       
        
         
         
           Y 
          
         
           m 
          
         
        
          = 
         
        
          P 
         
        
          r 
         
        
          e 
         
        
          d 
         
        
          i 
         
        
          c 
         
        
          t 
         
        
          o 
         
         
         
           r 
          
         
           m 
          
         
        
          ( 
         
         
         
           x 
          
         
           m 
          
         
           L 
          
         
        
          ) 
         
        
          , 
         
        
          m 
         
        
          ∈ 
         
        
          { 
         
        
          0 
         
        
          , 
         
        
          1 
         
        
          , 
         
        
          . 
         
        
          . 
         
        
          . 
         
        
          , 
         
        
          M 
         
        
          } 
         
        
          , 
         
        
          Y 
         
        
          = 
         
         
         
           ∑ 
          
          
          
            m 
           
          
            = 
           
          
            0 
           
          
         
           M 
          
         
         
         
           Y 
          
         
           m 
          
         
        
          . 
         
        
       
         Y_m = Predictor_m(x_m^L), m\isin\{0, 1, ..., M\}, Y = \sum_{m=0}^{M}Y_m. 
        
       
     Ym=Predictorm(xmL),m∈{0,1,...,M},Y=m=0∑MYm.
 其中, 
     
      
       
        
        
          Y 
         
        
          m 
         
        
       
         ∈ 
        
        
        
          R 
         
         
         
           F 
          
         
           ∗ 
          
         
           C 
          
         
        
       
      
        Y_m \isin R^{F*C} 
       
      
    Ym∈RF∗C。
Predictor的本质是若干线性层, x m L ∈ R ⌊ P 2 m ⌋ ∗ d m o d e l x_m^L\isin R^{\lfloor \frac{P}{2^m} \rfloor * d_{model}} xmL∈R⌊2mP⌋∗dmodel首先经过经过线性层由 ⌊ P 2 m ⌋ \lfloor \frac{P}{2^m} \rfloor ⌊2mP⌋拉成F,然后将 d m o d e l d_{model} dmodel拉成C。
实验
长序列预测
TimeMixer提供的实验结果显示,效果有提升,但是不多
但其实验设置与同类论文有区别,关于PatchTST、DLinear等模型的结果与相关论文不同。

 附录中有完整版:
 
 附录中还展示了一个参数搜索调优后的结果:
 
多变量预测

事实上,在PEMS数据集是路网数据,共有数百个传感器,每个传感器提供一个时间序列。有很多图+序列的模型在PEMS类数据集上做测试,如果加入与这些模型的比较将较为全面。
消融实验

此处只列举长序列预测相关的消融实验。更多消融实验见原文,但总体效果都是case 1表现最好
效率

作为线性模型,没有自注意力机制,空间和时间复杂度都比较低。


![和Bug较劲的第n天:[Error: Unable to open snapshot file: No such file or directory]](https://i-blog.csdnimg.cn/direct/1bc91a793ec14fdf8655d51d8ea496cb.png)















