模型简介
如何从多维时序数据(如传感器数据)中发现异常事件比如系统错误或者攻击呢? 我们怎样去捕获传感器之间的复杂关系呢?并利用这些关系来检测并解释偏离关系的异常事件呢? 本文尝试提出一种名叫Graph Deviation Network (GDN) 的方法来解决这些问题,通过在两个实际数据集上进行实验证明该方法比基准方法在准确性上更好,并且具有可解释方便用户定位和理解异常行为。
先来正式的定义一下问题,假设我们有来自N个传感器的 个时间步的数据
, 其中每一个时间步t的传感器数据
, 注意训练数据中不能包括异常数据。我们的目标是检测来自相同的N个传感器但是时间段不一样的测试数据中的异常,测试数据即
, 我们的输出为
个二元标签, 每个标签表示是否有异常产生,即
, a(t)=1表示检测到数据异常。
论文提出的框架图如下图1所示,由四个部分组成:
Sensor Embedding:使用嵌入向量来表示每个传感器独特性
Graph Structure Learnng: 学习一个图结构来表示传感器之间的依赖
Graph Attention-Base Forecasting:通过传感器与其相邻传感器的注意力函数预测每个传感器的值
Graph Deviation Scoreing:通过学习到的关系来识别出现的偏差,并定位和解释它们
![](https://img-blog.csdnimg.cn/img_convert/7c27aa4f0b2d9ca92bf906a245e5f424.png)
图1 GDN的框架图
Sensor Embedding
引入长度为d为的embedding 向量来表示每个传感器:, 向量一开始被随机初始化,然后跟模型其他部分一起训练。 (在论文中,对于数据集WADI的向量维度为128, 数据集SWaT的维度为64)
作者认为向量之间的相似性代表了传感器行为的相似性,所以当传感器之间的嵌入向量的相似度很高时,表明传感器之间关系也很密切,嵌入向量将有两个用处:
学习图结构时,向量被用来决定哪些传感器彼此相关
在注意力机制中,以一种允许不同类型传感器产生异质效应的方式对邻居进行attention。
Graph Structure Learning
使用有向图来表示传感器之间的关系,每一个传感器作为图中的一个节点,节点之间的边表明传感器之间有依赖关系,从A节点指向B节点的边表示A节点会用来建模B节点的行为。 使用有向图意在说明传感器之间的关系不是对称的,使用邻接矩阵A来表示有向图。
对于每个传感器i定义了一个候选关系 来表示i依赖于哪些传感器,如下式表示,当没有先验信息的时候,
为除了它自己的所有节点,当有先验信息的时候,
就为先验定义的传感器集合。
通过计算节点i的嵌入向量与 中其他节点j的嵌入向量的归一化向量点积来衡量节点i与其他节点之间的依赖关系,取topK个节点生成k条到i的边,用公式表示的话,即:
k的大小是一个超参数,由用户根据想要的图的稀疏程度来确定(在论文中,对于数据集WADI的k为30, 数据集SWaT的维度为15)
Graph Attention-Based Forecasting
模型的目的是根据传感器过去的数据来预测传感器当前时刻点t的取值; 在时刻t, 定义模型的输入
为滑动窗口大小为w的历史时序数据。 (在论文中,对于数据集WADI和SWaT的滑动窗口大小都为5)
模型使用了前面学到的图结构,将一个节点的信息表示为它自己及邻居节点信息的融合,融合时使用了注意力机制,这里使用的注意力机制比较特殊的一点是将前面学习到的传感器向量连接到了一起,将i节点的信息表示记为, 如下式所示,式中
是节点i的输入数据,
是从前面学习到的邻接矩阵A得到的邻居集合,
是所有节点共享的待学习参数:
上式中的注意力系数计算如下面所列, 式中的表示连接操作,
是注意力机制学到的系数向量:
当得到N个节点的表示 后,对于每一个
,我们将其与对应的嵌入向量
的逐个元素相乘(表示为◦),并使用所有节点上的结果作为具有输出维度N的堆叠全连通层的输入,以预测时间步长t处的传感器值的向量
,预测值
为:
损失函数定义为
Graph Deviation Scoring
训练完模型后, 对于每一个传感器i, 在时刻t, 定义错误值 Err 为
因为不同的传感器的取值的标称可能不一样,为了避免一个传感器的值主要占支配地位的情况,进行归一化,式中是中位数,
是IQR(inter-quartile range, 3/4 分位数-1/4分位数):
为了得到在时刻t的总体异常,使用max函数,即
为了抑制数值的突然变化,使用了simple moving average(SMA) 得到了平滑的分数, 设置一个固定阈值,在时刻t时,如果
大于该阈值,则将该时刻标记为异常(在本文的实验中,将验证集上的最大异常分数设置为阈值)
实验部分
代码已开源,使用Pytorch和PyTorch Geometric Library实现, 使用Adam 优化器(学习率为,
, 训练轮数为50, 使用了patience=10的early stop
通过使用两个水厂相关的数据集WADI和SWaT,证明论文中提出的方法相比其他5种异常检测方法的准确率都要好,再通过消融实验比较了图中几个模块的重要性(注意力机制是最重要的,在注意力机制中加入嵌入向量第二重要,动态图结构第三重要,但是每一个模块对于提升最终的结果都有帮助),在可解释性和定位异常传感器上是通过可视化来说明的。
参考资料
Ailin Deng and Bryan Hooi. “Graph Neural Network-Based Anomaly Detection in Multivariate Time Series..” Cornell University - arXiv(2021): n. pag.