欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

2018年的CVAE方法: robust and unsupervised KPI异常检测

最编程 2024-07-24 10:45:09
...

摘要:

为了确保基于web的服务不受干扰,操作人员需要密切监视各种kpi(关键性能指标,如CPU使用量、网络吞吐量、页面访问量、在线用户数量等),检测其中的异常,并及时启动故障排除或缓解措施。可能有数十万甚至数百万个kpi需要监视,因此操作人员需要自动异常检测方法。然而,在实际中面对大量kpi时,传统的统计方法和监督集成方法都不能满足这一需求。一种先进的无监督的方法Donut提供了有希望的结果,但它不是一个序列模型,因此不能处理与时间信息相关的异常。因此,本文提出了一种鲁棒的、无监督的KPI异常检测算法Bagel,该算法可以处理与时间信息相关的异常,利用CVAE融合时间信息和dropout层避免过拟合。我们使用来自互联网公司的真实数据进行的实验表明,与 Donut相比,Bagel在异常检测方面的最佳f1得分提高了0.08到0.43。

1、介绍

为了确保基于web的服务不受干扰,操作人员需要密切监视各种kpi(关键性能指标,如CPU使用量、网络吞吐量、页面访问量、在线用户数量等),检测其中的异常,并及时启动故障排除或缓解措施。图1显示了我们在本文中研究的几个kpi(A,B,C,H,G)[1]、[2]可能需要监视数十万甚至数百万个kpi,因此操作人员需要使用自动异常检测方法。

 

图1所示。本文研究了KPI。我们画出36小时的A,B,C,H和72小时的G,红线表示异常部分,橙色表示缺失部分。其余的黑线是正常的部分。A,B,C与Donut在其上工作良好的那些kpi非常相似。G有很多缺失的点,以及许多缺失的长片段。有几个正常的片段被长时间缺失的片段包围。例如,蓝框中的片段遵循相同的模式,但最后一个被两个丢失的长片段包围,使得很难重建其正常模式。H非常平滑,但有许多短周期的尖峰,但这些尖峰每天都不完全相同(如棕色框中突出显示的谷)。

虽然在过去[3][12]中提出了很多异常检测方法,但是在实践中,大多数都不能很好地按照[11]进行检测。对比总结如表I所示,在后面的VI中会详细阐述。对于传统的统计算法[3][7],操作人员需要手动选择异常检测算法并针对每个KPI调整其参数。基于监督学习的方法[8],[9]需要为每个KPI手动标记异常。因此,无论是传统的统计方法还是基于监督学习的方法都不是自动的,而且在面对大量kpi时,它们在实践中都不能很好地工作。

表1:异常检测方法的对比

最近,使用深度生成模型的无监督方法显示了一些非常有前途的结果。基于变分autoencoder (VAE)技术发展水平的无监督异常检测算法,Donut[11],明显优于当前监督整体方法Opprentince(优于传统的统计方法)[9]在周期性kpi(比如图1的A,B,C)。周期性kpi是非常普遍的在实践和业务相关的(如在线用户数量,号码查询),因此是非常重要的在异常检测[11]。

然而,Donut对时间信息相关异常的鲁棒性还不够。这是因为VAE不是一个序列模型,并且Donut使用滑动窗口向VAE提供(feed)kpi,但忽略了窗口之间的关系。即,Donut忽略了KPI窗口的时间信息,基于SGD的优化算法Donut使用了shuttle对于训练数据。图1中G中缺失数据的较长片段导致缺失数据片段后的数据点出现假阳性(图中最右边蓝色虚线框突出显示),虽然我们可以想象如果我们以某种方式将时间信息合并到模型(这些蓝色框中的模式非常相似在不同天),这些可以避免假阴性。类似地,在图1的KPI H中,在每日山谷处的周期性(因此是正常的)峰值将被Donut错误地归类为异常,而合并时间信息也能有所帮助。

