杨伟业,陈 漾
(国网浙江省电力有限公司紧水滩水力发电厂,浙江 丽水)
我们在这篇论文中,提出了一种时间序列异常监测的新范式——基于流形学习的多模态时间序列异常监测方法,从一种直观的数据对齐的角度上去实现时间序列异常监测任务,使得多模态的时间序列不会被当作彼此的异常点,同时也能保证尽可能地监测到各个模态对应的异常点。并且使用了鲁棒的时间序列异常监测策略[3],解决了类似于GAN 中的“模式崩溃”的问题。
流形学习是表示学习中核心的一部分,流形学习有许多经典的模型,最经典的例如前馈神经网络、卷积神经网络,它们都有着非常强大的编码能力以及降维能力,能够保证将数据降维到低维空间的同时不失去一些主要的信息。transformer 是基于全局注意力机制的网络,不仅能够调动计算资源的并行能力,并且拥有极高的精度,因此我们使用transformer 作为我们的特征压缩函数。
我们的数据集称之为“power”数据集,由水轮发电机组的94 个传感器的温度数据组成。一次开机所记录的数据可以参考图1。
图1 power 数据集示例
可以很明显地看到,所有的传感器所记录的温度数据都经历了先上升后趋于平稳的过程,其中上升的过程我们称之为“升温阶段”,平稳的过程我们称之为“平稳阶段”,并且我们将每一个过程都当作为一个“模态”,因此可以说我们的数据是“多模态”的。
在这一节中,我们将通过实验证明一系列时间序列异常监测sota 模型无法适用于多模态的时间序列数据集。 我们准备的模型分别为 Anomaly Transformer、GANF 以 及MTGFlow, 第 一 个 基 于“association discrepency”,而后两个都是基于概率密度,数据集均为我们自己的多模态时间序列数据集“power”。
无论是Anonaly Transformer 还是GANF 或者MTG Flow,这三个模型均把一开始梯度大的部分,也就是“升温阶段”识别为异常的时间点,这是错误的。
我们经过分析,Anomaly Transformer 仅仅使用“association discrepency”作为评判指标,而GANF 以及MTG Flow 均仅使用“negative log likelihood”作为评判指标,而“升温阶段”以及“平稳阶段”这两个模态是属于不同的特征空间的,因此单一的评判指标是无法泛化在不同的特征空间上的。
接下来我们将从微分动态时间弯曲、流形对齐、整体3 个部分介绍基于流形学习的模型。
微分动态时间弯曲是在最原始的版本上考虑到时间序列的导数,从而建模序列之间更加自然的一一对应的关系,下面我们将简要介绍。
给定两个时间序列,第一个序列Q 为Q=q1,q2,...,qi,...qn,第二个序列C 为C=c1,c2,...,cj,...,cm,我们想要构建一个n*m 的临近图矩阵来建模两个时间序列之间的对应关系,具体的操作步骤参考伪代码1(见表1)。
表1 伪代码1
其中distance_matrix()为计算q 与c 之间的欧几里得距离,即distance(q,c)[i,j] = deriative()为近似计算时间序列导数的函数,具体表达式为,对于时间序列Q 中的某一点qi:
由于这样得到的导数序列比原始序列的长度少一列,所以我们在导数序列的最开始复制一项
为了压缩高维数据并且保留高维数据的一些主要特征,我们使用流形对齐的策略,两个压缩映射函数F1(Q)和F2(C),分别将Q 和C 映射到d 维空间,并且d<<dq 且d<<dc。规定以下的损失函数,使得低维特征能够保留高维特征的主要信息:
其中,μ 为信息保留超参数;W(Q,C)为时间序列Q 和C 的微分动态时间弯曲图邻近矩阵;W (Q) 和W(C)分别为Q 和C 的k 邻近图矩阵。损失函数的第一项是为了保持不同时间序列之间的关系,第二项和第三项是为了分别保持原有时间序列的几何结构,μ 为超参数,用来控制各项信息的保留程度。
在这一部分我们将之前所述的微分动态时间弯曲以及流形对齐结合起来,构成了我们算法的主要框架,具体可以参考伪代码2。
现实世界的数据集中必然包含异常的数据,为了训练模型人工地去剔除这些异常数据是不切实际的,尤其是对于那些大型的时间序列数据集。因此,为了使得模型的训练更加鲁棒,我们采用文献[3]中提到的“梯度蒸馏”方法,非常朴素地减少了异常数据对于模型训练的影响,具体的做法见伪代码2(见表2)。
表2 伪代码2
该做法的核心思想:近似地将整个训练集中异常数据的占比当作训练模型时一个批次数据中异常数据的占比,并且在模型训练梯度下降的过程中,对应的损失函数最大的数据的梯度剔除,用剩余的认为是正常的数据的梯度来更新模型的参数。这样保证了大部分的异常数据不会参与到模型的训练过程中,从而可以从一定程度上保证数据被降维到正确的空间。
我们经过实验发现,尽管经过了梯度蒸馏,模型还是会有“欺骗”的操作:无论是正常的数据还是异常的数据,模型都将其映射到低维空间中一个固定的点。生成器所生成的数据具有高度的相似性。而SNGAN[4]通过谱归一化的操作很好地解决了这个问题,因此,我们在模型中也加入了谱归一化层,使得正常数据和异常数据经过降维之后有很高的区分性。
对于流形压缩函数F1(Q)以及F2(C),我们均采用transformer 的encoder 模块,具体的结构如图2 所示。
图2 压缩函数网络结构
对于流形压缩函数,我们使用超参数N 为6,使用Adam 作为优化器,学习率为0.0001,采用warm up为500 个iteration,采用学习率余弦退火,基于RTX 2070super 的GPU 环境。根据训练集的估计,我们采用损失函数的前5%作为阈值,来进行异常点的挑选。
基于流形学习的模型,能够将“平稳阶段”部分的异常点监测出来,这验证了我们的模型对于多模态时间序列异常监测任务的适用性。实验结果查看图3,黑色加粗位置就是识别到“平稳阶段”的异常点。
图3 流形学习模型的异常监测
从总体上来说,我们发现了目前水轮发电机组温度时序数据多模态异常监测的难题,提出了一个基于流形学习数据对齐的时间序列异常监测模型,验证了升温阶段和平稳阶段的异常监测,结合梯度蒸馏、谱归一化的鲁棒监测规则,使得模型的训练不再过度依赖于纯净的数据集。
虽然我们的模型是用于多模态时间序列异常监测的模型,但是核心的思想还是非常朴素:仅仅从数据对齐的角度去解决时间序列异常监测的问题。模型在我们自己的power 数据集很有效果,但是现实中的很多时间序列数据集要比我们的power 数据集复杂的多,因此我们未来将发掘更多的多模态时间序列数据集,并且依次验证我们的模型在这些多模态数据集上的有效性。