在时间序列问题中,有一种类型的时间序列不是等频采样的,即每组相邻两个观测值的时间间隔不一样。时间序列表示学习在等频采样的时间序列中已经进行了比较多的研究,但是在这种不规则采样的时间序列中研究比较少,并且这类时间序列的建模方式和等频采样中的建模方式有比较大的差别
今天介绍的这篇文章,在不规则采样的时间序列问题中,探索了表示学习的应用方法,借鉴了NLP中的相关经验,在下游任务上取得了比较显著的效果。
图片
以下是不规则时间序列数据的一种表示形式,如下图所示。每个时间序列由一组三元组组成,每个三元组包含时间、数值和特征三个字段,分别表示时间序列中每个元素的采样时间、数值和其他特征。除了这些三元组之外,每个序列还包括其他不随时间变化的静态特征,以及每个时间序列的标签
图片
一般这种不规则时间序列建模方法,常见的结构是将上述triple数据分别embedding后,拼接到一起,输入到transformer等模型中,这种方式将每个时刻的信息,以及每个时刻的时间表征融合到一起输入到模型,进行后续任务的预测。
图片
在本文的任务中,使用的数据既包括这些有label的数据外,还包括无label的数据,用于做无监督预训练。
本文的预训练方法参考了自然语言处理领域的经验,主要涵盖了两个方面
预训练任务的设计:为了处理不规则的时间序列,需要设计适当的预训练任务,让模型能够从无监督数据中学习到有效的表示。本文主要介绍了基于预测和基于重构的两种预训练任务
数据增强方式设计:本研究中设计了用于无监督学习的数据增强方式,其中包括添加噪声、增加随机mask等方式
另外,文章还介绍了一种针对不同分布数据集的算法,用于探索最优的无监督学习方法
本文提出了两种不规则时间序列上的预训练任务,分别是Forecasting pretraining和Reconstruction pretraining。
在Forecasting pretraining中,对于时间序列中的每个特征,根据某个大小的时间窗口前序序列,预测它的取值。这里的特征指的是triplet中的feature。由于每种feature在一个时间窗口中可能出现多次,或者不会出现,因此文中采用了这个feature第一次出现的值作为label进行预训练。这其中输入的数据包括原始序列,以及增强后的时间序列。
在重建预训练中,首先对于一个原始的时间序列,通过某种数据增强方式生成一个增强后的序列,然后使用增强后的序列作为输入,经过编码器生成表示向量,再输入到一个解码器中还原原始的时间序列。文章中通过一个掩码来指导需要还原哪些部分的序列,如果这个掩码都为1就是还原整个序列
在得到预训练参数后,可以直接应用于下游的finetune任务,整个的pretrain-finetune流程如下图所示。
图片
在这篇文章中,我们提出了两种数据增强的方法。第一种方法是增加噪音,通过在数据中引入一些随机的干扰来增加数据的多样性。第二种方法是随机遮盖,通过随机选择一些数据的部分进行遮盖,从而促使模型学习更加鲁棒的特征。这些数据增强的方法可以帮助我们提高模型的性能和泛化能力
对于原始序列的每个值或时间点,可以通过增加高斯噪声的方式来增加噪声。具体计算方法如下:
图片
随机mask的方式借鉴了NLP中的思路,通过随机选择time、feature、value等元素进行随机mask和替换,构造增强后的时间序列。
下图展示了上述两种类型数据增强方法的效果:
图片
此外,文中将数据增强、预训练方式等进行不同组合,针对不同的时间序列数据,从这些组合中search到最优的预训练方法。
在文中进行了多个数据集的实验,对比了不同预训练方法在这些数据集上的效果。可以观察到,文中提出的预训练方式在大部分数据集上都取得了显著的效果提升
图片
以上是Google:非等頻取樣時間序列表示學習新方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!