由于Donut是目前最先进的异常检测算法,更重要的是它具有坚实的理论基础,因此在本文中,我们的目标是通过提高Donut对时间信息相关异常(如图1中的G,H)的鲁棒性,将Donut向实际应用迈出重要一步。请注意,在本文中,我们同样关注周期性kpi中的异常检测,就像Donut[11]一样。

 提出了一种鲁棒的、无监督的KPI异常检测算法Bagel。相对于Donut的VAE, Bagel是基于条件变分自动编码器(CVAE)来纳入时间信息,并使用时间信息作为输入条件然而,在将时间信息整合到CVAE模型中存在一个重要的挑战。因为拟合时间和KPI值之间的关系比拟合输入滑动窗口和重建的正常模式之间的关系要容易得多(类似于具有季节性的传统统计模型,例如历史平均),所以CVAE可以很容易地对季节性KPI的时间信息进行过度拟合。为了避免过拟合,我们增加了一个额外的dropout层,可以考虑使许多较小的神经网络[13]的集成模型。

本文的贡献可以总结如下:

  1. 在文献中,我们第一次确定了时间信息对于非顺序深度生成模型(如Donut)在KPI异常检测问题中的重要性。
  2. 据我们所知,Bagel是第一个将条件变分自动编码器(CVAE)应用于KPI异常检测,并使用dropout技术成功地避免了过拟合。
  3. 我们使用来自互联网公司的真实数据进行的实验表明,与Donut相比,Bagel在kpi G和H的异常检测中提高了最佳F1-score从0.08到0.43,大大提高了Donut对与时间信息相关的异常的鲁棒性。

本文的其余部分组织如下。IV-A回顾了KPI异常检测的背景,以及VAE和CVAE的背景。III介绍了Bagel的神经网络架构,以及训练和异常检测的设计。IV评估Bagel的表现。V分析Bagel是如何工作的。VI回顾相关工作。最后,第七部分对本文进行总结。 

2、背景和问题

2.1、KPI和KPI异常检测

在本文中,我们主要关注与业务相关的kpi,如[11]。由于受用户行为和日程安排的影响,这些kpi具有周期性模式。然而,每个重复周期的KPI模式并不完全相同,因为用户的行为每天不会完全相同。和[11]一样,我们把这些差异称为局部变异KPI异常检测算法只有在能够很好地处理局部变化的情况下才能正常工作。除了周期性的模式和局部的变化,kpi上也有一些干扰。假设噪声服从独立的、零均值的高斯分布。

注:

  • 周期性模式:例如,一周。小时周期,天周期,周周期。
  • 局部变异:例如,一周中的某一天,某一天中的某一小时,某一小时中的某一时刻。这个时刻虽然KPI的值相对于附件时刻的值有所不同,但是每天中的时刻的值都是这种模式的话,就不能判断为异常了。一般的KPI周期性为小时周期,天周期或者周周期。CVAE采用记录模式所在的分钟、所在的小时、所在的一周内的第几天作为输入参数(独热编码)。
  • 噪声:周期性模式大致相同,即KPI的值有微小的波动是正常的(因为会存在一些噪声)。假设噪声服从独立的、零均值的高斯分布。

 综上所述,我们研究的kpi的正常模式由两部分组成:(1)局部变化的周期性模式;(2)独立的、零均值高斯噪声(噪声不属于异常?)。异常是指那些不遵循正常模式的数据点。

KPI值通常以固定的监视间隔(如10秒或1分钟)收集。然而,由于偶尔的技术错误,有时KPI值不会被收集。这些数据点称为缺失点缺点也是一种异常,但很容易与正常点区分开来。因此,本文使用异常点来称呼那些不遵循正常模式但不是缺失点的点,使用异常点同时称呼缺失点和异常点。 

KPI异常检测问题可以表述为:对于任意时刻t,给定历史KPI观测值vt-W+1:t,长度为W,判断t时刻是否发生异常(记为,rt = 1)。 

