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