《异常检测——从经典算法到深度学习》16 基于VAE和LOF的无监督KPI异常检测算法

Posted smile-yan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《异常检测——从经典算法到深度学习》16 基于VAE和LOF的无监督KPI异常检测算法相关的知识,希望对你有一定的参考价值。

《异常检测——从经典算法到深度学习》

相关:

16. 基于VAE和LOF的无监督KPI异常检测算法

论文名称:Unsupervised Anomaly Detection with VariationalAuto-Encoder and Local Outliers Factor for KPIs
发表于 ISPA 2021
下载地址:http://www.cloud-conf.net/ispa2021/
会议PPT:LOF-VAE-PPT
个人翻译地址:这篇论文比较简单,没有进行翻译了。见谅。
论文源码未能找到,抱歉。

这是一篇比较简单的论文(简单到不想翻译的那种),全场没有什么复杂的东西,除了没有源码,其他的都还好。读这篇论文可以思考一下,如何结合多个模型,达到更好的效果,也就是所谓的 hybrid model。尽管论文全场没有出现这个词汇,但是论文模型名字叫作 LOF-VAE,就可以看出是什么意思了。

另外,尽管没有提供源代码,由于这篇论文简单,小伙伴们可以考虑简单的实现一下。

16.1 论文概述

首先读一下 contributions 如下:

  • 第一个结合 LOF 和 VAE 用于异常检测的算法,best F-score 在 0.89 到 0.99 之间;
  • 提出了一个VAE的改进的损失函数 L-ELBO,使得 LOF-VAE在无监督的情况下可以很好地识别异常;
  • 发现保留一定的异常永林训练可以让模型表现的更好,并为此提供了一个说得通的解释(reasonable explanation)。

论文没有拖泥带水,把实验部分更加容易读。接下来我们对整篇论文进行概述:

  • 摘要稍微看一下就好。
  • INTRODUCTION介绍异常检测的常用方法以及分类等等,如果不需要自己动手写论文,其实也可以不用看。
  • BACKGOURND AND PROBLEAM
    • A. 介绍基于 KPI 的异常检测,这个前面介绍了那么多论文应该都懂,也可以不读了。
    • B. VAE 用于 KPI 异常检测,这个应该大家也都懂,也可以去掉了。
    • C. LOF 用于 KPI 异常检测,这个可以看一下,LOF 即局部异常因子,本身 KPI 数据只有一个特征,如何使用 LOF 进行检测这里有明确的介绍,重点需要理解 离群点 检测的概念,以及 局部异常因子 算法原理即可。正好我们在 2 基于LOF的异常检测算法 讲述过,不太清楚的请回去看下,然后结合这个改进就很容易懂了。
    • D. 相关工作。凑字数的(作者勿喷哈哈哈哈哈哈)。
  • ARCHITECTURE 这个是最最最需要关注的内容,去掉了那么多东西,这部分内容需要重点阅读。这部分内容将在后面详细描述。
  • EVALUATION 实验部分只需要知道作者做了哪些实验,每个实验有什么目的就好了。
  • 全场结束,兄弟们溜了溜了。

16.2 内容详解

16.2.1 改进的LOF

这个改进方法超级简单,更加适合理解为:应用LOF到KPI数据的异常检测中。

如图所示:


在计算每个点的异常因子的时候(这里不介绍LOF的那几个公式了,详情请参考 2 基于LOF的异常检测算法 ),如图所示的 点 P l o f P_lof Plof 很明显是一个突增的结果,具有明显的离群特征,所以被 LOF 捕捉到是理所当然的,论文中也提到,不能小看这个 P l o f P_lof Plof 点,由于它是罪恶的开始(这个不是原文内容哈),所以它带坏了好多小朋友,我们结合滑动窗口的应用,确确实实可以把这堆被带坏的小朋友带走重新教育。这大概就是改进之处吧,

所以可以概括为:使用LOF检测到明显的异常点,结合滑动窗口带走相邻的若干个异常点。

16.2.2 论文总体结构

这部分内容稍微看一下即可,如图所示,我们可以得知:LOF用在预处理阶段,预处理完了再构建损失函数,训练 LOF-VAE,最后对每一个点进行异常值打分。

