异常检测论文翻译——A Deep Learning Approach for Unsupervised Anomaly Detection in Time Series

目录

摘要

1.介绍

2.异常检测方法综述

3. 用于比较的state-of-art方法

4. DeepAnT:时间序列中的异常检测方法

A.时间序列预测器

1)框架总结

2)损失函数

B.异常检测

5.实验设置

6.结论

总结与思考


原文链接:DeepAnT----A Deep Learning Approach for Unsupervised Anomaly Detection in Time Series

摘要

 传统的基于距离与维度的异常检测技术不能检测流数据中的具有周期性的点异常,这使得在物联网时代,时间序列异常检测存在着较大差距。为了解决这个问题,我们提出了一个新的基于深度学习的时间序列异常检测方法(DeepAnT),这个方法同样也适用于非流数据。DeepAnT能够识别许多异常,例如点异常、基于上下文的异常和时间序列中的异常。与学习异常的异常检测算法相比,DeepAnT利用了未标注的数据捕获并学习用于预测时间序列正常行为的数据分布。DeepAnT由两部分组成:时间序列预测器与异常检测器。时间预测器模型利用卷积神经网络预测下一个时间戳。这个模型利用短暂的时间序列(用作上下文)并尝试预测下一个时间戳。然后预测的时间戳移交给异常检测器,它可以标记这个相关的时间戳是正常的还是异常的。DeepAnT甚至可以在不将异常从给定数据集中移除的背景下进行训练。一般来说,在基于深度学习的方法中,需要许多数据训练模型。然而在DeepAnT中,由于卷积神经网络有效的参数共享,因此模型可以由相对较小的数据集训练且获得良好的泛化能力。因为DeepAnT中的异常检测是无监督的,所以在模型生成时,它不依赖异常标签。因此,这个方法可以用在真实的场景中,在这些场景中,几乎不可能标记来自由正常点和异常点组成的异构传感器的大数据流。我们在10个异常检测基准点上对15种算法进行了详细评估,包括443个真实的和合成的时间序列。实验结果显示DeepAnT在绝大多数例子中比state-of-the-art异常检测方法表现得更好,与其他方法平分秋色。

索引词:异常检测、人工智能、卷积神经网络、深度神经网络、循环神经网络、时间序列分析

1.介绍

由于异常检测具有普遍存在的性质,因此它长时间以来一直是核心研究领域之一。在日常生活中,我们注意到异常一直是我们关注的焦点。当与分布偏离较大时,它就被称为异常或者离群值。在本文中,异常与离群值可以交换使用。在计算机科学中,异常检测指寻找特殊数据点的技术,这些特殊点不符合该数据集的正常分布。Grubbs给出了与计算机科学领域最相关的异常定义:“‘离群值’是指与样本中其他成员偏离很大的数据”。术语“异常”被广泛使用,并且在不同的领域表示不同的问题。例如,在网络安全系统中,异常可能与恶意软件或黑客攻击有关。然而,在制造业领域,有缺陷的产品被认为是异常。尽早的检测出异常对于避免重大问题是很重要的,例如财务系统黑客、总机器故障、或者人体内的癌症肿瘤。

不同部门的公司为了给客户提供便利,在收集大数据和发现潜在的异常上投资了许多资源,例如制造业、汽车、医疗保健、住宿、旅游业、时尚业、饮食业。在绝大多数的案例中,收集到的数据是时间序列数据,由于它们内在周期性与无规律的特征,对它们精准地检测点异常一个具有挑战的问题。此外,在绝大多数真实的场景中,标注绝大多数的数据是几乎不可能的,因此,我们使用了无监督的方法。尽管已存在着许多无监督的方法,但他们并没有处理时间序列数据内在的特征。例如,传统的基于距离的异常检测技术并没有时间序列的上下文,正因为这样,他们不能找到周期内的点异常。我们提出无监督方法在检测异常时考虑了上下文、周期和趋势。这个方法适用于不同的场景和应用案例,并且对不同领域的数据也同样有效。

