分解学习+对比学习实现更清晰的时间序列预测建模
简介
上百数据实战技巧,欢迎关注Kaggle竞赛宝典。
基于深度学习的时间序列预测方法一般采用端到端的方式训练模型,将原始的时间序列通过网络映射到一个表示,再基于这个表示进行预测。然而,这种方法将时间序列的所有信息映射成一个向量,这个向量耦合了很多不同维度的信息,容易造成过拟合,对序列中噪声的敏感程度也更高。
ICLR 2022中Salesforce发表了一篇基于分解学习+对比学习的时间序列预测方法,将时间序列的表示分解成趋势项和季节项,实现更清晰的时间序列建模,下面给大家介绍一下这篇文章的核心思路。
下载地址:https://openreview.net/pdf?id=PilZY3omXV2
1Motivation
季节项、趋势项、噪声三个因素构成时间序列预测观测值,是时间序列预测中常用的的框架。如下面的因果图所示,观测到的时间序列是由不可预测的噪声项和可预测的可预测的隐变量构成的。而可预测的隐变量又是由趋势项和季节项两个因素构成的。
以前的深度学习建模方法,直接学习一个统一的表征进行时间序列预测。这个表征通过观测数据学习,其实耦合了噪声项、趋势项和季节项。将这些因素耦合在一起的问题在于,模型可能无法捕捉到真正有用的特征,学习过程不够清晰,导致过拟合问题。
如果能将噪声、趋势项、季节项三种信息解耦,就可以实现更清晰的时间序列预测建模。分解学习的思路在表示学习、CV、NLP等领域已经得到了非常广泛的验证,将向量表征解耦往往会得到更鲁棒的表示。
基于分解学习的思路,本文提出了CoST,利用分解学习+对比学习实现时间序列预测向量的解耦。
2建模方法
CoST的整体模型结构如下图所示,底层是一个时间序列骨干网络,用于将输入的时间序列编码成向量。接下来这个向量会输入到两个独立的分解学习模块中,一个用来提取趋势项(Trend Feature Disentangler),另一个用来提取季节项(Seasonal Feature Disentangler)。整体模型的目标是,每个时间步生成两个向量,分别代表趋势项和季节项,然后用这两个向量组合到一起进行预测。
趋势项模块核心是利用不同卷积核尺寸的因果卷积提取不同尺寸的特征,再使用average pooling融合各个卷积的结果,生成最终的趋势项向量。这种提取趋势项的方法好处是,可以自动学习哪些长度的时间窗口对于提取趋势项更有效,而不用预先定义时间窗口长度,在最近的一些工作中也比较常用。公式表示为:
上述表征会利用对比学习辅助信息提取过程,通过scale、shift等方式构造时间序列增强样本作为正样本,结合随机采样的负样本,让正样本之间的趋势项表示距离近,负样本之间远。这个思路在之前的文章介绍过多次,这里就不再赘述了,感兴趣的同学可以查看相关文章时间序列分析的表示学习时代来了?。
季节项的提取利用傅里叶变换将表示映射到频域实现。首先利用傅里叶变换将原始表示映射到频域,然后在每个频率项上使用可学习的NN网络实现频域内的信息交互,再通过反傅里叶变换映射到时域空间,得到季节项表征。公式可以表示为:
为了让模型能够学习到可以区分不同季节项的表示,文中引入了两个相应的对比学习损失函数。将每一个频率项转换为幅度和相位两个分量,在这两个分量上分别进行对比学习:
最终模型整体的loss由趋势项的对比学习loss和季节项上述两个对比学习loss加权求和得到。
3实验结果
文中主要对比了两类模型的效果,第一类是基于表示学习的方法,第二类是端到端的时间序列预测方法。从实验结果可以看出,本文提出的CoST在大多数数据集和预测时间长度上都取得不错的效果提升。
文中通过可视化对比CoST和TS2Vect两种表示学习方法的趋势项向量和季节项向量的提取效果。分别固定趋势项和季节项相同,对比季节项和趋势项的表示分布。从下图可以看出,CoST提取的不同类型趋势项和季节项的类簇更加明显,表明CoST比较强的表示学习能力。
4总结
本文介绍了ICLR 2022的一篇时间序列预测文章,利用分解学习的思路将时间序列的表示分解成趋势项和季节项,让时间序列建模过程更加清晰,缓解了噪声的干扰,提升预估模型的鲁棒性。