由于工作原因,近段时间对时序领域的机器学习任务(forecasting、regression、classification、clustering、segmentation、anomaly detection等)有较多接触,同时我也对这一领域有较大的兴趣,于是开个帖子作为记录。本篇主要记录基于transformer的神经网络算法,它们适用的大多数任务场景为时序的forecasting。 本篇将会持续更新。

Vanilla Transformer

原文:Attention is All You Need
经典的出发点,Q,K,VQ,K,V,原始点积attention出名的地方。它是针对机器翻译问题而提出的网络结构。
这里就不过多的介绍了,网上好的解读非常多,比如这儿

Sparse Transformer

原文:Generating Long Sequences with Sparse Transformers
改造中间的attention层,提升计算效率,O(L2)\Omicron(L^2)降低到了O(LL)\Omicron(L\sqrt{L})。有两种模式:strided和fixed。

strided是只关注当前位置的前L\sqrt{L}个,相当于移动窗口;fixed是固定窗口,每第L\sqrt{L}个中的某个位置只关注当前L\sqrt{L}个中且不超过当前位置(在该位置左边)的这些位置。

Reformer

原文:Reformer: The Efficient Transformer
属于原始transformer的改造。在原始transformer的基础上,提升了计算效率,主要是以下两点:

  • 基于局部敏感性哈希算法(Locality Sensitive Hashing, LSH)的attention机制替代经典点积(dot-production) attention机制,将计算复杂度从O(L2)\Omicron(L^2)降低到了O(L)\Omicron(L)。从其实验结果来看,任务预测效果与原始attention相差不大。
  • 使用可逆(Reversible)残差连接来代替传统残差连接,好处是在前向过程中前N1N-1层的中间值和输出都不需要存储了,只保留最后一层的输出,极大降低了内存消耗。

Informer

原文:Informer: Beyond Efficient Transformer for Long Sequence Time-Series Forecasting
针对长时时序预测LSTF(long sequence time-series forecasting),对transformer进行改造。作者认为长时时序预测模型需要两方面的能力:

  1. 卓越的长时序列的特征表示能力
  2. 高效的针对超长序列出入参的操作

作者认为transformer在1方面有不错的能力,所以主要针对第2个方面(即计算效率)对transformer进行改进。改进包括以下3个点:

  • 提出ProbSparse self-attention机制来替代原始self-attention,时间复杂度和内存消耗都降为O(LlogL)\Omicron(L\text{log}L)。用KL-divergence去度量每个softmax(qKT/d)\text{softmax}(qK^T/\sqrt{d})与均匀分布(1L,,1L\frac{1}{L},\dots,\frac{1}{L})的差异,只把差异最大的前logL\text{log}L个queries挑出来,其他queries置0,再用转换后的稀疏query矩阵Qˉ\bar{Q}来计算self-attention(还是原始点积计算)。
  • 提出self-attention蒸馏操作来优先考虑占主导地位的attention分数,用于layers stacking中,极大降低内存消耗。使用convolution layer和maxpooling连接各个self-attention,降低隐层特征表示的维度。
  • 提出生成式decoder来获得长序列输出。通过一次前向计算,进行多步预测来预测长序列的所有输出,decoder的输入也相应的需要调整。

原文写得不是太好读,细节的解读推荐参考这篇

Autoformer

原文:Autoformer: Decomposition Transformers with Auto-Correlation for Long-Term Series Forecasting
仍然是解决长时时序预测问题,针对经典transformer的缺陷:

  1. 难以捕捉复杂的时序点上的内在模式和依赖关系
  2. point-wise的attention的计算复杂度阻碍了长序列特征表示的学习

