《异常检测——从经典算法到深度学习》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异常检测算法
  • 17 基于 VAE-LSTM 混合模型的时间异常检测
  • 18 USAD:多元时间序列的无监督异常检测
  • 19 OmniAnomaly:基于随机循环网络的多元时间序列鲁棒异常检测
  • 20 HotSpot:多维特征 Additive KPI 的异常定位

相关:

  • VAE 模型基本原理简单介绍
  • GAN 数学原理简单介绍以及代码实践
  • 单指标时间序列异常检测——基于重构概率的变分自编码(VAE)代码实现(详细解释)

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数据的异常检测中。

如图所示:

《异常检测——从经典算法到深度学习》16 基于VAE和LOF的无监督KPI异常检测算法_第1张图片
在计算每个点的异常因子的时候(这里不介绍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 基于VAE和LOF的无监督KPI异常检测算法_第2张图片

16.2.3 数据预处理

缺失数据填充与标准化 缺失数据填充使用的是线性填充方法,也就是连接缺失点的左右两端,按缺失段等比例下降或者上升,而标准化处理就是设置 x = x − μ σ x = \frac{x-\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 = \mathbb{E}_{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)]

训练的算法如图所示:

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

算法中包括3次循环:

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

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

16.2.5 检测

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

16.3 实验

16.3.1 数据集

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

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

16.3.2 实验概述

首先不看文字我们看图。

图6 宏观比较三种算法的结果,在delay=7时,分别在无监督和有监督的情况下进行比较。注意 LOF-VAE 使用是没有使用人工标签的。
《异常检测——从经典算法到深度学习》16 基于VAE和LOF的无监督KPI异常检测算法_第4张图片
图7 这个是分别在不同的 delay 下进行的实验,注意都是无监督的情况下。

《异常检测——从经典算法到深度学习》16 基于VAE和LOF的无监督KPI异常检测算法_第5张图片
图 8 对 LOF-VAE 的组件进行拆分,分步骤测试,也就是查看 LOF-VAE 的改进过程。

《异常检测——从经典算法到深度学习》16 基于VAE和LOF的无监督KPI异常检测算法_第6张图片
图 9 则是介绍 LOF 的调参过程。

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

16.4 总结

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

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

Smileyan
2022.2.21 22:21

感谢您的 点赞、 收藏、评论 与 关注,您的支持是我继续更新的动力!

你可能感兴趣的:(异常检测,算法,深度学习,人工智能)