摘要:该论文针对多维时序数据的异常检测问题,提出了基于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算法解决多维时序异常检测问题的更多相关文章

  1. 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 ...

  2. 利用KMP算法解决串的模式匹配问题(c++) -- 数据结构

    题目: 7-1 串的模式匹配 (30 分) 给定一个主串S(长度<=10^6)和一个模式T(长度<=10^5),要求在主串S中找出与模式T相匹配的子串,返回相匹配的子串中的第一个字符在主串 ...

  3. 利用Tarjan算法解决(LCA)二叉搜索树的最近公共祖先问题——数据结构

    相关知识:(来自百度百科)  LCA(Least Common Ancestors) 即最近公共祖先,是指在有根树中,找出某两个结点u和v最近的公共祖先. 例如: 1和7的最近公共祖先为5: 1和5的 ...

  4. (原创)数据结构之利用KMP算法解决串的模式匹配问题

      给定一个主串S(长度<=10^6)和一个模式T(长度<=10^5),要求在主串S中找出与模式T相匹配的子串,返回相匹配的子串中的第一个字符在主串S中出现的位置. 输入格式: 输入有两行 ...

  5. 解读ICDE'22论文:基于鲁棒和可解释自编码器的无监督时间序列离群点检测算法

    摘要:本文提出了两个用于无监督的具备可解释性和鲁棒性时间序列离群点检测的自动编码器框架. 本文分享自华为云社区<解读ICDE'22论文:基于鲁棒和可解释自编码器的无监督时间序列离群点检测算法&g ...

  6. 顶会两篇论文连发,华为云医疗AI低调中崭露头角

    摘要:2020年国际医学图像计算和计算机辅助干预会议(MICCAI 2020),论文接收结果已经公布.华为云医疗AI团队和华中科技大学合作的2篇研究成果入选. 同时两篇研究成果被行业顶会收录,华为云医 ...

  7. zz先睹为快:神经网络顶会ICLR 2019论文热点分析

    先睹为快:神经网络顶会ICLR 2019论文热点分析 - lqfarmer的文章 - 知乎 https://zhuanlan.zhihu.com/p/53011934 作者:lqfarmer链接:ht ...

  8. 【数据结构】 最小生成树(四)——利用kruskal算法搞定例题×3+变形+一道大水题

    在这一专辑(最小生成树)中的上一期讲到了prim算法,但是prim算法比较难懂,为了避免看不懂,就先用kruskal算法写题吧,下面将会将三道例题,加一道变形,以及一道大水题,水到不用高级数据结构,建 ...

  9. 利用KD树进行异常检测

    软件安全课程的一次实验,整理之后发出来共享. 什么是KD树 要说KD树,我们得先说一下什么是KNN算法. KNN是k-NearestNeighbor的简称,原理很简单:当你有一堆已经标注好的数据时,你 ...

  10. 实战--利用Lloyd算法进行酵母基因表达数据的聚类分析

    背景:酵母会在一定的时期发生diauxic shift,有一些基因的表达上升,有一些基因表达被抑制,通过聚类算法,将基因表达的变化模式聚成6类. ORF Name R1.Ratio R2.Ratio ...

随机推荐

  1. C++常见算法&数据结构模版

    各种常见算法 & 数据结构模板 1. 最长不下降子序列(LIS) 1.1 \(O(n^2)\) 做法 点击查看代码 for (int i = 1;i <= n;i++) { cin &g ...

  2. Error resolving template [sys/prod/prod/list], template might not exist or might not be accessible by any of the configured Template Resolvers

    新的商城模板调试接口,一个商品列表的接口调用,返回报错 org.thymeleaf.exceptions.TemplateInputException: Error resolving templat ...

  3. JUC并发编程学习笔记(九)阻塞队列

    阻塞队列 阻塞 队列 队列的特性:FIFO(fist inpupt fist output)先进先出 不得不阻塞的情况 什么情况下会使用阻塞队列:多线程并发处理.线程池 学会使用队列 添加.移除 四组 ...

  4. JUC并发编程学习笔记(十五)JMM

    JMM 请你谈谈对Volatile的理解 Volatile是java虚拟机提供的轻量级的同步机制 1.保证可见性 2.不保证原子性 3.禁止指令重排 什么是JMM JVM->java虚拟机 JM ...

  5. WebSocket魔法师:打造实时应用的无限可能

    1.背景 在开发一些前端页面的时候,总是能接收到这样的需求:如何保持页面并实现自动更新数据呢?以往的常规做法,是前端使用定时轮询后端接口,获取响应后重新渲染前端页面,这种做法虽然能达到类似的效果,但是 ...

  6. AcWing 456. 车站分级

    原题链接AcWing 456. 车站分级 抽象出题意,停靠过的车站的等级一定严格大于为停靠过的车站的等级,且不存在环,例如车站\(A\)等级大于车站\(B\),则\(A >= B + 1\),不 ...

  7. JavaWeb项目中web.xml配置文件<servlet-class>…</servlet-class>中的路径出现问题以及服务器错误的解决办法

    问题如图 原因: 1.改变了 WEB-INF 文件夹下 lib 文件夹下 servlet-api.jar 的路径2.缺失lib文件夹下的 servlet-api.jar,没有添加到库中 解决办法: 不 ...

  8. 时间复杂度为 O(n^2) 的排序算法

    对于小规模数据,我们可以选用时间复杂度为 O(n2) 的排序算法.因为时间复杂度并不代表实际代码的执行时间,它省去了低阶.系数和常数,仅代表的增长趋势,所以在小规模数据情况下, O(n2) 的排序算法 ...

  9. video和表单组件(不常用 类型太少)

    h5不能自动播放,只有在静音的前提下才能 button:(种类太少 不能满足需求) <button size="mini" type="primary" ...

  10. 使用SPEL自定义表达式

    自定义表达式 Spring提供了一个可以自定义表达式的接口 package com.qbb.qmall.item; import org.junit.Test; import org.springfr ...