提出了autoformer框架,核心是把原始序列进行分解(按经典时序分解:trend+seasonality),然后rolling变成很多子序列,从而把特征表示学习中的信息整合过程的颗粒度放到series-level(而非point-wise)。特征表示的学习使用auto-correletion机制来实现。所以,核心创新是以下两点:

  • 序列的分解模块。分解不在原始序列上直接分解,而是把分解放到神经网络里,作为一个block,动态的学习其分解模式。该模块中,通过移动平均获得趋势项,然后原序列减去趋势项得到季节项。季节项是核心要关注学习表示的项,趋势项在decoder里最终使用线性自回归来学习weights。
  • auto-correlation机制。受随机过程启发,作者定义原序列和滞后序列的相关性系数。选出top K个相关性最好的滞后序列的滞后时间,然后借助softmax将这K个相关性score转换成概率,把这些概率再和其对应的原滞后序列进行加权求和,完成信息聚合。滞后相关性系数的计算作者根据维纳-辛钦定理借助FFT来计算,降低了计算复杂度。

整体框架结构如下图:

具体细节的解读,推荐这篇

Pyraformer

原文:Pyraformer: Low-Complexity Pyramidal Attention for Long-Range Time Series modeling and forecasting
设计的初衷并不只局限于长时时序预测,同样对短时时序预测和分类、非监督任务也适用。其改造的核心目的也是在增强计算效率的同时使得时序间的依赖关系能够被更好的表示(反映在预测效果上就是更好)。
整体框架结构如下图:

三个核心改造要点:

  • PAM (pyramidal attention module)。将原始时间序列按照给定的步长进行聚合(聚合方式参照后续CSCM模块),将时间跨度更长的信息提炼出来,比如原始是按小时的信息,向上提炼可得到按日的信息,按月的信息,按年的信息。直观的可见下图,最下层就是原始时序,越往上就是时间跨度越大的聚合信息,此处是设定的每两个时间跨度一聚合。层与层之间称为inter-scale,同一层node与node之间称为intra-scale,抽象了不同时间跨度的信息聚合,所以作者称其是multi-resolution(多分辨率)。在此结构基础上提出了attention的新型表达式,只关注与当前节点相邻的节点,即inter-scale下的父节点和子节点,intra-scale中的临近节点(多少步以内算临近是预设参数)。经典点积attention计算中只考虑有上述“相邻关系”的QKQ-K pair的计算,使得其计算复杂度极大降低(O(L)\Omicron(L))。
  • CSCM (coarser-scale construction module)。这一模块就是去构建金字塔结构,信息的聚合通过卷积实现。最后将金字塔每一层的nodes最后concat起来,再做一个线性转换得到输出。
  • 预测模块。提出两种策略,一种是直接多步预测,类似于Informer,直接一步预测待预测的所有未来序列点(将PAM中每一层的最后的nodes提取concat起来再过一个全链接层);第二种是类似经典transformer,采用decoder思想,加入两层attention+mask来进行进行。decoder入参进行mask操作(未来信息点填0),然后PAM。

FEDformer

原文:FEDformer: Frequency Enhanced Decomposed Transformer for Long-term Series Forecasting
第一出发点终于不是speed-up Transformer了😅,文章把改进Transformer的表示能力作为了第一动机,认为原始的attention无法很好的捕捉全局层面的特征,于是提出了两个思路来优化:

  1. trend+seasonality分解,但是是基于Kologrov-Smirnov distribution test的思路。
  2. 结合傅立叶变换,将频域的信息融入进attention,强化对时序内在依赖的捕捉。

在以上改进的方法上,同时发现计算复杂度也得到了降低,最终实现预测效果和计算效率的同步加强(总感觉很强行😄)。整个网络结构如下,和autoformer基本差不多,除了核心的两个block:attention block和decomp block改为新的方式(即frequency enhanced block和MOE decomp)。

  • FEB(frequency enhanced block)。见下图,先过一个linear层,接下来做傅立叶变换(F\mathcal{F})。然后敲黑板,此处sampling就是随机采样M个(预设的)分解后的信号模式(计算复杂度降低的关键)。DD表示多变量时序场景对应的时序特征数量。蓝色块的RR是可学习的参数weight,这一步线性转换目的是考虑特征间的相关性,将interaction纳入到特征表示。之后填0再逆向傅立叶变换,得到最终输出。
  • FEA(frequency enhanced attention)。见下图,流程同经典的cross-attention,只不过是在频域的随机采样上进行的。
  • MOE decomp。采用了一些随机时间窗口去做AvgPooling,然后将这些产生的结果加权得到最终trend,加权平均的权重是可以学习的参数。