16.2.3 数据预处理

缺失数据填充与标准化 缺失数据填充使用的是线性填充方法,也就是连接缺失点的左右两端,按缺失段等比例下降或者上升,而标准化处理就是设置 x = x − μ σ x = \\fracx-\\mu\\sigma x=σxμ,其中 μ \\mu μ σ \\sigma σ 是均值和标准差。

LOF的标签 LOF检测完了以后,对VAE而言,就成了有监督学习。需要注意的是并不是直接应用 LOF 的检测结果,而是将所有的点的局部异常因子进行排序,选择 T o p − K Top-K TopK 个点标记为异常,很明显这样更加科学,可以根据实际情况进行调整,事实上后面论文为此确实做了调参对比实验。

16.2.4 训练

首先看一下改进的损失函数 L-ELBO:

L − E L B O = E q ϕ ( z ∣ x ) [ α w ( M ) log ⁡ p θ ( z ) − log ⁡ q ϕ ( z ∣ x ) ] L-ELBO = \\mathbbE_q_\\phi(z|x)[\\alpha_w(M)\\log p_\\theta(z)-\\log q_\\phi(z|x)] LELBO=Eqϕ(zx)[αw(M)logpθ(z)logqϕ(zx)]

训练的算法如图所示:

算法中包括3次循环:

  • 第一次循环进行 LOF 为打标的缺失数据进行打标。当却仅当缺失段两端都是异常数据时,才标记为异常数据;
  • 第二次循环是计算异常窗口所占的比例。
  • 第三次来确定投入训练VAE的窗口数据是哪些数据,并且训练时对 改进的损失函数进行调整。

可以看出 LOF-VAE 对损失函数的改进方法是参考了 Donut,至少有一丝丝的关系吧。不过值得一提的是,算法中最后一重循环考虑到异常窗口的影响范围,也就是第 22 行 ∑ l a b e l s \\sum labels labels 对前面的窗口的异常进行统计,如果前面有异常,则 α \\alpha α 设置为 0,可以理解为,对于可能表现不那么正常的数据,尽可能地减少它训练的影响

10.2.5 检测

这一部分使用的就是以前 Donut 使用的方法,并没有什么值得提的地方。

10.3 实验

10.3.1 数据集

数据集来自 iops.ai 这个数据集我们是可以下载并跑实验的,很多论文都是基于这个而编写的。原因很简单,真实数据而且没有那么多噪声,有人工标签,难得的高质量数据集。

后面的内容我们专门设定一个章节把这个数据集拿出来嚼碎了。兄弟们需要的话就催更哈。

10.3.2 实验概述

首先不看文字我们看图。

图6 宏观比较三种算法的结果,在delay=7时,分别在无监督和有监督的情况下进行比较。注意 LOF-VAE 使用是没有使用人工标签的。

图7 这个是分别在不同的 delay 下进行的实验,注意都是无监督的情况下。

图 8 对 LOF-VAE 的组件进行拆分,分步骤测试,也就是查看 LOF-VAE 的改进过程。

图 9 则是介绍 LOF 的调参过程。

10.4 总结

很快就读完了这篇论文,因为这篇论文应该算是 工程化 的论文,就是提出一个想法然后实验证明这个想法是可行的,没有任何理论推导,所以理解起来也比较容易。

读完这篇论文有没有给自己带来某些灵感?欢迎评论,大家一起讨论是不是可行 !

Smileyan
2022.2.21 22:21

以上是关于《异常检测——从经典算法到深度学习》16 基于VAE和LOF的无监督KPI异常检测算法的主要内容,如果未能解决你的问题,请参考以下文章

异常检测——从经典算法到深度学习》14 对于流数据基于 RRCF 的异常检测

异常检测——从经典算法到深度学习》14 对于流数据基于 RRCF 的异常检测

异常检测——从经典算法到深度学习》14 对于流数据基于 RRCF 的异常检测

《异常检测——从经典算法到深度学习》17 基于 VAE-LSTM 混合模型的时间异常检测

《异常检测——从经典算法到深度学习》13 MAD: 基于GANs的时间序列数据多元异常检测

《异常检测——从经典算法到深度学习》13 MAD: 基于GANs的时间序列数据多元异常检测