基于CVAE鲁棒的和无监督的KPI异常检测(2018,CVAE)
摘要:
为了确保基于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]的集成模型。
本文的贡献可以总结如下:
- 在文献中,我们第一次确定了时间信息对于非顺序深度生成模型(如Donut)在KPI异常检测问题中的重要性。
- 据我们所知,Bagel是第一个将条件变分自动编码器(CVAE)应用于KPI异常检测,并使用dropout技术成功地避免了过拟合。
- 我们使用来自互联网公司的真实数据进行的实验表明,与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对两个随机变量x和z之间的关系进行建模,CVAE对x和z之间的关系进行建模,以y为条件,即建立p(x,z|y)的模型。VAE和CVAE非常相似。我们在Bagel中选择CVAE而不是VAE,因为条件变量对于KPI异常检测很重要(参见§V-B)。
CVAE的生成过程如下:
- 选择一个z先验分布,从中抽取z样本,即z~pθ(z|y)。如[21]所示,我们可以使隐藏z不依赖于y,即z~pθ(z)
- 样本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的主要改进有三方面:
- 采用与VAE相反的CVAE,这样我们就可以将时间信息编码为条件变量。
- 使用单一热点编码将时间信息编码为向量。
- 使用dropout层,以避免过度拟合的时间信息。
3.2、训练
CVAE的训练采用了SGVB算法[17],[18]。SGVB的一个关键技术是重新参数化,即在训练z时用
,而不是z~N(µz, diag(σ2z))。它使它有可能传递梯度到接近后验qφ(z|x,y),从而训练它。
CVAE模型需要捕捉KPI的正常模式,因此避免学习异常模式是必要的。[11]提出了一个损失函数M-ELBO来忽略VAE的异常模式,表明M-ELBO是足够令人满意的。相似的损失函数也可以应用于CVAE。一个输入窗口x,假设其相应的标签窗口是一个二进制向量α(xi是异常当且仅当α= 1),和β表示正常点的比例。由于假设x后验为对角高斯分布,其对数似然可以改写为
。将αi与logpθ(xi |z,y)相乘,得到CAVE的M-ELBO公式:

M-ELBO使得CVAE模型忽略了训练窗口x中异常点的损失,虽然可能只是偶尔的标签,但是忽略缺失点对非常有帮助[11]。 因此,它使我们的模型能够学习重建正常模式从潜在的异常窗口。要利用这种能力,应该应用异常数据注入,这是一种数据扩充。然而,由于CAVE本身是一个高容量生成模型,使用另一种更简单的生成模型来生成异常点似乎不太合理。因此,在我们的实践中只有缺失的点被注入。在每一个epoch前,随机选取一些点,并将其设为零(或将缺失点设为其他的赋值)。
Bagel的训练设计与Donut类似,不同的是我们需要在Bagel的概率函数中引入条件变量y。我们并不声称Bagel的训练设计是我们的贡献。
3.3、检测
我们使用ELBO(等式(1)中的重构项作为异常检测器 ,即
,它在[11][16]中被称为重构概率,但实际上它并不是一个明确定义的概率。如上所述,CVAE模型需要从潜在的异常(整体数据中异常数据占少数?)输入窗口x学习如何重构正常模式。如果qφ(z|y,x),z(i)中z的一个样本对应于x的正态分布(即pθ(x|z(i),y)给出x的正态分布),则logpθ(x|z(i),y)的对数似然表示x符合正态分布的程度。考虑z(i)的似然qφ(z(i) |x,y)作为权重,负加权平均
成为合理的异常分数。其期望形式为
。
检测窗口内的异常点可能对找到良好的后验有不良影响。为了减少缺失点带来的偏差(我们不知道哪些点是异常点),我们利用训练好的生成CVAE模型,用MCMC[17]对测试窗口中的缺失点进行归算。在每一步中,我们给训练好的模型一个测试窗口x,用重构窗口中对应的缺失点替换x的缺失点,其他的点保持原始。此步骤重复L次。图5给出了MCMC赋值的说明。

图5所示。说明MCMC的imputation步骤。首先利用训练好的CVAE模型重构原始输入向量x,然后用重构向量中的对应点替换缺失点。
Bagel的检测设计与Donut类似,不同的是我们需要在Bagel的概率函数中引入条件变量y。我们并不声称Bagel的检测设计是我们的贡献。
3.4、 改善Donut
图3用双线标出了它与Donut的主要区别。首先,我们采用的是CVAE而不是VAE,因此变异和生成网络都存在输入条件。我们也像Donut一样使用滑动窗口,但是在额外的时间条件的帮助下,Bagel不会忽略KPI窗口的时间信息。其次,为了降低过拟合的风险,我们在条件输入层之后增加了一个退出层。
在处理与时间信息相关的异常时,这些设计差异使得Bagle比Donut更健壮。稍后在IV-A中,将显示在kpi上,如kpi H和G,有时间信息相关的异常,Bagle优于Donut,§V将详细解释结果。
由于条件变量实际上对整体架构的影响并不大,Bagel在Donut中重用了一些设计:我们使用相同的预处理方法,并使用M-ELBO和带条件的重构概率作为Bagel的训练目标和检测器。我们还采用了Donut的缺失数据注入和MCMC计算技术,因为它们在[11]中是有效的。我们不认为这是百吉饼的功劳。
4、实验
在本节中,我们使用来自互联网公司的真实数据来评估百吉饼的性能,并与一些最先进的算法进行比较。
4.1、评价指标
我们将使用[11]提出的修正后的异常F1-score作为我们的评价指标。通常采用F1-score评价分类问题,同时考虑了准确率和召回率。但是在KPI异常检测问题中,待分类点不是独立的,操作员只关心异常开始[11]的时间。因此,如果异常检测算法在异常开始后足够快地(即在允许的最大延迟之前)发出警报,那么在计算修改后的F1-score时,将认为整个异常片段已被成功检测到。一个有巨大延迟的成功警报根本没用。因此,如果在地面实况异常部分,异常检测算法没有增加任何警报在最大允许延迟之前,整个异常段地面真理是假阴性,即使异常检测算法可能会提出一些警报后的最大允许延迟。
图6给出了度量标准的图解。为了方便起见,我们将修改后的F1-score称为F1-score。与[11]类似,为了显示模型的最佳潜在性能,我们使用最佳F1-score,这是根据在测试集上获得最佳性能的阈值计算的。换句话说,我们计算测试集上所有潜在阈值的修改f1分数,并使用最好的一个作为我们的评价指标。
4.2、数据集
我们从几家大型互联网公司获得了几个维护良好的kpi。所有异常标签均由操作人员手动确认。这些kpi的统计数据显示在表II中。A、B、C与[11]中的类似,因此它们可以在Donut声称处理得很好的那些kpi上演示Bagel的性能。G有很多缺失点和几个长缺失片段(如图1所示,还有几个类似的长缺失片段),很多正常的片段都是被缺失点包围的小片段。H是相当平滑的,但是每天有很多周期性的峰值。G和H是反映时间信息影响的代表性kpi。由于我们从不同的来源收集这些数据集,它们有不同的监测间隔和不同的数据点数量。图1描绘了这些kpi。

4.3、A,B,C的整体表现
参考1:机器学习中的F1-score

浙公网安备 33010602011771号