本文提出了DeepAnT,它是一个基于深度学习的无监督时间序列异常检测方法。这种方法不依赖于标记异常,而是利用原始时间序列数据,即使原始序列不消除异常(数据集中的异常少于5%)。DeepAnT利用CNN作为它的预测模型。这个模型通过给定的时间序列窗口预测下一个时间戳。之后,预测值移交给一个检测模型,检测模型将这个值与真实的数据点比较以实时的检测异常。这个方法是现实的,甚至对时间序列从异构源或者传感器获取的领域也适合。DeepAnT在数据稀疏的领域泛化能力也很好。由于在提取特征时有效的参数共享,因此建立预测模型仅有少量的训练数据就已经足够了。当在公共可用的异常检测基准上进行测试时,DeepAnT在绝大多数案例中比state-of-art异常检测方法表现好。DeepAnT的目的在于健壮地检测点异常而不是将整个时间序列分类为异常和正常。下面是本文的主要贡献:

1)据我们所知,DeepAnT是第一个以无监督方法检测点异常、上下文异常和时间序列中异常的深度学习方法。

2)我们提出的方法是灵活的,它可以为不同的领域做些简单的修改。它可以用于单变量和多变量的时间序列。

3)与基于LSTM的方法相比,基于CNN的DeepAnT不需要很多数据。对于大量数据和少量数据它都适用。我们仅用了给定时间序列的40%训练模型。

4)我们在一个地方收集了不同的异常检测基准,并在10个数据集(包括流数据和非流数据)的不同设置中对15种state-of-art方法进行了广泛的评估,数据集一共有443个时间序列。DeepAnT在绝大多数数据集中达到了state-of-art。

本文剩余的部分结构如下:第二章概括了现有的异常检测方法。第三章介绍并总结了state-of-art异常检测方法,在第五章,我们将这些方法与提出的方法进行了评估与比较。第四章我们详细介绍了时间序列数据中异常检测的方法。第五章详细评估了DeepAnT并且将它与其他state-of-art异常检测方法在不同的基准上做出了比较。这个章节又分成了小节以详细描述使用的数据集的细节和实验的设置。最后,第六章做出了总结与对未来工作的展望。

2.异常检测方法综述

由于使用场景以及算法的多样性,异常检测问题可以以许多种角度分类。最常见的分类基于算法所需的监督级别:监督,半监督,无监督。另一种分类由Aggarwal提出,基于基本使用方法分类,例如概率模型、统计模型、线性模型、基于领近度的模型和高维中的异常检测。此外,异常检测方法也存在基于机器学习和深度学习的技术。在本掌中,我们概括了常用的异常检测方法。首先,我们讨论了点异常检测的常用方法。接着,我们概括了时间序列的异常检测。最后,我们讨论了基于深度神经网络的异常检测方法。

统计异常检测方法是检测异常中最常用的方法。K-NN异常检测方法是点异常检测中最简单、应用最广泛的无监督全局异常检测方法。这个基于距离的算法根据k近邻距离计算了异常得分。这个方法计算代价大,很大程度上取决于K的值,并且如果正常的数据点没有足够的近邻,那么这个方法可能会失败。Breunig等人提出了最广泛使用的局部基于密度的无监督异常检测方法,也就是局部异常因子(LOF)。在LOF中,K近邻为每一个实例计算与其他实例的距离。这个算法最基本的假设是数据实例的近邻呈球形分布。然而,在某些应用场景中,数据点呈线性分布,球形密度估计变得不合适。Tang等人提出了改进的LOF,称为COF,它考虑了线性框架。这个算法的缺点是,在某些例子中,当不同密度之间的族彼此相互靠近时,会存在错误的异常估计。在这样的例子中,在低密度区域边界的实例是关于高密度区域的局部异常。这个缺点已由算法INFLO解决。