2.2、变分自编码器和条件变分编码器

如前所述,KPI异常检测的一个特别有前途的方向是深度生成模型,如变分自动编码器(VAE)[17],[18]。VAE使用神经网络对数据分布建模,并根据数据分布生成新的样本。Donut[11]是一种先进的基于VAE的KPI异常检测算法。在本节中,我们将简要介绍VAE及条件变分自动编码器(CVAE)在我们所提出的Bagel方法中的应用背景。 

深度贝叶斯网络结合了深度学习和概率图形模型(PGM)。利用神经网络对随机变量之间的关系进行建模,扩展了PGM的能力。变分推理[19]对于解决神经网络推导的分布后端问题非常有用,因此常被用于深度贝叶斯网络的训练和预测。

变分自编码器(VAE)和条件变分自编码器(CVAE)[20]、[21]是典型的深度贝叶斯网络VAE对两个随机变量xz之间的关系进行建模,CVAE对xz之间的关系进行建模,以y为条件,即建立p(x,z|y)的模型。VAE和CVAE非常相似。我们在Bagel中选择CVAE而不是VAE,因为条件变量对于KPI异常检测很重要(参见§V-B)。 

CVAE的生成过程如下:

  1. 选择一个z先验分布,从中抽取z样本,即z~pθ(z|y)。如[21]所示,我们可以使隐藏z不依赖于y,即z~pθ(z)
  2. 样本x来自pθ(x|z,y),它是由一个具有参数的神经网络推导出来的,即x~pθ(x|z,y)

虽然真正的后验pθ(z|x,y)在训练和预测中起重要作用,但它是难以处理的[18]。在变分推理中,用变分分布qφ(z|x,y)逼近,由另一个参数为φ的神经网络拟合。SGVB[17],[18]是VAE常用的变分推理算法。SGVB通过最大化证据下界(ELBO,公式(1))联合训练逼近后验模型和生成模型。我们采用SGVB是因为它适用于广泛的应用[19],并且已经足够完成我们的任务。 

CVAE的总体架构如图2所示。

图2所示。CVAE的体系结构。考虑到z的先验性是生成过程的一部分,整个生成模型(实线)可以表述为pθ(z,x|y) = pθ(x|z,y)pθ(z|y)。接近的后验(虚线)是qφ(z|x,y)。

3、框架

在这一节中,我们将介绍我们提出的算法Bagel的细节,包括网络架构、训练和检测。我们也会强调Bagel和Donut的主要区别。

3.1、网络架构

 1)预处理:如II-A中提到的,kpi中有一些缺失点因此,首先我们将这些缺失的点归零,然后将kpi归零成为具有固定监控间隔的时间序列。不同的KPI值范围是不同的,所以我们用z-score来标准化KPI:首先我们计算整个KPI的均值标准差的预测值,然后用来计算每个点vi的新值。

如II-A中所述,我们研究的kpi是时间序列。然而,CVAE不是一个序列模型我们使用KPI滑动窗口作为CVAE的输入数据。正式地说,对于一个KPI v = (v1,v2,......,vn), KPI的第i个窗口是x(i)  = (vi,vi+1,…,vi+W-1),其中W为窗口长度。

 2)架构:神经网络整体架构如图3所示。根据[21],我们使潜变量z独立于条件变量y,选择z先验为p(z|y) = p(z) = N(0,I)。将z和x后验均选择为对角高斯分布,即qφ(z|x,y) = N(µz, diag(σ2z)), pθ(x|z,y) = N(µx, diag(σ2z))),其中µz, µxσzσx表示qφ(z|x,y)和pθ(x|z,y)的均值和标准差。这是有意义的,因为我们已经假设kpi上存在独立的高斯噪声。隐藏的神经网络fφ(x)和fθ(z)都是几个完全连接层与ReLU[19]激活。它们用于从z或x中提取隐藏特征,用于推导高斯统计量。高斯均值是由一个线性层导出的:标准偏差是由softplus层加上一个正的实际常数推导出来的:Softplus给出了与常用激活函数ReLU[19]非常相似的输出,但是输出都是严格正的,这是标准偏差所要求的。采用正实常数来避免数值问题,例如,下溢。

