基于VAE的无监督异常检测技术

基于VAE的⽆监督异常检测技术
前⾔
在智能运维领域中,由于缺少异常样本,有监督⽅法的使⽤场景受限。因此,如何利⽤⽆监督⽅法对海量KPI进⾏异常检测是我们在智能运维领域探索的⽅向之⼀。最近学习了清华裴丹团队发表在WWW 2018会议上提出利⽤VAE模型进⾏周期性KPI⽆监督异常检测的论⽂:《Unsupervised Anomaly Detection via Variational Auto-Encoder for Seasonal KPIs in Web Applications 》[1](以下简称为Dount)。基于Dount论⽂的学习,本⽂将介绍如何使⽤Keras库,实现基于VAE模型的周期性KPI异常检测⽅法,包括其思路、原理与代码实现,帮助⼤家理解这个⽅法。高雄捷运
背景介绍:
在AI in All的时代,⼯业界中的运维领域提出了:智能运维(AIOps, Artificial Intelligence for IT Operations)这个概念,即采⽤机器学习、数据挖掘或深度学习等⽅法,来解决KPI异常检测、故障根因分析、容量预测等运维领域中的关键问题。
其中KPI异常检测是在运维领域中⾮常重要的⼀个环节。KPI(key performance indicators)指的是对服务、系统等运维对象的监控指标(如延迟、吞吐量等)。其存储的形式是按其发⽣的时间先后顺序排列
⽽成的数列,也就是我们通常所说的时间序列。从运维的⾓度来看,存在多种不同类型的KPI,周期性KPI是其中⼀种典型的KPI,其特点表现为具有周期性,如下图:
要进⾏KPI异常检测,⾸先我们要定义⼀下什么是异常。如上图所⽰,我们将KPI的异常点定义为超过期望值⼀定范围的点,⽽在期望值的⼩范围内波动的点我们将其认为是噪声。对周期性KPI的异常检测在⼯业界和学术界已有不少探索,本⽂将介绍基于深度学习模型VAE的⽆监督周期性KPI异常检测⽅法。
正⽂:
析构函数AutoEncoder
因为VAE跟AutoEncoder在⽹络整体结构上相似,都分为Encoder和Decoder模型,那么在了解VAE之前,我们先了解什么是AutoEncoder模型。
AutoEncoder的意思是⾃编码器,这个模型主要由两个部分组成:encoder和decoder,可以把它理解为两个函数:z = encoder(x), x = decoder(z)。在AutoEncoder模型的思想中,我们期望能够利⽤encoder模型,将我们的输⼊X转换到⼀个对应的z,利⽤decoder模型,我们能够将z还原为原来的x,可以把AutoEncoder理解为有损的压缩与解压。
AutoEncoder模型有什么⽤呢?有两个主要功能:
降噪
将⾼纬的特征转为低纬度的特征(从X到z)。
要实现⼀个AutoEncoder其实⾮常简单(其实就是单个隐藏层的神经⽹络),有接触过深度学习的⼈应该都可以理解:
input=Input(shape=(seq_len,))encoded=Dense(encoding_dim,activation='relu')(input)decoded=Dense(seq_len)
安徽省技术监督局
(encoded)autoencoder=Model(input,decoded)
漂亮女人电影下载我们先来考虑⼀下能否⽤AutoEncoder进⾏KPI异常检测,以及它有什么缺点。因为AutoEncoder具有降噪的功能,那它理论上也有过滤异常点的能⼒,因此我们可以考虑是否可以⽤AutoEncoder对原始输⼊进⾏重构,将重构后的结果与原始输⼊进⾏对⽐,在某些点上相差特别⼤的话,我们可以认为原始输⼊在这个时间点上是⼀个异常点。
下⾯是⼀个简单的实验结果展⽰,我们训练了⼀个输⼊层X的维度设置为180(1分钟1个点,3⼩时数据),Z的维度设置为5(可以理解为原始输⼊降维后表达),输出成X的维度设置为180的AutoEncoder模型,并且测试集的数据进⾏重构(滑动窗⼝形式,每次重构后只记录最后⼀个点,然后窗⼝滑动到下⼀个时间点),能够得到以下结果:
基于AutoEncoder的周期性KPI异常检测:
上⾯提到,AutoEncoder具有降噪功能,那它怎么降噪呢?这⾥简单举⼀个例⼦:假设我们现在训练出来的模型可以得到这样的映射关系[1, 2](X)->[1](z)->[1 ,2]X_r, 其中[1, 2]表⽰⼆维向量, [1]表⽰⼀维向量,X_r表⽰重构后的X。这个例⼦表⽰了⼀个理想的AutoEncoder模型,它能将[1,2]降维到[1], 并且能从[1]重构为[1,2]。接下来,假设我们的输⼊为[1, 2.1],其中第⼆维度的0.1表⽰⼀个噪声,将其输⼊到encoder部分后得到的Z为[1],并且重构后得到的X_r是[1, 2], 这也就达到了⼀个对原始输⼊去噪的作⽤。
⽽我们的当前的⽬标是进⾏KPI异常检测,从上图可以看到,⼀些⾁眼可见的异常在重构后被去除掉了(类似降噪了),通过对⽐与原始输⼊的差距,我们可以判断是否为异常。
然⽽,AutoEncoder模型本⾝没有什么多少正则化⼿段,容易过拟合,当训练数据存在较多异常点的时候,可能模型的效果就不会特别好,⽽我们要做的是⽆监督异常检测(要是有label的话就⽤有监督模型了),因此我们的场景是训练的时候允许数据存在少量异常值的,但当异常值占⽐较⼤的话,AutoEncoder可能会过拟合(学习到异常模式)。
Variational AutoEncoder(VAE)
接下来介绍⼀些VAE模型,如果不需要对VAE有⽐较清楚的了解,也可以直接跳过这部分内容。
对于VAE模型的基本思想,下⾯内容主要引⽤⾃我觉得讲得⽐较清楚的⼀篇知乎⽂章,并根据我的理解将⽂中⼀些地⽅进⾏修改,保留核⼼部分,这⾥假设读者知道判别模型与⽣成模型的相关概念。
VAE 跟传统 AutoEncoder关系并不⼤,只是思想及架构上也有 Encoder 和 Decoder 两个结构⽽已。VAE 理论涉及到的主要背景知识包括:隐变量(Latent Variable Models)、变分推理(Variational Inference)、Reparameterization Trick 等等。
⾸先,先定义问题:我们希望学习出⼀个⽣成模型,能产⽣训练样本中没有,但与训练集相似的数据。换⼀种说法,对于样本空间 X,当以
p(x)抽取数据时,我们希望以较⾼概率抽取到与训练样本近似的数据。对于⼿写数字的场景,则表现为⽣成像⼿写数字的图像。对于数据 x的产
⽣,我们假设它受⼀些隐含因素的影响,即隐变量(Latent Variables),写作 z,并且假设p(z)服从标准正态分布 N(0,I)。则原来对 p(x)建模转为对 p(x,z) 进⾏建模,同时有
长安街 车祸接下来我们可以开始解决最⼤化 p(x)的问题,如果我们知道 p(z) 的分布,我们就可以利⽤采样来计算积分,即
我们发现当p(x|z)=0时,对估计 p(x) 没有帮助,所以其实我们只需要采样那些对 p(x)有贡献的 z。此时,可以反过来求 p(z|x),然⽽p(z|x)是intractable的,VAE中利⽤Variational Inference,引⼊ q(z|x)分布来近似p(z|x)。
最终,可以得到需要优化的⽬标 ELBO(Evidence Lower Bound),此处其定义为
其中,第⼀项是我们希望最⼤化的⽬标p(x);第⼆项是在数据 x下真实分布 p 与假想分布 q 的距离,当 q的选择合理时此项会接近为0。但公式中仍然含有intractable的 p(z|x),于是将其化简后得到
于是,对于某个样本xi,其损失函数可以表⽰为每次输⼊为⼀个xi,
q(z|xi)意味着在样本 xi下隐变量 z的分布,对应于AutoEncoder中的Encoder部分;
p(xi|z)意味着将隐变量 z恢复成 xi,对应着 Decoder。于是,VAE 的结构可以表⽰为
但是,上⾯这种⽅式需要在前向传播时进⾏采样,⽽这种采样操作是⽆法进⾏后向反馈梯度的。于是,作者提出⼀种“Reparameterization Trick”:将对
采样的操作移到输⼊层进⾏。于是就有了下⾯的VAE最终形式
教育的社会性
我们再结合两个图梳理⼀下VAE的过程。
下图展⽰了⼀个具有3个隐变量的 VAE 结构⽰意图。
基于VAE的周期性KPI异常检测
上⾯介绍了VAE的原理,看起来很复杂,其实最终VAE也实现了跟AutoEncoder类似的作⽤,输⼊⼀个序列,得到⼀个隐变量(从隐变量的分布中采样得到),然后将隐变量重构成原始输⼊。不同的是,VAE学习到的是隐变量的分布(允许隐变量存在⼀定的噪声和随机性),因此可以具有类似正则化防⽌过拟合的作⽤。

本文发布于:2024-09-23 09:31:48,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/68476.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:模型   运维   变量   得到   检测   学习   数据   领域
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议