除了最近邻算法,基于聚类的算法也被用在无监督异常检测。正如其名,CBLOF是一个基于聚类的异常检测,它的数据点利用K-均值(或其他)聚类算法聚类。一个实例的异常得分是与下一个大族的距离。由于这个算法基于聚类算法,因此产生了选择正确的族数量的问题,并且由于聚类算法的不确定性,同样的异常值也不可能再现。

HBOS是另一种统计无监督异常检测算法。与最近邻算法和基于聚类的方法相比,这个算法的计算代价小得多。HBOS通过提供标准的固定组距直方图和动态组距(每个直条内固定项目数量)来处理任意数据。

基于单类支持向量机(OCSVM)的异常检测算法存在半监督和无监督两种形式。Amer等人介绍了OCSVM的无监督形式。基于[18]的思想,这个技术不需要训练集。它试图学习一个决策边界,这个决策边界可以将点与原点在最大程度上分开。这个方法也被用来检测日常生活中的异常,例如睡眠、坐姿和行走模式。

另一个基于OCSVM的时间序列异常检测方法由Hu等人提出。在这个方法中,对于单变量和多变量时间序列,他们首先定义了六个元特征,然后将OCSVM应用到基于元特征的数据空间上查找异常状态。一般来说,OCSVM对没有标签的异常很敏感。但它也被用作一种新颖的检测技术。Liu等人提出了一种基于支持向量数据描述(SVDD)的异常检测方法。

Shyu等人提出了基于主成分分析(PCA)的异常检测方法,其中预测模型是由正常实例的主要和次要成分构建的。Kwitt和Hofmann提出了这一技术的另一个形式,其中最小协方差确定(MCD)用于计算标准估算量的协方差和相关矩阵。为了结合时间序列特征,存在着不同的异常检测技术,它们专门为流式时间序列数据检测异常。Netflix在2015年开源了叫做RAD的异常检测方法。这个方法基于RPCA(健壮主成分分析)检测异常。为了检测多兆字节数据集中的异常时间序列,[26]提出了一种磁盘感知算法。ARMA模型和变体ARIMA,ARMAX模型被广泛的用在时间序列预测和异常检测上。Yu等人提出了一个在无线传感网络中控制流量的异常检测技术,该技术基于ARIMA模型。他们提出指数加权平均数是网络流量中做出更好异常检测的关键。在相同的领域中,Yaacob等人提出了一个方法提前检测DoS的攻击。通过将实际网络流量与ARIMA生成的预测模式进行比较,可以识别异常。

现在,人工神经网络(ANN)已经在许多领域成功应用,例如手写识别,语音识别、文本识别活动识别等等;主要是以分类和预测为目的。不同的ANN结构已成功地用于时间序列分析。由Malhotra等人提出的异常检测算法基于LSTMs。他们的预测模型在正常时间戳上训练,这个模型之后会被用来计算给定序列的误差向量。时间序列基于误差阈值被标记为正常或异常。Chauhan和Vig利用相似的方法在EGG数据中检测异常。他们利用RNN和LSTM检测了4种不同的异常。另一个基于深度学习的异常检测方法由Kanarachos等人提出,他们将小波变换和希伯尔特变换与深度神经网络结合,目的在于检测时间序列中的异常。

Lipton等人利用LSTM将一个时间序列分为正常或异常。他们将他们的技术应用于临床数据集,并证明仅在原始时间序列上训练的LSTM优于在手工工程特性上训练的MLP。Zheng等人将CNN用于多变量时间序列分类。他们提出了MC-DCNN,其中每一个通道将多变量时间序列的一维作为输入并且单独学习特征,然后是一层MLP完成分类。实验结果显示MC-DCNN比K近邻算法(基于欧几里得距离和动态时间包裹)表现好。以上提到的所有基于深度学习的异常检测算法都被用来将序列或者子序列分类成正常或异常。

