TL;DR
针对云系统中的脏数据问题,论文中提出一种无监督的异常检测模型 TopoMAD (topology-aware multivariate time series anomaly detector) ,该模型通过随机的 seq2seq 变分自动编码器模型来表示云系统数据的时空特征。系统拓扑和时序信息是指不同组件间根据滑动窗口聚合的指标数据,然后分别使用 GCN 和 LSTM 来提取系统空间特征和时序特征。实验部分在两个数据集中验证了论文提出的模型优于其它 baselines。
Problem Statement
对于拓扑多变量时间序列的异常检测任务是:给定个历史滑动窗口的数据S(Xt∣Xt−W:t−1,E) 来判定观测点Xt 的数据是否异常。论文中使用的符号表示如下图所示:
Model / Algorithm
文中先简单陈述了所涉及的基础模型包括 GCN,GAT,LSTM 和 VAE 等,在此不再赘述。
详细内容可以参考博主其它文章:
论文中 TopoMAD 整体的模型架构如下图所示:
主要包含一下流程:
- Data Integration and Preprocessing
- Building Block: GraphLSTM
- Network Architecture
- Offline Model Training
- Computing Anomaly Scores
- Threshold Selection
数据处理
给定一个集群节点示例如下图所示:
论文中仅考虑按照时间窗口聚合的指标数据和静态图结构,但是实际生产环境由于变更和负载均衡等原因,拓扑图往往是动态的,这应该如何解决呢?🧐 🤔
GraphLSTM
结合了 GCN/GAT 和 LSTM 的模块 GraphLSTM 作为模型的特征提取模块,架构图如下图所示。
⚠️ 这一项 novelty 并不够,因为就我所知在非常多的 paper 中已经用过了,主要的计算公式如下所示:
ftitgtctotht=sigmoid(Wf∗G([ht−1,xt],E)+bf)=sigmoid(Wi∗G([ht−1,xt],E)+bi)=tanh(Wg∗G([ht−1,xt],E)+bg)=ft∗ct−1+it∗gt=sigmoid(Wo∗G([ht−1,xt],E)+bo)=ot∗tanh(ct)
其中∗G 表示图卷积操作,∗ 表示 Hadamard product (即矩阵对应元素相乘);
模型架构和离线训练
TopoMAD 主要框架是 stochastic seq2seq auto-encoder,接下来就是 GraphLSTM 的堆积过程了。
训练的模型和推断的模型不太一样,这稍微的区别就体现在下面 “teacher forcing”,主要流程如下图所示;
训练时的模型使用一个超参数λ 来控制概率来选择输入是原始序列还是重构的序列,这就是所谓的 teacher forcing?
采用 variational lower bound on the marginal likelihood,训练的损失函数如下:
L(θ,ϕ;Xt0:t)==−DKL(qϕ(zt∣Xt0:t)∥pθ(zt))+Eqϕ(zt∣Xt0:t)(log(pθ(Xt0:t∣zt)))−DKL(qϕ(zt∣Xt0:t)∥N(0,I))+L1l=1∑Lj=t0∑tlog(pθ(Xj∣zt(l),Xj+1:t))
异常分数计算
在观测点Xt 时通过重构概率计算得到的异常分数,计算方法如下所示:
tempSt=−Eqϕ(zt∣Xt0:t)(log(pθ(Xt∣zt)))
由于输入的是时间序列,前W−1 个观测点同样可以计算异常分数来优化当前时刻的异常分数计算,因此整体的计算公式如下:
St=−L∗D1d=0∑D−1l=1∑Llog(pθ(Xt∣zt+d(l),Xt+1:t+d))
其中L 表示采样数量,D 表示采用前多少个观测点;
对于系统中的每个组件的异常分数,可以计算所有节点相对重构概率较低且异常分数较大的值:
St=−0≤i<NmaxL∗D1d=0∑D−1l=1∑Llog(pθ(Xti∣zt+d(l),Xt+1:t+d))
其中N 表示系统中组件数量,Xti 表示组件i 在t 时刻的指标值。
阈值选择
论文中通过训练集中的异常分数集合来选择阈值。一般情况下正常数据集合的异常分数和异常数据集合的异常分数间的 gap 比较大,因此来定义一种方法来计算这两个数据集合的距离,使得距离最大的异常分数τ 就是异常阈值,计算分数如下所示:
d(S<τ,S>τ)=min(S>τ)+max(S<τ)−2∗min(S<τ)min(S>τ)−max(S<τ)
Experiments
论文中采用了两个数据集且数据是开源的,特征如下表所示:
采用的评价指标主要包括AP,mAP 和 F1,计算公式如下:
PAP=TP+FPTP,R=TP+FNTP=i∑(Ri−Ri−1)Pi,mAP=N( Classes )∑APC
F1=2⋅P+RP⋅R
其中Pi 和Ri 分别表示第i 个阈值对应的准确率和召回率。mAP 表示所有类别平均的准确率。
实验效果如下所示,就不再分析实验过程,整体都比以前点高;
Thoughts
- 模型复杂在生产环境上不具有任何的可用性;
- 模型堆积者创新性不够;
- 实验部分较为全面可以参考;
联系作者