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

Posted smile-yan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《异常检测——从经典算法到深度学习》17 基于 VAE-LSTM 混合模型的时间异常检测相关的知识,希望对你有一定的参考价值。

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

相关:

17. 基于 VAE-LSTM 混合模型的时间异常检测

论文题目:Anomaly Dection For Time Series using VAE-LSTM hybrid model
CCF B类会议 ICASSP 2020
论文下载:源地址 | 蓝奏云地址2
论文翻译 | 源码地址

17.1 论文概述

论文提出一种 VAE 与 LSTM 的组合模型,并通过实验证明自己的模型是可靠的,有效的。

这是一篇小论文(共5页,参考文献占1页),简单精悍类型的,值得一读。

我们需要重点关注作者是如何结合这两个模型、以及实验是怎么完成的。

17.2 如何结合VAE与LSTM两个模型


从上往下看,首先是一个原始的时间窗口,接下进行编码(VAE 的 encoder),得到的是低维度的向量集。把它们内嵌(embedding)到 LSTM 中,用来预测下一个窗口的内嵌(embedding)。再进行 解码(VAE的Decoder),得到的是重构的窗口。

从左往右看,首先 异常检测值=预测误差。中间是整个网络结构,右边是对每一层的解释。

总结一下,变分自编码的隐变量(即图片中的embedding)作为LSTM的输入,用来预测下一个隐变量(embedding),最后将预测误差作为异常值。

17.3 如何训练VAE-LSTM模型


图片左侧不含异常数据,用于训练。

训练VAE的过程没有做修改,使用的是默认的ELBO作为损失函数。

训练LSTM的过程与其他LSTM一样,希望训练后的模型具有很好的预测能力。

[ e ^ t 2 , ⋅ ⋅ ⋅ , e ^ t k ] = LSTM ( [ e t 1 , ⋅ ⋅ ⋅ , e t k − 1 ] ) (1) [\\hate_t^2, \\cdot\\cdot\\cdot, \\hate_t^k] = \\textLSTM([e_t^1,\\cdot\\cdot\\cdot,e_t^k-1]) \\tag1 [e^t2,,e^tk]=LSTM([et1,,etk1])(1)

这个地方省略了LSTM的原理,损失函数,就把它当成一个预测回归模型即可。

17.4 VAE-LSTM如何进行异常检测

完成训练以后,VAE-LSTM已经具备很好的预测能力,注意是预测下一个窗口的对应的VAE的隐变量,并根据这个隐变量,使用训练好的VAE进行重构。

w ^ t − ( k − i ) × p = Decoder ( e ^ t i ) ,     i = 2 , . . . , k . (2) \\hatw_t-(k-i)\\times p=\\textDecoder(\\hate_t^i), \\ \\ \\ i=2,...,k. \\tag2 w^t(ki)×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\\| \\hatw_t-(k-i)\\times p -w_t-(k-i)\\times p \\right\\| \\tag3 dt=i=2kw^t(ki)×pwt(ki)×p(3)

然后根据实际情况定义一个阈值 θ \\theta θ ,将 d t d_t dt 的输入转换成0或者1的异常标志。

17.5 实验部分

17.5.1 数据集与实验效果

论文使用了五个数据集,对比实验包括 VAE与ARMA。

具体的数据集可以在 github 源码上看到,具体地址是:https://github.com/lin-shuyu/VAE-LSTM-for-anomaly-detection/tree/master/datasets

17.5.2 使用源码

源码地址

步骤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 即可。


17.6 总结

小论文言简意赅,主要收获应该包括:

  • 了解如何做一个组合模型;
  • 跑通源码后可以基于这个基础上修改,实现一些自己的算法;
  • 数据集在git仓库中提供,可以拿过来用。

Smileyan
2022.3.28 15:42

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

以上是关于《异常检测——从经典算法到深度学习》17 基于 VAE-LSTM 混合模型的时间异常检测的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

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

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

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