自动编码器是一种神经网络,它被训练用来产生输入。自动编码器被用来降维,它有助于分类和视觉任务。由于它能够以无监督的方式有效的对数据编码,它也因异常检测问题而日益流行。Amarbayasgalan等人基于深度自动编码器提出了一个异常检测方法。他们的方法从深度自动编码器中获取压缩数据和误差阈值并且将基于密度的聚类应用到压缩数据中以得到低密度的异常族群。Schreyer等人也在故障检测领域的大规模数据中使用深度自动编码器检测异常。

3. 用于比较的state-of-art方法

这一章节总结了与我们的方法比较的state-of-art方法。Twitter在2015年开源了它的基于S-H-ESD算法的异常检测包。这个方法基于ESD测试来解决多于一个的异常,并且利用STL解决时间序列数据和趋势的分解。Twitter异常检测算法可以检测全局和局部异常。他们提供了两种函数检测单变量时间序列中的异常:

1)当输入<时间戳,值>时,使用AnomalyDetectionTS函数。

2)当输入时一系列观察时,使用AnomalyDetectionVec函数。

Yahoo实验室公布了另一个异常检测方法EGADS,它可以在大规模的时间序列数据中检测异常。EGADS由两部分组成:时间序列建模模块(TMM)和异常检测模块(ADM)。对于一个给定的时间序列,TMM对时间序列建模并且在时间戳t处产生了一个期望值。ADM比较期望值与真实值并且计算误差E。自动阈值由E确定并且最有可能的异常作为输出。目前有TMM支持的七个时间序列模型和三个异常检测模型。

ContextOSE基于上下文的异常检测方(CAD)法。正如其名,CAD基于时间序列的上下文信息而不是全局信息。这个无监督方法采用了一系列相似的时间序列和一个窗口大小。首先,选择时间序列的一个子集然后计算出这个子集的质心。质心值和其他时间序列特征将会被用来预测时间序列的值。

Numenta和NumentaTM是Numenta的基于分层时间记忆(HTM)的时间序列检测方法的两种版本。这些方法在给定的数据流中为时间子序列建模。给定时间t,HTM为下一个时间戳做多个预测。这些预测将会与真实值作比较以确定它为异常还是正常。对于每个时间戳,我们计算了异常可能性得分,并对其进行阈值化,最终得出异常存在或不存在的结论。

Skyline是Esty开发的实时异常检测方法。该方法综合了不同专家方法的投票结果。他们利用了不同的简单检测器,这些检测器是通过投票决定计算最终的异常分数。

iForest是一个基于模型的异常检测方法,它是在随机森林的基础上建立起来的。在这里,“i”表示将异常实例与剩下的实例分离。iForest通过随机划分一棵树然后随机选择特征来隔离实例。这个随机划分产生了一条通往异常的更短路径。从根节点到叶子节点的路径长度是随机森林的平均值。

Twitter异常检测方法被用来检测社交网络数据的中节令性的异常。当异常在周期性的数据中时这个方法表现得较好。但当时间序列的趋势一直在变时,它的效果不好。不同时间序列模型的可用性使得EGADS成为通用异常检测方法的一个很好的候选者。这个方法能够适应不同的使用案例中,并且它的并行框架使它可以实时检测。ContextOSE使用了对检测时间序列异常特别重要的上下文信息。NumentaTM由于利用了一个在线序列记忆算法,因此它可以检测时空异常。他们的研究结果仅基于NAB分数。这个分数用来评估异常检测并且不能直接用来比较点异常。

4. DeepAnT:时间序列中的异常检测方法

我们提出的DeepAnT由两部分组成。第一个部分时间序列预测器预测了给定范围内的时间戳,第二个模块异常检测器为给定的时间序列数据点标为正常或异常。深度学习已经被广泛地应用在应用领域,因为它可以自动发现复杂的特征而不用任何领域知识。这个自动学习特征的能力使得神经网络成为时间序列异常检测模型的一个良好的选择。因此,DeepAnT利用CNN并且使用了原始数据。此外,与其他神经网络和统计模型相比,它对于变量更具健壮性。文献[42][43]表明LSTM在时间数据上表现较好,因为它可以在时间序列中提取长期的趋势。然而,在本文中,我们展示了CNN可以适用于单变量和多变量时间序列,因为能够有效的共享参数。一般来说,CNN和LSTM用于文献[7]、[30]中的时间序列分类问题,但是我们将CNN(LSTM用于比较)用于时间序列的回归问题。

