解读顶会ICDE’21论文:利用DAEMON算法解决多维时序异常检测问题
摘要:该论文针对多维时序数据的异常检测问题,提出了基于GAN和AutoEncoder的深度神经网络算法,并取得了当前State of the Art (SOTA)的检测效果。论文是云数据库创新LAB在轨迹分析层面取得的关键技术成果之一。
本文分享自华为云社区《ICDE'21 DAEMON论文解读》,作者:云数据库创新Lab。
导读
本文( DAEMON: Unsupervised Anomaly Detection and Interpretation for Multivariate Time Series)是由华为云数据库创新Lab联合电子科技大学数据与智能实验室发表在顶会ICDE’21的文章。该文章针对多维时序数据的异常检测问题,提出了基于GAN和AutoEncoder的深度神经网络算法,并取得了当前State of the Art (SOTA)的检测效果。ICDE是CCF推荐的A类国际学术会议,是数据库和数据挖掘领域顶级学术会议之一。该论文是华为云数据库创新LAB在轨迹分析层面取得的关键技术成果之一。
1. 摘要
随着IoT时代的到来,越来越多的传感器采集的时序数据被存储在数据库中,而怎么样处理这些海量数据以挖掘其中的价值是近些年来学术界和工业界热门的研究点。本文研究了多指标时序数据的异常检测问题,以诊断产生时序数据的实体可能存在的异常。
本文的主要贡献如下:
- 提出了DAEMON算法,其算法基于自编码器和GAN结构,自编码器用于重构输入时序数据,GAN结构分别用于约束自编码器的中间输出以及自编码器的重构输出以使自编码器结构的训练过程更加鲁棒并且减少过拟合。
- 本文提出了利用多维异常检测的重构结果进行根因定位的方式
- DAEMON算法能够在测试数据集上击败现有算法
2. 背景
3. 算法设计
图.1 DAEMON的网络结构
A. 算法结构简介
DAEMON算法的总体网络结构如图.1所示,包含了三个网络模块,变分自编码器G_AGA(其中包含编码器G_EGE和解码器G_DGD,编码器和解码器同时作为两个GAN结构中的生成器), 对应编码器的GAN结构判别器D_EDE以及对应解码器的GAN结构判别器D_DDD。
下面简述一下各个网络结构的具体功能
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的性能
图.3 根因定位准确性对比
5. 应用
本算法已经被集成在华为云时序存储与分析组件GaussDB for Influx中,用于监控指标的异常检测与根因定位。
图.4 DAEMON应用场景
6. 总结
在论文中,作者针对多维时序异常检测问题提出了基于变分自编码器以及GAN的DAEMON算法,经过测试,DAEMON算法可以在公开数据集上达到SOTA的性能,并且也能达到SOTA的根因定位能力。其次,DAEMON的训练,检测时间效率也能在现有算法中达到中上水平。
华为云数据库创新lab官网:https://www.huaweicloud.com/lab/clouddb/home.html
解读顶会ICDE’21论文:利用DAEMON算法解决多维时序异常检测问题的更多相关文章
- SA:利用SA算法解决TSP(数据是14个虚拟城市的横纵坐标)问题——Jason niu
%SA:利用SA算法解决TSP(数据是14个虚拟城市的横纵坐标)问题——Jason niu X = [16.4700 96.1000 16.4700 94.4400 20.0900 92.5400 2 ...
- 利用KMP算法解决串的模式匹配问题(c++) -- 数据结构
题目: 7-1 串的模式匹配 (30 分) 给定一个主串S(长度<=10^6)和一个模式T(长度<=10^5),要求在主串S中找出与模式T相匹配的子串,返回相匹配的子串中的第一个字符在主串 ...
- 利用Tarjan算法解决(LCA)二叉搜索树的最近公共祖先问题——数据结构
相关知识:(来自百度百科) LCA(Least Common Ancestors) 即最近公共祖先,是指在有根树中,找出某两个结点u和v最近的公共祖先. 例如: 1和7的最近公共祖先为5: 1和5的 ...
- (原创)数据结构之利用KMP算法解决串的模式匹配问题
给定一个主串S(长度<=10^6)和一个模式T(长度<=10^5),要求在主串S中找出与模式T相匹配的子串,返回相匹配的子串中的第一个字符在主串S中出现的位置. 输入格式: 输入有两行 ...
- 解读ICDE'22论文:基于鲁棒和可解释自编码器的无监督时间序列离群点检测算法
摘要:本文提出了两个用于无监督的具备可解释性和鲁棒性时间序列离群点检测的自动编码器框架. 本文分享自华为云社区<解读ICDE'22论文:基于鲁棒和可解释自编码器的无监督时间序列离群点检测算法&g ...
- 顶会两篇论文连发,华为云医疗AI低调中崭露头角
摘要:2020年国际医学图像计算和计算机辅助干预会议(MICCAI 2020),论文接收结果已经公布.华为云医疗AI团队和华中科技大学合作的2篇研究成果入选. 同时两篇研究成果被行业顶会收录,华为云医 ...
- zz先睹为快:神经网络顶会ICLR 2019论文热点分析
先睹为快:神经网络顶会ICLR 2019论文热点分析 - lqfarmer的文章 - 知乎 https://zhuanlan.zhihu.com/p/53011934 作者:lqfarmer链接:ht ...
- 【数据结构】 最小生成树(四)——利用kruskal算法搞定例题×3+变形+一道大水题
在这一专辑(最小生成树)中的上一期讲到了prim算法,但是prim算法比较难懂,为了避免看不懂,就先用kruskal算法写题吧,下面将会将三道例题,加一道变形,以及一道大水题,水到不用高级数据结构,建 ...
- 利用KD树进行异常检测
软件安全课程的一次实验,整理之后发出来共享. 什么是KD树 要说KD树,我们得先说一下什么是KNN算法. KNN是k-NearestNeighbor的简称,原理很简单:当你有一堆已经标注好的数据时,你 ...
- 实战--利用Lloyd算法进行酵母基因表达数据的聚类分析
背景:酵母会在一定的时期发生diauxic shift,有一些基因的表达上升,有一些基因表达被抑制,通过聚类算法,将基因表达的变化模式聚成6类. ORF Name R1.Ratio R2.Ratio ...
随机推荐
- kubernetes组件介绍-service概念
kubernetes组件介绍 MESOS APACHE 分布式资源管理框架 2019-5 Twitter > Kuberneets Dcocker Swarm 2019-07 阿里云宣布 Doc ...
- 数据结构与算法 | 哈希表(Hash Table)
哈希表(Hash Table) 在二分搜索中提到了在有序集合中查询某个特定元素的时候,通过折半的方式进行搜索是一种很高效的算法.那能否根据特征直接定位元素,而非折半去查找?哈希表(Hash Table ...
- 题解 P9326
前言 数学符号约定 \(n\):任意正整数. \(\#\):从未出现过的小写字母. \(\Sigma\):字符集,这里指小写字母集合. \(S\):最终答案的字符矩阵. 其余符号同题目翻译中所写. 如 ...
- L3-013 非常弹的球
初速度:\(v = \sqrt{\cfrac{2 * E}{m}};\) 竖直速度:\(v_y = v \,sin(ans) = g * t\) 水平距离:\(s = v_x * 2t = v \, ...
- 平台工程时代的 Kubernetes 揭秘:2023年生产状况报告深度剖析
Kubernetes 在生产环境中的复杂性已经成为常态,在2023年这个平台工程盛行的时代,容器管理的最大亮点可能在于其灵活性,然而在运维政策和治理等方面仍然存在诸多挑战.八年过去了,在生产环境中使用 ...
- Linux机器在命令行操作时开启/关闭代理
命令行操作时,如果需要连接通过代理才能访问的地址,可以通过配置当前shell的配置文件来手动开启/关闭代理 注意:代理只对当前用户当前shell生效,切换用户或者重新连接需要重新开启代理 修改当前用户 ...
- 一篇文章带你掌握Web自动化测试工具——Selenium
一篇文章带你掌握Web自动化测试工具--Selenium 在这篇文章中我们将会介绍Web自动化测试工具Selenium 如果我们需要学习相关内容,我们需要掌握Python,PyTest以及部分前端知识 ...
- 文心一言 VS 讯飞星火 VS chatgpt (148)-- 算法导论12.2 3题
三.用go语言,写出过程 TREE-PREDECESSOR 的伪代码. 文心一言: 以下是使用Go语言编写的TREE-PREDECESSOR函数的伪代码: func TREE-PREDECESSOR( ...
- 分享一个LCD驱动框架
首先需要说明的是本篇文章不是关于如何点亮一块LCD屏的教程,而是介绍一个LCD开发框架,更准确的说是介绍一个LCD的中间件(Middlwware),用来连接UI和不同类型的LCD屏.笔者本人的工作内容 ...
- Markdown 跳转到本文章标题
一.只可以在Markdown文件中跳转 1.因为 Markdown 文件标题就是 Markdown 一种锚点 任何级别的标题可以直接作为锚点目标.如果标题比较固定(不是经常改来改去),可以直接使用标题 ...