以上是基于傅立叶变换分解的attention block,文章也提出了基于小波变换分解的attention block,具体细节有所不同(时频域同时考虑),但是high-level的思想是一样的,就不展开了。

ETSformer

原文:ETSformer: Exponential Smoothing Transformers for Time-series Forecasting
借鉴Autoformer的思路(同样也有和FEDformer相近的思想),将原始时序做分解,然后在关注的序列上进行attention处理。目的也是为了更高效的捕捉时序间依赖性,提告预测精度。其核心创新主要是以下两点:

  1. 时序分解参照了Holt-Winter's加性方法,将时序分解成了三个成分:level+growth+seasonality
  2. 将移动平滑的思想融入到了针对growth项的提炼里(ES Attention),其背后的intuition是离当前时间点越近的前序时间点应该有更大的注意力权重,注意力权重应随时间点的前移而逐渐衰退。

整体如下图,左边是encoder,将原始时序先通过卷积层进行embedding,然后通过FA提取seasonality,将除seasonality的部分通过(MH-)ESA继续进行growth的提取,剩下的部分通过Holt-Winter's里的方法(还是指数平滑的思想)生成level。右边是decoder,这儿没有原始输入,而是用encoder分解得到的seasonality和growth作为输入,来生成(重新组合成)未来的预测。图中展示了N个stack叠加的情况,即分解N层再重新聚合N层的场景。

FA和ESA的逻辑:

  • Feature Attention(FA)。这个block主要就是根据傅立叶变换寻找top K个最强的子信号然后重组构成seasonality。
  • ES Attention。我的理解是这个block将原始的attention中的attention weight矩阵表示成了基于衰退系数α\alpha和时间滞后步数的一个指数移动平均系数矩阵(见原文附录A.1)。

Non-stationary Transformer

原文:Non-stationary Transformers: Exploring the Stationarity in Time Series Forecasting
这篇作者的出发点更多的是借鉴了传统统计时序分析的视角,以平稳性问题为切入口,将针对非平稳性的处理纳入到传统transformer里。该框架在面对非平稳序列时有两个显著的优势:

  1. 能够通过平稳化方法之后针对平稳序列(i.e.在不同的时间窗口间子序列都有相近的统计性质)学习得到良好的预测效果
  2. 有效counter了过平稳化问题(由于平稳化处理导致的attention提取的时序依赖关系不显著问题)

为了达到以上效果,该网络的设计框架可见下图,主要有以下两个核心要点:

  • 平稳化过程的设计。首先通过归一化将原始时序input都scale到N(0,1)\mathcal{N}(0,1),然后才是通常的transformer操作(embedding+encoder+decoder等),最后还有一个反归一化处理,即将开始归一化得到均值方差反作用在transformer的出参上,之后才是真正的output。
  • De-stationary Attention。这个block替代原始的attention,目的是在平稳化后的序列上进行attention操作时能够加入原始非平稳序列时序间蕴含的相互依赖,从而减缓过平稳化问题。设计得比较巧妙,作者首先非常宽松的证明了归一化序列的attention distribution和原始序列的attention distribution(i.e. attention之后再softmax生成的那个权重)之间的关系,建立等价关系还需引入两个因子(de-stationary factors),即有了这两个因子后通过归一化序列的attention权重可以近似表达出原序列的attention权重。那么如果得到这两个因子具体的值呢?作者提出通过一个单独的MPL-block去学习它们(图中Projector)。

TimesNet

To Be Continued..