A.时间序列预测器

DeepAnT的预测器模型基于CNN。CNN是一种人工神经网络,由于它具有参数共享的能力,因此被广泛用在不同的领域,例如计算机视觉、自然语言处理等。正如其名,这个网络利用了一个叫做卷积的数学运算。正常来说,CNN一些层组成包括卷积层、池化层和全连接层。每一个卷积层有两个阶段。在第一阶段,该层执行卷积运算,从而产生线性激活。在下一阶段,一个非线性激活函数用在每一个线性激活上。在最简单的形式中,卷积是对实值参数的两个函数进行的数学运算,以产生第三个函数。卷积运算通常表示为:

                                                                  

新函数s可以表示函数x(τ)在时间戳t处的的平滑估计或加权平均,其中w(-τ)是权重。在式(1)中,函数x表示输入,函数w表示卷积核,输出表示特征图。一维的卷积定义为:

                                                    

在DeepAnt中,与其他方法一样,卷积层的输出将会由池化层的池化函数处理。池化函数根据某一位置的邻域统计地汇总卷积层在该位置的输出。DeepAnt中使用了最常用的最大池化操作,它输出了定义的邻域中的最大值。池化函数应用在每一个特征图上。

在卷积层和最大池化层后,DeepAnT中的最后一层是全连接层。在这层中,前面一层的神经元与所有输出神经元相连。卷积层和全连接层的激活函数分别在(4)和(6)中给出,其中k定义为

                                                                   

                                                                   

                                                                   

                                                                  

在式(4)中,指在卷积层的第i个输入位置处第l层中的第j个神经元的激活函数。式(6)中,是指第l个全连接层中第j个神经元的激活函数。

和其他人工神经网络一样,CNN利用训练集来调整参数(权重和偏置)以执行任务。在DeepAnT中,网络的参数由SGD优化。训练或者学习神经网络的思想即为最小化损失函数C。在预测器模型中,损失函数计算了网络预测和真实值之间的差异。在学习的进程中,这个差异由调整网络的权重和偏置最小化。计算梯度的过程需要调整权重和偏置,因此也被叫做反向传播。反向传播通过计算损失函数对任何权重w或偏差b的偏导数得出,分别为∂C/∂w和∂C/∂b。网络的权重由SGD更新。

为了利用CNN进行预测,需要以兼容的形式更改时间序列数据,以便模型对时间序列数据进行操作。对于时间序列中时间戳t的每一个元素xt,下一个时间戳t+1的元素xt+1作为它的标签。输入数据被转换成多个大小为w的重叠窗口序列。这个窗口大小定义了历史记录中时间戳的数量,我们将这个窗口(称为历史记录窗口)考虑在内,并且它也被看做是xt的背景。需要预测的时间戳数称为预测窗口(p_w)。

给定时间序列

                                                          

对于w = 5, p_w = 1,索引为t的序列为:

                                                        

在我们的回归问题中,左边代表输入的数据,右边代表标签。在这个例子中,它可以被称为多对一预测,当p_w>1时,它可以被称为多对多预测。

1)框架总结

我们做了大量的实验来最终确定框架和它的超参数。如图1所示,我们使用了两个卷积层,每一个卷积层后是一个最大池化层。输入层有w个输入节点,因为我们已经将数据转换成了w个向量。每个卷积层由32个滤波器(内核)和一个ReLU元素激活函数组成。网络的最后一层是全连接层,该层的每一个神经元都和上一层的全部神经元相连。这一层代表了网络预测的下一个时间戳。网络在输出层使用的节点数等于p_w。在实验中,我们仅预测下一个时间戳,所以输出节点为1。在之后的章节中,当我们预测一个序列而不是数据点时,输出层的节点数将会改变。

                                                                           

                               异常检测论文翻译——A Deep Learning Approach for Unsupervised Anomaly Detection in Time Series_第1张图片

                       图1.时间序列预测的DeepAnT结构:具有两个卷积层、两个最大池和一个全连接层的卷积神经网络。

