时序表征学习的基本思想就是“以向量嵌入的形式提供时间表示,以便自动进行特征工程过程并以更好的方式对时间建模”,有点类似于NLP中最初的词嵌入层(Embedding),这一过程区别于基于ML/专家经验的特征工程手段,往往是无监督的训练任务。
这个方向吸引了很多研究者进行探寻,有不少著名的研究工作,如:Time2Vec。最近,来自北京大学和微软的几位研究者提出了新的 TS2Vec 模型,支持任意场景下时间序列特征的静态表示。
本期文章为大家简要介绍这一工作。
论文地址:https://arxiv.org/abs/2106.10466
论文源码:https://github.com/yuezhihan/ts2vec
概述
TS2Vec 模型针对的场景比较广泛,包括但不限于时间序列分类、预测和异常检测等任务。该论文的研究者们旨在研究一种通用的时序表示方法,通过分层和时间维度两个方向,并对上下文一致性进行对齐,实现了时序特征的自动表示。模型的结构如下图所示:
01
编码器
编码器由三个组件组成:一个输入投影层(input projection layer)、时间戳Mask模块(timestamp masking )和一个空洞卷积层(dilated CNN)。
Input Projection Layer
对于每个输入xi,输入投影层其实就是一个全连接层,它的作用是:将时间戳 t 处的观测值 Xt 映射成一个高维隐含向量 Zt
Timestamp Masking
时间戳掩码模块将随机mask高维隐含向量,以生成增强的上下文视图。请注意,我们屏蔽了隐含向量 Zt 而不是原始向量 xi,因为时间序列的值范围可能是无限的,我们不可能为原始数据找到一个特殊的掩码,但是对高维向量可以。
Dilated Convolution
空洞卷积层有10个残差(residual)block,每个block包含2个 1-D 卷积层,用于提取每个timestamp的上下文表示。
02
层次对比
层次对比下的损失函数由两部分组成:
时间对比损失
令 i 为输入时间序列样本的索引, t 为时间戳。然后 rt 和 r't 表示相同时间戳 t 但来自 xi 的两个增强的context表示。时间戳 t 处第 i 个时间序列的时间对比损失可以表示为:
实例对比损失
实例对比用 (i; t) 索引的损失可以表示为:
这两种损失是相辅相成的。例如,给定一组用电量数据/多个用户,实例对比损失可以学习用户特定的特征,而时间对比损失旨在挖掘动态随时间变化的趋势。总损失定义为:
实验
TS2Vec 的模型效果验证采取了对比学习的思路,那么正样本(postive pairs)的构建和选择就至关重要。如下图所示,黄色是原始时序,绿色为评估所用的正样本。
业界现有的,主要可以归纳为以下几种策略:
上述策略的缺陷也很明显,基于比较强的数据分布假设,当TS出现水平偏移(Level shifts)或者局部异常(Anomalies)的时候,就很容易引入错误正样本。如下图所示:
为了克服这个问题,TS2Vec提出了一种新的策略,即上下文一致性(contextual consistency),它将两个“增强上下文”(augmented contexts)中相同时间戳的表示视为正对。而一个context就是通过对原始输入应用时间戳掩码( timestamp masking)和随机裁剪(random cropping)来生成的。
这样做有两个好处:
最终在时序分类,时序预测等场景下均取得了SOTA的效果:
下图是 TS2Vec 的时序预测效果:
总结
时序表征学习的优势在于可以自动捕捉细粒度的时序特征,从而更好地适应一些精度要求比较高的下游任务,并且不受时间窗口切割约束,可以生成多种时间粒度的子序列,在这个过程中还借助池化手段使得子序列中包含了上下文时序信息。这些都是传统特征工程手段所无法实现的。
TS2Vec这个模型的主要贡献在于: