近几年大数据和人工智能技术逐渐成熟,运维领域多年来面临的困境有望得到突破。AIOps就是在这样一个环境下自然孕育而生。
IT运维数据天生就有数据量大,维度多,时序等特征,结合人工智能算法,通过训练,就可以让机器自动发现系统异常,快速找到关联的根因,甚至可以根据历史数据提前做出预测。
近些年关于AIOps的研究越来越热门,其中,多维时间序列的异常检测和故障诊断是其中非常重要的一个课题方向。本次和大家分享的,是最近整理的几个基于深度学习进行多维时间序列数据中异常检测/故障诊断的研究工作。
AAAI 2019
A deep neural network for unsupervised anomaly detection and diagnosis in multivariate time series data
论文地址:https://ojs.aaai.org//index.php/AAAI/article/view/3942
论文源码:-
论文摘要:该论文提出Multi-Scale Convolutional Recurrent Encoder-Decoder (MSCRED),用于多变量时序数据的异常检测。MSCRED首先构建多尺度的signature matrices,用于描述不同时间步对应的=系统状态,然后,在给定的signature matrices上,利用卷积编码器去编码变量之间的相关特性,同时利用基于attention的卷积LSTM(ConvLSTM)去捕获时间依赖特性。最后利用解码器重构特征以及利用residual signature matrices去检测和诊断异常。
Method
Problem Statement
给定n维时序数据 ,假设数据不存在异常,我们希望达到两个目的:
-
Anomaly detection:检测T时刻之后某一时刻的异常事件
-
Anomaly diagnosis:识别最有可能导致异常的时间序列,并且量化异常程度。
Characterizing Status with Signature Matrices
有研究表明不同时间序列对之间的相关性对于描述系统状态至关重要。给定 t-w 时刻到 t 时刻的时序段,文中基于该时序段内两个序列的成对内积构建了一个 n x n 的 signature matrix。假设当前的两个序列为 和 。计算两个序列的相关性:
其中分母是缩放因子。特征矩阵不仅可以捕获两个时间序列之间的形状相似性和值尺度相关性,而且对输入噪声具有鲁棒性,因为某些时间序列的不稳定对特征矩阵的影响很小。通过选择不同的w值,可以获得不同尺度下的特征。文中选取了三个时间尺度:10,30,60。也就是每一个时间步,都有3个特征矩阵。每一个特征矩阵的大小与时序数据的维度一致。所以对于维度较少的时序数据来说,可能会存在问题。
Convolutional Encoder
采用全卷机编码器对Signature Matrices的空间模式进行进一步的编码。经过4层卷积核,将原始Signature Matrices 编码成不同大小的特征图,总共4层,后续会在这4层特征图上分别进行ConvLSTM操作。整个过程如图(a)所示。
Attention based ConvLSTM
由于在每一层特征图上都进行ConvLSTM,如果时间步比较长,则LSTM的性能将会下降,因此采用attention机制,对先前的每一个时间步的隐含特征分配权重。文中选择的时间步为5,也就是以当前时间步为基准,考虑之前的5个时间步。对于当前时间步对应的隐含状态,计算先前时间步对其的影响:
计算方法是基本的attention计算方法。整个过程如图(b)所示。
Convolutional Decoder
最后利用卷积解码器,再反向重构,重构的时候,需要加入ConvLSTM提取的特征,最后得到重构的Signature Matrices。整个过程如图(c)所示。整个过程的损失函数定义为重构误差。后续在原始Signature Matrices和重构Signature Matrices的差异矩阵上,进行异常检测和诊断。
KDD 2020
USAD: UnSupervised Anomaly Detection on Multivariate Time Series
论文地址:https://dl.acm.org/doi/10.1145/3394486.3403392
论文源码:https://github.com/manigalati/usad
论文摘要:该论文提出一种面向多元时序数据的无监督的异常检测方法UnSupervised Anomaly Detection USAD,该方法基于自编码器,同时利用了对抗训练的策略,并在五个公共数据集上进行了实验。USAD 背后的思想是在编码器-解码器架构上进行对抗性训练使其能够学习如何放大异常的输入的重建误差,同时相比与传统的GAN-based方法,更加稳定。
Method
Problem formulation
给定多元时序数据 ,其中 。然后定义在 t 时刻且长度为 K 的时间窗口为 。通过这种方式,我们可以将原始序列 T 分割为多个窗口的集合 ,当存在一个新的时间窗口 ,需要通过窗口的异常得分来对新的未知窗口进行分类,也就是0和1。
Unsupervised Anomaly Detection
采用自编码器是一种常用的方法,基于自编码器的异常检测使用重构误差作为异常分数,因为通常训练数据中只有正常的数据,因此出现异常数据时,往往具有较高的重构误差。但是,如果异常比较接近正常数据,则重构误差很小,因此无法有效检测到异常。发生这种情况是因为 自编码器尽可能地重建输入数据。
为了克服这个问题,理想的自编码器应该能够识别异常输入数据中是否包含正常数据。
一种可能的方案是利用生成对抗网络Generative Adversarial Networks。与基于自编码器的异常检测类似,基于 GAN 的异常检测使用正常数据进行训练。训练后,鉴别器用作异常检测器。如果输入数据与学习数据分布不同,则鉴别器将其视为来自生成器并将其分类为假数据,即异常。
USAD的基本框架为自编码器,同时具有两个不同阶段对抗训练策略。USAD包含三个部分,一个编码器网络 E 以及两个解码器网络 D1 和 D2 。如下图所示
两个解码器共用一个编码器,具体表示为:
训练的时候采用两阶段的训练方式。首先,给定正常输入,训练两个自编码器以实现重构。其次,这两个自编码器 以对抗方式进行训练,其中 AE1 将试图欺骗 AE2,而 AE2 的任务是判断数据是否是真实的(也就是来自输入窗口)或者假的(也就是来自AE1的重构)。
- Phase 1: Autoencoder training
在第一阶段,目标是训练每个 AE 来重现输入。即给定 W ,两个编码器的输出分别为AE1(W)和AE2(W),所以目标函数为:
- Phase 2: Adversarial training
首先将来自 AE1 的数据再次由 E 压缩到 Z,然后由 AE2 重建,得到的输出AE2(AE1(W)),这个过程如图中Training阶段中的绿色箭头所示。在对抗训练的策略下,AE1 期望最小化 W 和 AE2(AE1(W)) 之间的差异,而AE2 的目标是最大化这种差异。所以目标函数为
这里大概可以这么理解,AE2的目的是为了识别AE1(W)是AE1重构之后的时间窗口,而不是真实的时间窗口W。因此AE2需要最大化AE2(AE1(W)) 与真实W之间的差异,而AE1为了欺骗AE2,则需要最小化AE2(AE1(W)) 与真实W之间的差异。例如如果AE2(AE1(W))与W非常相似,那么可以认为AE1(W)来自与W,因为只有来自与W的数据才能获得较小的重构误差,也就是将AE1(W)判定为真实的W,这其实是错误的,因为AE1(W)是重构的数据。
- Two-phase training
在这样的结构中,每个自编码器都双重用途,融合Phase1和Phase2,最终的目标函数为
其中n表示训练epoch。两阶段的训练过程如下所示。
- Inference or Detection Phase
异常得分(anomaly score)被定义为
其中 。这两个参数决定了模型对异常的敏感度,在实际使用时可以根据场景进行调节。在文中的实验中,通过增加 a ,FP(False Positives)的数量降低,TP(True Positives)的数量上升。也就是说增加 a 可以增加模型的precision,但同时F1 score也降低,也就是说明recall会降低,也就是模型变得更加保守。
换句话说,当 a 增加,模型逐渐退化为单一的自编码器,也就是仅仅能识别出比较明显的异常,识别的准确率上升,也就是TP会增加,FP会降低,但同时导致的后果是找出的异常数量下降,也就是Recall的值会下将。而增加 b 的值,会使模型变得更加冒险,因此能找到更多的异常,但同时准确率会降低。与文中的实验结果规律相似。而AE2可以视为一个扰动器,为AE1提供了一定的干扰效果。
KDD 2021
Practical Approach to Asynchronous Multivariate Time Series Anomaly Detection and Localization
论文地址:https://dl.acm.org/doi/10.1145/3447548.3467174
论文源码:https://github.com/eBay/RANSynCoders
论文摘要:考虑从现实世界观察到大量时间序列表现出异步和重复变化特点,提出了一种从多元时序数据集中推断异常的实用方法。总的来讲,该解决方案首先利在预训练自动编码器的潜在表示(latent representation)上进行频谱分析从而提取信号中的主要频率,然后将其用于后续网络,该网络学习信号中的相移并生成原始多元变量的同步表示。然后将同步的多元变量的随机子集输入到一组自动编码器中,以最小化分位数重构损失为目标进行学习,然后用于基于投票规则来推断和定位异常。该文提出的是一种无监督的方法,因为监督学习方法面临着无法获得真实标签的问题。相比之下,通过仿真模拟来获得标签无法代表现实世界异常的真实多样性。而异常通常具有模式不一致、稀缺或未标记的特点,因此采用无监督的深度学习方法是合理且实用的。该文所提出方法有两个理论贡献,第一个是无监督方法假设序列的频谱关系是线性相关的,但忽略了隐藏在多元时间序列的固有的非线性特性;第二个是在实际应用中,时间序列的维度经常被异步地观测,这阻碍了模型权重的学习。
Method
Latent spectral density estimation
训练一个隐含空间大小为1的自编码器,目标是最小化50th分位数,定义为 。然后在单变量潜在表示上利用快速傅立叶变换 (FFT) 进行频谱分析来辨识大小为 S 的频率向量 W 。 W 向量包含理论上在序列特征中占主导地位并普遍存在的频率,其中 S 是足以近似多元时间序列 Y 的正弦分量的数量,这里可以定义为 。
这部分实际上先将多变量时序数据 Y 编码到单变量的隐含状态 Z ,然后在 Z 上进行快速傅里叶变换,最终得到 Z 的频率成分组成 ,其中包含了 S 个频率成分。
Asynchronous multivariate signal model
基于 T 个时间步和 I 个特征对异步多元时序数据进行建模,建模方式如下
其中 S 表示频率成分, 以及 表示特征的索引, 表示频率成分的索引, 表示角频率, 表示幅度,相位以及特征的偏置, 表示噪声。
w 的初始化是基于自编码器学习到的近似最优值。为了学习 ,首先将模型中的中的角度部分线性化展开为 ,其中 。线性化后的形式变得类似于用单位偏置和正弦激活函数训练神经元。这样就可以通过反向传播训练 参数。而噪声项 是通过从拟合的正弦分量中减去原始信号来计算的。
文中给出了一个例子, 显示了使用具有两个频率分量进行建模的特征例子如下图所示,也就是 。这里将某一个特征序列表示为一个拟合的正弦成分以及噪声。
最后还需要将误差表示为时间的函数,文中根据第 i 个特征的第 t 个观测,将噪声表示为
其中 w0 是来自谱密度估计的最高功率的角频率,也就是 W 的 w0 。而原始异步时间序列的 表示为
其中 。
Synchronized representation
基于上面提到的公式,文中将异步的特征采样时间 ,以及异步的相位差 和 对齐到了参考时间戳 ,如下所示
其中 是基于特征的相位移动,它将异步特征上的每一个观测移动至参考时序帧,该操作是特征级别的,也就是说同一个特征的所有观测值具有相同的移动量, 和 分别是原始序列和投影噪声的同步表示。文中仍然给了一个例子来说明,该例子显示了 eBay 从 4 个不同时区的用户活动中收集的 4 个异步特征的示例及其同步表示。
Embedded representation learning
将上述参数估计和多元序列同步表征过程嵌入到整个网络学习过程中,如下图所示。
上述的网络需要两个输入:一个是多元时序数据 Y ,还有一个是特征对应的时间戳矩阵 T 。最终获得的同步表征 将作为后续RANCoders的输入。
RANCoders: Bootstrapped autoencoders for feature-bounds construction
提出了一种利用自动编码器进行异常检测的替代方法。该方法显著利用了同步多元序列增强空间共线性,并且在异步时序数据上表现非常好。
首先,作者认为输入的较小子集应该包含足够的信息,从而以足够的质量重建整个序列。因此,文中利用具有一组 N 个弱深度编码器(weak deep encoders)作为特征bagging模型。这样的机制可以在异常推理时采用少数服从多数的机制。也就是具有N个编码器,可以同时编码输入。
其次,作者认为对于异常检测这个任务来讲,重建输入信号的阈值边界更有效,而不是尝试重建输入,然后进行不可靠的阈值选择过程用于异常推断。
基于以上原则,训练了两组深度解码器,分别为 以及 ,从每个编码器中重建多元时序数据的边界,通过最小化分位数重建损失来进行训练
上面这个公式是针对下界的损失函数,其中, 是重构的边界,LB是下界, n 表示自编码器的索引。针对上界的损失函数与下界损失函数相同,将LB换为UB即可。
Anomaly inference and localization
采用以上方法的两个突出优势是可以实际推断异常并进一步解释多元数据集中异常的潜在来源。但是文中重点讨论了第一个属性,因为潜在来源在数据集中没有基准。
对于异常推断,通过将 RANCoders 输入与解码的边界进行比较,这个过程可以表达为
对于每一个时间步,输出结果均为2维数组,大小为 ,因为在上一个小节中,采用了 N 个弱深度编码器,每个编码器都会有一个结果。然后采用投票的策略,即输出中的 1 多于 0 时,观察结果被标记为异常。
以上就是这篇论文的主要内容,总体来说模型部分还是比较好理解的,主要的特点就是将异步时序数据的同步化表征融入到整个模型框架中。