2)损失函数

式(8)中给出的平均绝对误差(MAE)被用作实际与预测输出之间差异的指标。通过减少真实与预测之间的误差,网络可以学会预测时间序列的正常行为。我们基于训练集对每一个时间序列进行了正则化。

                                                                      

B.异常检测

一旦时间序列预测器预测了下一个时间戳,异常检测模块就开始在给定的时间序列中检测异常。由预测器模块预测的数值传至异常检测模块,并且计算出真实与预测之间的差异。在这里,我们利用式(9)中的欧式距离衡量差异。

                                                          

其中,是真实值,是预测值。

欧氏距离被当做异常得分。异常得分大表明在当前时间戳内有一个显著的异常。该模块也需要定义一个基于时间序列类型的阈值,这在绝大多数异常检测算法中都是必需的。

5.实验设置

我累了 感兴趣的朋友可以看原文。

6.结论

我们提出了一种基于深度学习的时间序列异常检测方法。由于它是无监督的,因此它不需要标注异常。此外,这个方法为正常的数据分布建模,并且将不符合这个模型的数据点标为异常。这个方法也能够处理较小的数据污染(小于5%)。即使在时间序列周期中的小偏差/异常检测中,这种技术也是准确的,而其他基于距离和密度的异常检测技术通常忽略了这一点。

我们在由433个时间序列组成的10个数据集上评估了DeepAnT并且与15个state-of-art方法做了比较。为了强调我们提出的方法的一般性,我们在不同领域的真实数据集和合成数据集中测试,包括道路交通、网络利用率、在线广告、网络流量、航天飞机和医疗保健。在多数情况下,DeepAnT表现得比state-of-art方法好,而在其他情况下位居第二。我们提出的方法能够检测点异常、甚至时间序列中带有周期性和节令性的上下文异常。DeepAnT在小数据和大数据场景中均展现了泛化能力。

这个方法能够实际应用在大量数据无标签的情况下。但是,数据质量差会破坏数据建模阶段。另一方面,如果数据污染水平过高(超过5%),系统将尝试对这些实例进行建模,因此在推断时将它们视为正常情况。另一个限制是网络结构和相应超参数的选择。这可以通过使用最近的体系结构搜索技术[59]以计算时间交换人类的专业知识来规避这个问题。最严重的限制之一可能是在安全关键场景中,对抗性的例子[60]限制了使用这种方法(以及大多数以前的数据驱动方法)。虽然在理解和防御这些对抗性的例子方面取得了重大进展,但是还没有开发出通用技术来规避这个问题。

我们正致力于扩展该模型,并在时间序列分析中使用领域适应性和迁移学习的概念进行异常检测。另外,评估不同的预处理技术对最终时间序列预测的影响也是很有意思的。

总结与思考

作者提出了DeepAnT——一种利用深度学习进行无监督异常检测的方法。DeepAnt包括两个部分时间序列预测器与异常检测器,预测模块负责预测下一个时间戳,之后异常检测模块负责对该时间戳进行异常检测(欧氏距离计算,需设定阈值)。优点主要有:1)可以在较小的数据集上训练并获得较好的泛化能力——因为卷积神经网络的参数共享机制;2)无监督方式,不需标注的数据集;3)可以识别多种异常,点异常、上下文异常、时间序列异常。

与极值理论相比,DeepAnT需要设定阈值。另外,作者提到,网络结构也是DeepAnT的缺点之一,而与卷积神经网络相比,胶囊网络能够在少得多的数据集上完成训练,是否会达到更好的效果?

你可能感兴趣的:(异常检测)