摘要: 该论文针对多维时序数据的异常检测问题,提出了基于GAN和AutoEncoder的深度神经网络算法,并取得了当前State of the Art (SOTA)的检测效果。论文是云数据库创新LAB在轨迹分析层面取得的关键技术成果之一。
本文分享自华为云社区《ICDE'21 DAEMON论文解读》,作者:云数据库创新Lab。
导读
本文( DAEMON: Unsupervised Anomaly Detection and Interpretation forMultivariate Time Series)是由华为云数据库创新Lab联合电子科技大学数据与智能实验室发表在顶会ICDE’21的文章。该文章针对多维时序数据的异常检测问题,提出了基于GAN和AutoEncoder的深度神经网络算法,并取得了当前State of the Art(SOTA)的检测效果。ICDE是CCF推荐的A类国际学术会议,是数据库和数据挖掘领域顶级学术会议之一。该论文是华为云数据库创新LAB在轨迹分析层面取得的关键技术成果之一。
1. 摘要
随着IoT时代的到来,越来越多的传感器采集的时序数据被存储在数据库中,而怎么样处理这些海量数据以挖掘其中的价值是近些年来学术界和工业界热门的研究点。本文研究了多指标时序数据的异常检测问题,以诊断产生时序数据的实体可能存在的异常。
本文的主要贡献如下:
-
提出了DAEMON算法,其算法基于自编码器和GAN结构,自编码器用于重构输入时序数据,GAN结构分别用于约束自编码器的中间输出以及自编码器的重构输出以使自编码器结构的训练过程更加鲁棒并且减少过拟合。
-
本文提出了利用多维异常检测的重构结果进行根因定位的方式
-
DAEMON算法能够在测试数据集上击败现有算法
2. 背景
多维异常检测问题:系统在每一个时间点都会采集到维度为M_M_ 的数据x_t\in R^M_xt_∈_RM_。多维异常检测的目标是,给与当前时间点x_t_xt_往前数长度为\Delta tΔ_t_数据窗口W_{x_t}=\{x_{t-\Deltat-1},x_{t-\Delta t-1},...,x_t\}_Wxt_={_xt_−Δ_t_−1,_xt_−Δ_t_−1,...,_xt_}, 检测当前时间点x_t_xt_的数据是否存在异常。
异常定位问题:在异常检测以后,需要定位多维指标到底哪一个指标出了问题。
基于重构的异常检测问题:在基于重构的异常检测问题中,一般利用自编码器G_A_GA_对数据进行重构,即W'_{x_t}=G_A(W_{x_t})_Wxt_′=GA_(Wxt_),之后,取重构序列的最后一个点x'_t_xt′作为x_t_xt_的重构并求取距离\|x_t-x'_t\|∥_xt_−_xt′∥作为异常得分并对比门限判断系统是否异常。
3. 算法设计
图.1 DAEMON的网络结构
A. 算法结构简介
DAEMON算法的总体网络结构如图.1所示,包含了三个网络模块,变分自编码器G_A_GA_(其中包含编码器G_E_GE_和解码器G_D_GD_,编码器和解码器同时作为两个GAN结构中的生成器), 对应编码器的GAN结构判别器D_E_DE_以及对应解码器的GAN结构判别器D_D_DD_。
下面简述一下各个网络结构的具体功能
-
变分自编码器:学习输入序列的正常趋势并得到输入序列的重构。由于重构是基于数据的正常分布,其与输入的欧式距离即可用于判断输入数据是否存在异常。
-
判别器D_E_DE_:变分自编码器的中间输出服从分布q(z)q(z),为了约束这个分布以提高重构的鲁棒性和减少重构的过拟合效应,算法规定了一个约束分布p(z)p(z)并用判别器D_E_DE_来对比q(z)q(z)与p(z)p(z)的差别来让q(z)q(z)更接近于p(z)p(z)。这一种思想源自于AdversarialAutoEncoder,是一种约束变分自编码器中间输出的好方法。
-
判别器D_D_DD_:为了让变分自编码器的重构输出W'_{x_t}_Wxt_′更接近于输入以学习输入数据的分布,一般情况下会令损失函数为输入和输出的距离。然而,单独用范数距离并不一定能准确刻画输入和输出的相似性。因此,DAEMON算法提出利用GAN的判别器进一步来辨认输出和重构的相似性。
B. 数据预处理
-
数据清洗:利用spectral residual算法首先清理掉训练数据集中可能存在的异常点,这样一来,VAE将会更准确的学习到时间序列的正常分布。
-
数据归一化:本文利用MINMAX归一化方式对训练以及测试数据进行归一化。
C. 线下训练过程
DAEMON的网络包含三个模块,一个变分自编码器,两个GAN结构的判别器。由于GAN结构网络需要异步训练,因此,DAEMON结构对应了三个异步的训练过程,每个训练规程都对应了各自的优化器以及损失函数。
下面分别介绍各个模块:
GAN结构1:GAN结构1中,生成器对应的是变分自编码器的编码器部分G_E_GE_,而判别器对应的是D_E_DE_,此GAN结构的目的是约束生成器的分布q(z)q(z) 。由GAN的标准损失函数公式可以推导出生成器和判别器的损失函数分别为
GAN结构2:GAN结构2中,生成器对应的是变分自编码器中的解码器部分G_D_GD_,判别器对应的是D_D_DD_,此GAN结构的目的是进一步约束自编码器的输出以让自编码器更好的学习时序数据的正常分布。和上面相似,生成器和判别器的损失函数为
变分自编码器模块:变分自编码器用于数据的重构,其自身的损失函数用输入和输出的一范数距离定义
注意。GAN结构1,2中的判别器损失函数都只涉及到判别器本身,在训练的时候,可以直接用(1),(3)进行训练,而生成器的损失函数和变分自编码器的损失函数同时涉及到一个公共的模块,即变分自编码器本身,因此,在训练自编码器网络时,实际上要同时训练三个损失函数,具体的方法为,令三个损失函数的加权和为变分自编码器的损失函数,即
在线下训练时,依次针对公式(1),(3),(6)进行训练。
D. 在线检测过程
在线数据W_{x_t}_Wxt_输入到检测器后,得到重构W'_{x_t}Wxt_′,之后把被检测点x_t_xt_和被检测点的重构x'_t_xt′做比较以求取异常得分,即
E. 根因分析
从公式(7)中可以看出,异常得分实际上是由每一个维度的误差所加和得出的,因此,在根因定位的时候,直接从S_{x_t}^j_Sxt__j_中找出最大的k_k_个得分对应的指标既可视为根因可能出现的位置。
4. 实验
4.1 环境设定
在仿真中,作者对比了四个常用且公开的时序异常检测数据集,即SMD, SMAP, MSL, SWaT数据集。下面是各个数据集的具体指标。
作者在仿真中对比的指标为precision, recall以及F1-score。
在对比算法方面,作者对比了8种现有的算法,其中VAE算法是DAEMON去掉GAN结构后的结构,目的是为了测试GAN约束的有效性。为了体现本文GAN结构的有效性以及创新型,作者还对比了另外两种利用GAN结构的异常检测算法GANomaly以及BeatGAN。其次,OmniAnomaly是业界著名AIOps团队,北大的裴丹教授团队发表在KDD上的异常检测算法。
下表是作者公布的参数设置
4.2 检测结果
仿真对比结果如下表所示
可以看到,在四个公开数据集上,DAEMON都能达到SOTA的效果。
4.3 时间消耗
同时,从训练时间和检测时间来看,DAEMON算法也能在现有算法中达到中上的水平
图.2 训练检测时间对比
4.4 根因定位
最后,作者对比了根因定位的准确性,DAEMON也能在对比算法中达到SOTA的性能
图.3 根因定位准确性对比
5. 应用
本算法已经被集成在华为云时序存储与分析组件GaussDB for Influx中,用于监控指标的异常检测与根因定位。
图.4 DAEMON应用场景
6. 总结
在论文中,作者针对多维时序异常检测问题提出了基于变分自编码器以及GAN的DAEMON算法,经过测试,DAEMON算法可以在公开数据集上达到SOTA的性能,并且也能达到SOTA的根因定位能力。其次,DAEMON的训练,检测时间效率也能在现有算法中达到中上水平。
华为云数据库创新lab官网:www.huaweicloud.com/lab/clouddb…