清华/阿里巴巴开源的周期型——Donut

论文Unsupervised Anomaly Detection via Variational Auto-Encoder for Seasonal KPIs in Web Applications

源码github

问题背景

在智能运维领域中,由于缺少异常样本,有监督方法的使用场景受限。因此,如何利用无监督方法对海量KPI进行异常检测是我们在智能运维领域探索的方向之一。

正文

AutoEncoder

VAE跟AutoEncoder在网络整体结构上相似,都分为Encoder和Decoder模型。在AutoEncoder模型的思想中,我们期望能够利用encoder模型,将我们的输入X转换到一个对应的z,利用decoder模型,我们能够将z还原为原来的x,可以把AutoEncoder理解为有损的压缩与解压。
AutoEncoder模型有什么用呢?有两个主要功能:

  • 降噪
  • 将高维的特征转为低维度的特征(从X到z)。
input = Input(shape=(seq_len,)) 
encoded = Dense(encoding_dim, activation='relu')(input) 
decoded = Dense(seq_len)(encoded) 
autoencoder = Model(input, decoded)

AutoEncoder 其实是增强的 PCA:AutoEncoder 具有非线性变换单元,因此学出来的 Code 可能更精炼,对 Input 的表达能力更强

因为AutoEncoder具有降噪的功能,那它理论上也有过滤异常点的能力,因此我们可以考虑是否可以用AutoEncoder对原始输入进行重构,将重构后的结果与原始输入进行对比,在某些点上相差特别大的话,我们可以认为原始输入在这个时间点上是一个异常点。

然而,AutoEncoder模型本身没有什么多少正则化手段,容易过拟合,当训练数据存在较多异常点的时候,可能模型的效果就不会特别好,而我们要做的是无监督异常检测(要是有label的话就用有监督模型了),因此我们的场景是训练的时候允许数据存在少量异常值的,但当异常值占比较大的话,AutoEncoder可能会过拟合(学习到异常模式)

Variational AutoEncoder(VAE)

原理可参考:VAE
上面介绍了VAE的原理,看起来很复杂,其实最终VAE也实现了跟AutoEncoder类似的作用,输入一个序列,得到一个隐变量(从隐变量的分布中采样得到),然后将隐变量重构成原始输入。不同的是,VAE学习到的是隐变量的分布(允许隐变量存在一定的噪声和随机性),因此可以具有类似正则化防止过拟合的作用。
异常检测是一样的,使用重构误差来判断异常。

缺陷

  1. 理论上它只能对一个KPI训练单独一个模型,不同类型的KPI需要使用不同的模型,可以参考文章ROCKA,先对不同的KPI进行模板提取,然后进行聚类,对每个类训练单独一个模型。
  2. 需要设置异常阈值。因为我们检测异常是通过对比重构后的结果与原始输入的差距,而这个差距多少就算是异常需要人为定义,然而对于大量的不同类型的KPI,我们很难去统一设置阈值,这也是采用VAE模型比较大的一个缺陷。虽然在Dount论文中,采用的是重构概率而不是重构误差来判断异常,然而重构概率也需要设置阈值才能得到比较精确的结果。
发布了79 篇原创文章 · 获赞 8 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_34219959/article/details/102861282