图3所示。整体神经网络架构。双线突出了与Donut在网络架构上的主要区别。

 3)编码时间信息:条件变量y表示输入窗口x的时间戳(确切地说,是最新点xW的时间戳)

为了强调季节性,时间戳被分解为几个部分:分钟、小时、星期的一天,因为用户行为计划通常可以分解为这些基本单位。我们不使用秒,因为在我们的上下文中kpi的间隔通常为1分钟或5分钟。我们不使用月或年,因为经验上在这些水平上没有季节性。由于神经网络比[19]值对方向更敏感,我们选择将分解后的值转换为热编码向量。图4说明了Bagel如何编码时间信息。

 

图4所示。我们为窗口x构造条件变量的方式。第一行是窗口的时间(确切地说,是窗口最新点的时间戳)。然后,我们使用时间戳的某些组件作为CVAE的输入条件:分钟25、小时16、星期2(周二)。我们不使用第二、月和年,因为通常在我们的数据中这些水平没有季节性。然后我们将这三个数字转换成三个一次性编码的向量,并将它们连接起来。单热编码意味着将一个正整数转换为一个满是0但只有一个0的二进制向量,而这个0的位置表示原始整数s的值。例如,分钟向量中的第26个元素的值为1意味着时间戳中的分钟= 25。

 

对时间信息进行编码可以帮助Bagel处理与时间信息相关的异常。例如,在G中,由于遗漏点太多,很难从滑动窗口重建正常模式,但是在时间信息的帮助下,Bagel受到的影响较小。在H中,每天的峰值并不完全相同,因此重构可能存在偏差。因为除了那些周期尖峰之外,H是非常平滑的,即x标准差相当小,这些小的偏差导致了来自Donut的不合理的高异常分数。在时间信息的帮助下,Bagel不会被这些峰值弄糊涂。

由于拟合时间与KPI值之间的关系比拟合x与重建的正常模式之间的关系更容易(类似于具有季节性的传统统计模型,如历史平均),因此CVAE很容易在时间信息上进行过度拟合,用于KPI异常检测。如将在V-B中演示的那样,没有Dropout的Bagel的性能真的很差。这是由于没有Dropout层,模型过于关注时间与正常模式之间的关系,即对季节性的了解过多,而对局部变化的了解太少。然而,正如[11]所指出的,只有适当地处理局部变化,异常检测算法才能很好地工作。

因此,在Bagel中,条件变量y有一个输入dropout层,如图3所示。[13]通过在训练中随机禁用神经网络中的一些连接来降低过拟合的风险。一个具有dropout层的网络可以看作是许多较小网络[13]的集合。由于我们注意到CVAE很容易被y覆盖,所以我们在条件输入层之后增加了一个额外的dropout层。通过随机设置尺寸的pdropout无线电为零来实现Bagel的输入Dropout。从集成[13]的角度来看,现在Bagel成为了许多较小模型的集成模型,这些模型只取y的一小部分作为输入条件变量。拟合时间信息与正态模式之间的关系被认为是容易的,而拟合只有一小部分时间信息与正态模式之间的关系则不是那么容易,从而避免了过拟合。

4)Donut改进总结:相对于Donut内部的网络架构,bagel的主要改进有三方面:

  1. 采用与VAE相反的CVAE,这样我们就可以将时间信息编码为条件变量。
  2. 使用单一热点编码将时间信息编码为向量。
  3. 使用dropout层,以避免过度拟合的时间信息。

3.2、训练

CVAE的训练采用了SGVB算法[17],[18]。SGVB的一个关键技术是重新参数化,即在训练z时用,而不是z~N(µz,

上一篇: 从头创建VAE与CVAE指南

下一篇: CVAE