【时序模型TimesNet 系列】
前言
在大模型发展的现在,注意力机制,encoder,decoder架构更为火爆,但在时序领域,最近几年涌现的部分小模型,在许多场景中仍具备一定优势,值得我们去理解学习与应用.接下来我们按技术发展顺序依次介绍TimesNet,TimeMixer,PDF,TimeMixer++.
一、TimesNet核心思想
在传统的建模思想中都是直接对原序列作用其时间维度(1D),而实际情况是一条序列中混杂了多种模式,直接处理,无法显式的对这些模型进行捕捉;因此提出了将时序转为2D的思想,变成2D-variations之后,就可以采用2D卷积等方式来同时捕获时间段内部依赖和相邻时间段依赖。
1D➡️2D方法
每个时间点同时存在两类时序变化:一类是该时间点与其相邻时间区间的变化,另一类是不同周期间同相位时间点的变化,即周期内变化和周期间变化。

- 首先通过快速傅立叶变换选取前K个对应的周期频率
- 根据频率得到周期f,序列长度与周期一比得到序列的段数p(不能整除的填0)
- 这样将1维数据转为行为p,列为f的二维矩阵(行代表周期间关系,列代表周期内关系)
2D➡️1D方法
二维矩阵通过共享的2D卷积核进行信息提取(其卷积后的维度保持不变),随后再将2D展开到1D,与前面正好相反的操作,其有末尾填充的位置进行剔除,这样就得到了K个一样长度的1D数据

通过前面傅立叶变换的幅度信息将其聚合起来.得到最终输出.

二、TimeMixer核心思想
该方案容纳了多尺度信息提取与序列拆解的思想,同时考虑了尺度间的信息流动.
多尺度生成
通过下采样m次获得m个尺度的序列,其中第一次下采样就是每2个点采样一次,其采样方法是平均值,因此第m个序列的长度就为下方式子所示,其中C是特征维度,P是原始序列长度,下标从0开始指保留原始序列.m个序列给到mlp结构的嵌入层,得到初步的多尺度嵌入序列.


序列分解混合
然后将每个尺度的序列都分解为趋势项(trend)和周期项(seasonal)(这里分解方法采用的是Autoformer中的方式,用一个大window size的滑动平均即可)。
尺度间的交互
- 周期项:如上图蓝色部分,下面细粒度的seasonal序列用一个两层的MLP映射到和上面粗粒度的seasonal序列尺度对齐,然后相加即可得到融合后的结果.(融合方式如下公式所示)细粒度周期包含的信息多一些,用它来指导粗粒度周期会好一些。
- 对于趋势项:如上图红色部分,其实是和周期项一样的处理方式,唯一的区别是方向是反的,是粗粒度逐渐映射到细粒度的.越是细粒度,趋势就包含越多的噪声和意想不到的变化,因此需要宏观趋势(粗粒度)来指导微观趋势(细粒度)。

尺度融合后,两个趋势项加和,给到mlp的FeedForward层,输出给到多尺度预测头进行预测,预测结果加和得到最终输出.
多头输出
一个尺度一个输出头(线性层),其输出的是未来长度的序列,m个尺度,m个输出,将m个输出加起来得到最终预测.
三、PDF(Periodicity Decoupling Framework)核心思想
先用多周期解耦块(Multi-periodic Decoupling Block)将时间序列按照k个主要频率分解为k对长期变化和短期变化。然后将它们输入到双重变化建模模块(Dual Variations Modeling Block)中,用Transformer建模长期变化(Long-term Variations Extractor),用TCN建模短期变化(Short-term Variations Extractor),将Transformer和TCN的结果相加,得到每个频率最终的结果。最后,将所有k个频率的结果拼接并线性变换(Variations Aggregation Block)得到最终的输出。

