【时间序列】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表现最好
效率
作为线性模型,没有自注意力机制,空间和时间复杂度都比较低。