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)代码实现(详细解释)
论文题目:Anomaly Dection For Time Series using VAE-LSTM hybrid model
CCF B类会议 ICASSP 2020
论文下载:源地址 | 蓝奏云地址2
论文翻译 | 源码地址
论文提出一种 VAE 与 LSTM 的组合模型,并通过实验证明自己的模型是可靠的,有效的。
这是一篇小论文(共5页,参考文献占1页),简单精悍类型的,值得一读。
我们需要重点关注作者是如何结合这两个模型、以及实验是怎么完成的。
从上往下看,首先是一个原始的时间窗口,接下进行编码(VAE 的 encoder),得到的是低维度的向量集。把它们内嵌(embedding)到 LSTM 中,用来预测下一个窗口的内嵌(embedding)。再进行 解码(VAE的Decoder),得到的是重构的窗口。
从左往右看,首先 异常检测值=预测误差
。中间是整个网络结构,右边是对每一层的解释。
总结一下,变分自编码的隐变量(即图片中的embedding)作为LSTM的输入,用来预测下一个隐变量(embedding),最后将预测误差作为异常值。
训练VAE的过程没有做修改,使用的是默认的ELBO作为损失函数。
训练LSTM的过程与其他LSTM一样,希望训练后的模型具有很好的预测能力。
[ e ^ t 2 , ⋅ ⋅ ⋅ , e ^ t k ] = LSTM ( [ e t 1 , ⋅ ⋅ ⋅ , e t k − 1 ] ) (1) [\hat{e}_t^2, \cdot\cdot\cdot, \hat{e}_t^k] = \text{LSTM}([e_t^1,\cdot\cdot\cdot,e_t^{k-1}]) \tag{1} [e^t2,⋅⋅⋅,e^tk]=LSTM([et1,⋅⋅⋅,etk−1])(1)
这个地方省略了LSTM的原理,损失函数,就把它当成一个预测回归模型即可。
完成训练以后,VAE-LSTM已经具备很好的预测能力,注意是预测下一个窗口的对应的VAE的隐变量,并根据这个隐变量,使用训练好的VAE进行重构。
w ^ t − ( k − i ) × p = Decoder ( e ^ t i ) , i = 2 , . . . , k . (2) \hat{w}_{t-(k-i)\times p}=\text{Decoder}(\hat{e}_t^i), \ \ \ i=2,...,k. \tag{2} w^t−(k−i)×p=Decoder(e^ti), i=2,...,k.(2)
对于重构的窗口,可以定义一个函数 d t d_t dt,通过总结 w t w_t wt 的预测误差来评估是否异常。
d t = ∑ i = 2 k ∥ w ^ t − ( k − i ) × p − w t − ( k − i ) × p ∥ (3) d_t= \sum_{i=2}^k \left\| \hat{w}_{t-(k-i)\times p} -w_{t-(k-i)\times p} \right\| \tag{3} dt=i=2∑k∥∥w^t−(k−i)×p−wt−(k−i)×p∥∥(3)
然后根据实际情况定义一个阈值 θ \theta θ ,将 d t d_t dt 的输入转换成0或者1的异常标志。
论文使用了五个数据集,对比实验包括 VAE与ARMA。
具体的数据集可以在 github 源码上看到,具体地址是:https://github.com/lin-shuyu/VAE-LSTM-for-anomaly-detection/tree/master/datasets
源码地址
步骤1 克隆源码到本地。
$ git clone https://github.com/lin-shuyu/VAE-LSTM-for-anomaly-detection
步骤 2 查看一下本地是不是安装了 tennsorflow,并看一下版本。
$ pip show tensorflow
如果安装了高版本的tensorflow,尽量降低到1.x,避免后面出现问题。需要注意的是如果出现如下问题是python版本太高而导致的,需要降低python版本后再安装 tensorflow 1.x
,我环境下python的版本是3.7
,安装的tensorflow是 1.15.4
。
确保tensorflow1.x安装完成以后,就可以准备跑代码了。
步骤4 安装其他所需依赖
$ cd VAE-LSTM-for-anomaly-detection
$ pip install -r requirements.txt
步骤5 跑源码提供的测试代码。
注意首先要跳转到 code
目录下,然后执行以下的 train.py
脚本。
$ cd code
$ python train.py --config NAB_config.json
需要大概几分钟的时候,训练完成以后,再打开源码提供的 NAB-anomaly-detection.ipynb
,因此需要环境安装了 anaconda,打开后,就可以Restart & Run All
即可。
运行后会生成一个文件夹,experiments 训练与测试均已完成。
为了查看效果,可以考虑运行一下项目中自带的 ipynb 文件,如下图所示:
很多小伙伴搭建环境时遇到各种各样的问题,毕竟每个人的机器的环境都会有一些差异,一般而言包括以下几种情况:
很难找到一个教程保证所有人都能正常运行,但是希望小伙伴们多一些耐心,多查查资料,与其他小伙伴们交流交流。当然也可以邮箱联系我 [email protected] 或者在下方留言,一定回复~
但最主要的应该还是得靠自己学习、查资料、DEBUG,抱歉~
小论文言简意赅,主要收获应该包括:
Smileyan
2022.3.28 15:42
感谢您的 点赞、 收藏、评论 与 关注,您的支持是我继续更新的动力!