多周期解耦块
首先周期获取方式与Time Net类似,区别在于作为快速傅立叶变换后,不是按照幅度大小取topk个;本文认为不仅要考虑幅值强度最大的几个频率,还需要考虑频率取值大的频率,因为前者反映了序列的主要组成部分,后者代表了序列的高频变化部分,如此更能区分长期与短期的关系.取k个周期的逻辑如下所示,先按幅值大小取top-m个候选u,在这里面取top-k1个最大的幅值对应的频率,再从剩下的候选里面取频率排序下的top-k2个最大的频率,k1+k2个得到最终k个周期的选取.

有了频率就可以得到其对应周期,按照TimeNet的方法将序列转为2D.
长期变化与短期变化信息提取

已经知道2D其矩阵构成,行代表周期间关系,列代表周期内关系
- 长期变化:对每个行进行patch操作,然后将所有行中表示相同阶段的patch顺序拼接起来,得到的序列就是表示长期变化的序列,其操作如彩色环节的处理
- 短期变化:每一行序列单独视作短期变化。因此整个2维矩阵可以看成是有f个长度为 p 的一维序列,其操作如蓝色曲线环节所示.
双重变化建模模块(Dual Variations Modeling Block)
可以看到下图,长期变化采用的是transformer的算法进行处理,其主要原因是
- 长期趋势成分通常是低频、变化缓慢、具有全局结构;
- 需要模型能够理解跨时间点的趋势演化,而不仅仅是局部波动;
- Transformer 能更好地建模这种非局部、渐进性的变化模式。
短期变化采用的conv1d进行,其主要原因是
- 短期周期成分通常是高频、局部性强、具有固定周期性;
- Conv1D 能通过卷积核有效提取这些重复模式;
- 相比 Transformer,Conv1D 更轻量、训练更快,且在局部建模上具有优势。
两者处理后进行加和给到最后的输出模块.

最后参照全局方案(Figure2)所示,将k个频率周期的的结果拼接起来输入到一个线性层,即可得到最终的输出.
四、TimeMixer++核心思想
目标是设计一个更通用的方案,以便于应用不同下游任务.TimeMixer++的结构如下图,最核心的改动其实是周期趋势分解那部分(也就是TimeMixer中的Past Decomposable Mixing模块),从Autoformer的滑动窗口法进化到了TimesNet的二维表示法。

输入映射
首先通过下采样获得多尺度序列其原理与TimeMixer 一样,随后通过注意力机制,捕捉多变量时序数据的全局交互模式.其具体操作如下:
- 最粗粒度的序列进行自注意力计算
- 每个尺度在特征变量之间进行注意力计算,其QKV均由尺度序列得到
- 通过一个嵌入层得到每个尺度的表征
混合模块
首先是(b),参照Time Net的方式将多尺度序列都按照FFT变换后的周期分量reshape为二维表示。每一列代表同一周期内部的一段序列(可以视为周期),每一行代表不同周期内相位相同的那些时间点(可以视为趋势).
然后是(c) 对行级别采用attention得到趋势分量,对列级别采用attention得到周期分量。得到周期与趋势两项,如 就由2D卷积得到,行的类似.


之后是(d)尺度混合,前面(c)得到的是二维表示了,所以不能像TimeMixer中采用MLP直接对齐时间尺度来进行不同尺度之间的融合。因此,采用图像领域中常用的上下采样操作(下采样用2D卷积,上采样用2D transposed卷积)来对齐不同尺度。这里对于趋势和周期分量的不同尺度融合路径也是和TimeMixer一样,一个按照从上到下(top-down)的方式进行信息融合、另一个按照从下到上(bottom-up)的方式。

(d)得到1维多尺度混合后的数据,给到(e)最后,把不同分辨率的表征进行加权求和即得到最终每个尺度的表示,分辨率是指在(b)步骤进行reshape得到二维表征时,用FFT来获取多个主要周期.

输出映射
类似TimeMixer里的多头输出,输出后通过Ensemble(平均或者权重求和)得到最终输出.

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)