《异常检测——从经典算法到深度学习》16 基于VAE和LOF的无监督KPI异常检测算法
Posted smile-yan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《异常检测——从经典算法到深度学习》16 基于VAE和LOF的无监督KPI异常检测算法相关的知识,希望对你有一定的参考价值。
《异常检测——从经典算法到深度学习》
- 0 概论
- 1 基于隔离森林的异常检测算法
- 2 基于LOF的异常检测算法
- 3 基于One-Class SVM的异常检测算法
- 4 基于高斯概率密度异常检测算法
- 5 Opprentice——异常检测经典算法最终篇
- 6 基于重构概率的 VAE 异常检测
- 7 基于条件VAE异常检测
- 8 Donut: 基于 VAE 的 Web 应用周期性 KPI 无监督异常检测
- 9 异常检测资料汇总(持续更新&抛砖引玉)
- 10 Bagel: 基于条件 VAE 的鲁棒无监督KPI异常检测
- 11 ADS: 针对大量出现的KPI流快速部署异常检测模型
- 12 Buzz: 对复杂 KPI 基于VAE对抗训练的非监督异常检测
- 13 MAD: 基于GANs的时间序列数据多元异常检测
- 14 对于流数据基于 RRCF 的异常检测
- 15 通过无监督和主动学习进行实用的白盒异常检测
- 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 Top−K 个点标记为异常,很明显这样更加科学,可以根据实际情况进行调整,事实上后面论文为此确实做了调参对比实验。
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)] L−ELBO=Eqϕ(z∣x)[αw(M)logpθ(z)−logqϕ(z∣x)]
训练的算法如图所示:
算法中包括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 混合模型的时间异常检测