解读顶会 ICDE’21 论文:利用 DAEMON 算法解决多维时序异常检测问题
摘要: 该论文针对多维时序数据的异常检测问题,提出了基于 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. 背景
多维异常检测问题:系统在每一个时间点都会采集到维度为 MM 的数据 x_t\in R^Mxt∈RM。多维异常检测的目标是,给与当前时间点 x_txt往前数长度为\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_txt的数据是否存在异常。
异常定位问题:在异常检测以后,需要定位多维指标到底哪一个指标出了问题。
基于重构的异常检测问题:在基于重构的异常检测问题中,一般利用自编码器 G_AGA对数据进行重构,即 W'_{x_t}=G_A(W_{x_t})Wxt′=GA(Wxt),之后,取重构序列的最后一个点 x'_txt′作为 x_txt的重构并求取距离\|x_t-x'_t\|∥xt−xt′∥作为异常得分并对比门限判断系统是否异常。
3. 算法设计
图.1 DAEMON 的网络结构
A. 算法结构简介
DAEMON 算法的总体网络结构如图.1 所示,包含了三个网络模块,变分自编码器 G_AGA(其中包含编码器 G_EGE和解码器 G_DGD,编码器和解码器同时作为两个 GAN 结构中的生成器), 对应编码器的 GAN 结构判别器 D_EDE以及对应解码器的 GAN 结构判别器 D_DDD。
下面简述一下各个网络结构的具体功能
变分自编码器:学习输入序列的正常趋势并得到输入序列的重构。由于重构是基于数据的正常分布,其与输入的欧式距离即可用于判断输入数据是否存在异常。
判别器 D_EDE:变分自编码器的中间输出服从分布 q(z)q(z),为了约束这个分布以提高重构的鲁棒性和减少重构的过拟合效应,算法规定了一个约束分布 p(z)p(z)并用判别器 D_EDE来对比 q(z)q(z)与 p(z)p(z)的差别来让 q(z)q(z)更接近于 p(z)p(z)。这一种思想源自于 AdversarialAutoEncoder,是一种约束变分自编码器中间输出的好方法。
判别器 D_DDD:为了让变分自编码器的重构输出 W'_{x_t}Wxt′更接近于输入以学习输入数据的分布,一般情况下会令损失函数为输入和输出的距离。然而,单独用范数距离并不一定能准确刻画输入和输出的相似性。因此,DAEMON 算法提出利用 GAN 的判别器进一步来辨认输出和重构的相似性。
B. 数据预处理
数据清洗:利用 spectral residual 算法首先清理掉训练数据集中可能存在的异常点,这样一来,VAE 将会更准确的学习到时间序列的正常分布。
数据归一化:本文利用 MINMAX 归一化方式对训练以及测试数据进行归一化。
C. 线下训练过程
DAEMON 的网络包含三个模块,一个变分自编码器,两个 GAN 结构的判别器。由于 GAN 结构网络需要异步训练,因此,DAEMON 结构对应了三个异步的训练过程,每个训练规程都对应了各自的优化器以及损失函数。
下面分别介绍各个模块:
GAN 结构 1:GAN 结构 1 中,生成器对应的是变分自编码器的编码器部分 G_EGE,而判别器对应的是 D_EDE,此 GAN 结构的目的是约束生成器的分布 q(z)q(z) 。由 GAN 的标准损失函数公式可以推导出生成器和判别器的损失函数分别为
GAN 结构 2:GAN 结构 2 中,生成器对应的是变分自编码器中的解码器部分 G_DGD,判别器对应的是 D_DDD,此 GAN 结构的目的是进一步约束自编码器的输出以让自编码器更好的学习时序数据的正常分布。和上面相似,生成器和判别器的损失函数为
变分自编码器模块:变分自编码器用于数据的重构,其自身的损失函数用输入和输出的一范数距离定义
注意。GAN 结构 1,2 中的判别器损失函数都只涉及到判别器本身,在训练的时候,可以直接用(1),(3)进行训练,而生成器的损失函数和变分自编码器的损失函数同时涉及到一个公共的模块,即变分自编码器本身,因此,在训练自编码器网络时,实际上要同时训练三个损失函数,具体的方法为,令三个损失函数的加权和为变分自编码器的损失函数,即
在线下训练时,依次针对公式(1),(3),(6)进行训练。
D. 在线检测过程
在线数据 W_{x_t}Wxt输入到检测器后,得到重构 W'_{x_t}Wxt′,之后把被检测点 x_txt和被检测点的重构 x'_txt′做比较以求取异常得分,即
E. 根因分析
从公式(7)中可以看出,异常得分实际上是由每一个维度的误差所加和得出的,因此,在根因定位的时候,直接从 S_{x_t}^jSxtj中找出最大的 kk 个得分对应的指标既可视为根因可能出现的位置。
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 的性能
5. 应用
本算法已经被集成在华为云时序存储与分析组件 GaussDB for Influx 中,用于监控指标的异常检测与根因定位。
图.4 DAEMON 应用场景
6. 总结
在论文中,作者针对多维时序异常检测问题提出了基于变分自编码器以及 GAN 的 DAEMON 算法,经过测试,DAEMON 算法可以在公开数据集上达到 SOTA 的性能,并且也能达到 SOTA 的根因定位能力。其次,DAEMON 的训练,检测时间效率也能在现有算法中达到中上水平。
华为云数据库创新 lab 官网:https://www.huaweicloud.com/lab/clouddb/home.html
版权声明: 本文为 InfoQ 作者【华为云开发者社区】的原创文章。
原文链接:【http://xie.infoq.cn/article/18fa01b6a42f68fa933b29fb8】。文章转载请联系作者。
评论