前言
KDD20的paper
链接:https://dl.acm.org/doi/pdf/10.1145/3394486.3403392
代码链接:https://github.com/manigalati/usad
一、摘要
在摘要中主要指出了本文的难题引出本文的方法。
原因出自Orange公司的IT系统的自动监测。由于系统的整体的规模和复杂性,随着时间的推移,用于推断正常和异常行为的测量所需的传感器数量急剧增加,使传统的基于专家的监督方法变慢或容易出错。
所以本文提出了一个非监督方法,而前面所说的通过多传感器数据来推断系统正常或异常的问题其实就是多变量时间序列异常检测问题。
最后该方法在五种公共数据集上以及Orange公司提供的真实数据集上进行测试。
二、相关方法
这里文中给出了一些,再加上自己的一些积累,顺便简单总结一些。
基于分布的方法:3-sigma,z-score
基于聚类的方法:kmeans,GMM,DBSCAN等
基于距离的方法:KNN等
基于密度的方法:LOF等
基于分类的方法:Oneclass-SVM等
基于树的方法:iforest等
基于降维的方法:PCA,AE等
基于预测的方法:时序预测之后看差距(这里约等于时序预测的方法)
基于深度学习的方法:DAGMM,LSTM-VAE,VAE等
主要针对多变量时间序列的异常检测深度学习方法:MTAD_GAT,OmniAnomaly,GDN等
文中主要提到一个非常重要的一点,就是算法的性能(使用的硬件资源+运行速度)这个角度,很多算法都没有考虑和测试。当然这两个指标对于一个算法服务化以及响应性能也是十分重要的。
三、 问题定义
这里文章中写了一部分内容(主要涉及很多标准化的公式),这边我直接用简单直接的方式快速阐述一下
一个单变量时间序列肯定很多人都很熟悉了,一般来说是等间隔的序列,故每隔一定的时间有一个数据。
而多变量时间序列就是对应于每一个时刻变成多个维度的序列。
从维度(1, T)->(N, T),其中N代表N个时间序列。
而对于多变量时间序列异常检测,区别于多变量流的异常检测。
前者是 多变量的变化代表某一时刻的整体的异常:比如机器的很多指标出现一个整体或单一的变化代表着机器出现异常。
后者大多代表,时序有很多单一的线,比如有一万多时间序列,每一条时间序列都要检测出对应的异常情况,对于每一条时间序列本质还是单变量时间序列异常检测场景。
更多可以参考论文的描述,很清晰。
四、模型
4.1 基础模型
这里的基础模型就是AE,广泛应用于异常检测场景下,整理简略来说 降维和重构之后来比较和输入的差距,通过与阈值的大小比较来定义是否为异常状态。
训练过程也是计算两者的差距最为训练的目标,也就是loss,一般采用L2 loss也就是均方根loss
4.2 最终模型
4.2.1 训练方式
这里引入了,两个decoder,并且借鉴GAN的训练方式,这可能是本文比较大的创新。
这里图也画的也很直白与直观。
首先第一步:训练两个AE,使得拥有良好的数据重构能力。
其次第二步:借鉴GAN的训练模式思想,对抗的训练两个网络,即训练AE2能够很好的区别AE1属出的数据的真实与否,通俗点说,就是AE2更好的分辨哪些是真实数据,哪些是AE1重构的数据。用AE1迷惑AE2,所以AE1的目标是最小化AE2(AE1(W))与W的不同,相反AE2想要更好的区别两者,即最大化不同。
总体的loss是这样
文章出处登录后可见!