潘玲玲 刘 俊 夏 旻
1(中国电力科学研究院有限公司 江苏 南京 210003) 2(南京信息工程大学江苏省大数据分析技术重点实验室 江苏 南京 214200)
时间序列的异常数据检测与修正在现实世界中有广泛的应用场景,如电力时间序列数据的异常检测、信用卡欺诈和网络入侵检测等[1]。不同于单样本的异常检测,时间序列的数据异常检测需要考虑数据的时序特征,因此时间序列的异常检测相比单样本检测更加困难[2]。
目前,时间序列数据异常检测的方法主要有基于统计模型的方法[3-5](ARIMA方法、GARCH方法等)、无监督聚类的方法[6-9](K-Means方法、最大似然估计法、密度聚类方法等)和有监督分类的方法[10-13](支持向量机、K近邻法、神经网络、孤立森林和隐马尔可夫模型等)。基于统计模型的方法一般已知序列的分布,通过滑动窗口,计算窗口内的数据统计特征,实现对异常点的检测。该方法适用于离散突变的异常值的检测,而对于连续区间的异常数据很难有效检测[14]。基于聚类的方法主要通过距离或密度的度量区分正常数据和异常数据。聚类的方法需要大量的距离比较运算,算法复杂度较高,并且聚类的方法对长时序序列的聚类准确性非常低[15]。对于较长的时间序列而言,用聚类的方法实现异常数据的检测是不现实的。时间序列的数据异常值检测可以视作为一种特殊的分类问题[16]。目前许多实践案例表明基于监督学习的分类方法可以有效地应用到各类异常检测任务[17]。但目前大部分都是基于人工特征的浅层学习模型,这些模型特征提取能力有限,不能有效地提取时间序列数据的时序特征,导致检测结果较低。另外,浅层学习的分类方法只能实现异常序列的判断,而很难实现异常数据的提取及修正[18]。
近年来,随着深度学习的发展,已经有学者开展了基于深度学习的时间序列数据异常检测。例如,刘冬兰等[19]采用深度受限玻尔兹曼机和循环神经网络实现了电力时序数据的异常检测;Aguayo等[20]构建了动态自组织神经网络,利用数据的局部特征实现了时序数据的异常检测;王凯等[21]提出了一种基于长短时记忆神经网络的动态图模型实现时序数据的异常检测。目前大部分基于深度学习的时序数据异常检测主要基于循环神经网络的改进模型长短时记忆神经网络。虽然循环神经网络能有效地实现时序信息的提取,但是其对序列的整体特征的提取能力较弱,从而影响了检测准确率。另外,目前的深度学习算法需要构建较深的网络实现特征的有效提取。随着网络深度的增加,深层神经网络的特征提取更加充分,但导致模型的复杂度增加。然而,当网络层次增加到一定数量时,网络容易发生梯度爆炸,不能很好地收敛,甚至在网络加深后导致模型退化[22]。
为了解决上述问题,本文提出了一种多尺度深度残差网络来实现时间序列数据的异常检测及修正。多尺度卷积可以有效地提取时间序列的多尺度特征,提高了异常数据的辨别能力,同时深度残差结构可以有效地减少网络的梯度消失问题及模型退化问题。所提方法是以序列误差估计的形式实现异常数据的检测,并且在网络的最后一层通过估计的误差完成异常数据的修正,因此该方法比现有模型效率更高。实验结果表明,所提算法可以有效地实现时间序列数据的异常检测及修正。
通过多尺度的卷积方式一方面可以充分地提取时间序列样本中较长以及短时间的特征信息,另一方面也拓宽了网络。网络的宽度已经在一定程度上得到了拓宽,但是简单地堆叠多个多尺度的卷积层会导致梯度消失问题,而更深的网络往往能够带来更优秀的性能表现,所以,本文算法通过多尺度的卷积方式提取多尺度的特征信息,同时利用残差学习的方式来加深网络结构来进一步提升算法的性能。多尺度深度残差网络(MS-ResNet)网络结构如图1所示。MS-ResNet模型由多尺度卷积模块、深度预激活残差网络组成。
图1 多尺度深度残差网络结构图
多尺度卷积是通过不同尺度卷积核从特征图中提取更多信息的一种方法,广泛应用于多尺度特征提取中的目标检测和姿态估计[23]。一般来说,滤波器的尺寸对网络的整体性能至关重要,滤波器尺寸小的卷积只能在很小的范围内捕获局部信息,滤波器尺寸过大的卷积会带来很大的计算复杂度,而多尺度卷积的设计可以提取出不同的层次而不增加太多计算复杂度。此外,大量的实验表明,神经网络的优良性能往往可以通过更深或更宽的结构来实现,而多尺度卷积方法无疑拓宽了网络,在一定程度上提高了算法的泛化能力。在时间序列异常检测中,受Inception网络的启发,本文设计了用于多尺度序列特征提取的多尺度卷积。首先,本文提取不同尺度卷积核的浅层特征。核大小为1×1、3×1的卷积可以提取时间范围较短的时序信息,而5×1卷积可以在较大的时间范围内捕获信息。与原始结构不同,在多尺度结构中,为了保持序列信息的完整性,不使用任何池化操作。虽然池化操作可以在一定程度上捕获序列的全局信息,但池化操作过程中实际丢失的局部信息太多,不利于时间序列建模。另外,在原始的Inception结构中,在多尺度特征提取步骤之前往往通过增加一个1×1的卷积核来限制输出的通道数,并用两个3×3的卷积核来替代5×5,虽然大大降低了网络的训练参数,但是本质上多尺度的特性也就被破坏了,所以,多尺度卷积中不使用1×1来降低通道数,也不用两个3×1的卷积核来替换5×1,而是通过在不同尺度的卷积设置不同数量的卷积核个数来在限制参数量,最后使用拼接的方式将不同卷积核尺寸卷积得到的特征图进行整合。在第一个多尺度卷积中,使用设置了6个1×1,10个3×1以及14个5×1的卷积核,使用这样的多尺度卷积的原因是以上不同尺度的卷积加起来的卷积核的数量是30,这样的处理既有利于特征的顺利提取,也避免了多尺度卷积后的卷积结构训练参数的爆炸式增长。
随着网络深度的增加,模型学习能力提高,同时模型复杂度也得到了提高,网络容易发生梯度爆炸,不能很好地收敛,甚至在网络加深后退化。现有的一些处理模型梯度爆炸和网络退化问题的方法,如激活函数ReLU和批处理规范化[24],可以在一定程度上缓解这些问题。但梯度消失的根本原因是不同层梯度之间的乘法运算会导致浅层梯度逐渐消失,用ReLU和批处理规范化方法无法很好地解决这一问题。为了解决该问题,本文构造深度预激活残差网络实现时间序列特征的进一步提取。
如果简单地用一个或多个隐层堆叠的前向神经网络拟合一个恒等映射函数H(x)=x可能会很困难。但是如果把网络设计为H(x)=F(x)+x的形式,那么就可以将学习的函数转换成学习一个残差函数F(x)=H(x)-x,当F(x)=0时,就得到了映射函数H(x)=x。F(x)+x可以通过一个前向的神经网络和一个捷径连接实现, “捷径连接”仅执行一个恒等映射,并将其输出添加到堆叠层的输出。
假设在单个残差结构中,残差块的输出是H(x),需要拟合的函数是H(x)-x,将神经网络的输入通过跨层连接将其加到堆叠隐层的输出上,就得到了H(x)。这样就可以将H(x)-x定义为F(x),残差结构如图2所示。
图2 残差结构图
每一个残差结构有两层,x表示输入,W1和W2表示权重向量,残差块中前向神经网络的表达式如式(1)所示,其中σ表示激活函数ReLU。
F(x)=W2σ(W1x)
(1)
通过增加一个恒等映射将图2左边支路前向神经网络的输出和右边支路恒等映射的输出相加,并用激活函数激活,即得到残差结构的输出y:
y=F(x,{Wi})+x
(2)
式中:F(x,{Wi})表示需要学习的残差映射函数,Wi表示隐层权重矩阵。通过在捷径处对残差结构的输入x做一个线性变换W·x,能够使得输入的特征图数和输出的特征图数相等,具体表达式如下:
H(x)=F(x,{Wi})+Wsx
(3)
根据式(1)递推可以得到多个残差块之间的关系:
(4)
式中:xL表示第L个残差单元的输入。记损失函数为ε,那么误差反向传播的计算表达式如下:
(5)
(a) 原始残差结构 (b) 预激活残差结构图3 原始残差单元和预激活残差单元对比
式(5)有效地解决了梯度消失的问题。从图2可以看出,激活函数在残差单元之间使用,而建立式(5)的条件是xl+1=yl。必要的激活是必不可少的,这需要重新设计原始的残差结构。建立恒等映射的一个想法是在原始残差结构的基础上将加法操作之后加入ReLU激活函数(图3(a))。但是简单地将ReLU激活函数移到加法操作后将导致残差函数的输出为正数,而残差函数的输出应该在(-∞,+∞),并且这个条件可以通过图3(b)中的残差元素来实现。通过重新调整激活函数ReLU的位置和残差结构中的批正规化,残差结构不仅满足了解决梯度消失问题xl+1=yl的条件,而且满足了残差函数的输出为(-∞,+∞)。
图1显示了应用于时间序列异常数据检测及修正任务的MS-ResNet网络结构。该网络由深度残差网络和多尺度卷积两部分组成。多层度深度残差网络的超参数设置如下:(1) 滑动窗口的大小设置为N,所以输入序列的大小为N。(2) 利用一组多尺度卷积作为网络的第一层,提取浅层多尺度时间特征。采用1×1、3×1、5×1卷积尺度提取多尺度特征。卷积1×1的滤波器数目为6,卷积3×1的滤波器数目为10,卷积5×1的滤波器数目为14。在通过三种不同尺度的卷积提取浅层特征后,只需将不同卷积产生的所有特征映射连接起来,就可以整合所有提取的信息。(3) 在MS-ResNet中,残差学习可用于加深网络深度,提取高层次的负载特征。每个残差单元设计为预激活形式。每个单元包含三个卷积运算。残差单元的卷积核大小分别为1×1、3×1和1×1,卷积操作前采用了批处理规范化和ReLU激活函数。如图1所示,由三个残差单元组成的第一残差块用于底层特征提取。MS-ResNet中的第二个残差块由4个残差单元组成,第三个残差块由6个残差单元组成。每个残差单元的结构与第一个残差块的结构相同。第一个残差块卷积核数为30,第二个残差块卷积核数为40,第三个残差块卷积核数为50。三个残差块处理后的特征图实际上包含了丰富的多尺度时间序列特性。在第一个多尺度卷积中尺度较小,为了进一步增大卷积核的感受野来提取高层次的多尺度信息,在最终的残差块前建立了较大尺度的多尺度卷积。最后的表示是通过应用一个带有50个过滤器的残差块来完成的。(4) 在对多个残差块进行特征提取后,将序列信息展平为表示主序列的一维特征向量,然后通过一个全连接层将矢量映射到误差序列中。
多尺度深度残差网络使用均方差损失(MSE)作为损失函数,公式如下:
(6)
为了验证所提算法的有效性,本文将采用两个数据集进行仿真。第一个数据集为我国某地电力系统的220 kV母线数据。电力系统数据由于测量误差、传输延迟不一致等导致电力时间序列经常出现数据异常。在电力系统中,测量值和真实值之间的差值和基准值(功率基准值305 MW)的比值超2%时即认为数据异常。第二个数据集采用UCRA标准数据集中的ECG5000心电图数据,该数据集中的异常数据代表病人的心跳图异常。ECG5000心电图数据集为已经标记好的可直接用于训练和测试的数据集。本文将采用自回归滑动平均模型ARIMA方法、基于机器学习的LCAD算法、LSTM算法以及ResNet网络作对比实验。
电力系统数据的有标签数据点个数为60 000个,其中使用20 000个数据作为训练数据。由于数据中异常数据样本有限,只有1 038个异常数据点及17个异常数据区间,因此通过插入异常数据扩充样本进行训练。ECG5000心电图数据一共选取5.6×106个数据点,则主要为区间异常,并且异常样本充足,因此直接用于训练。ECG5000心电图数据选取70%数据作为训练数据,30%数据为测试数据。在进行网络训练时,采用滑动窗口选择数据,如图4所示。对电力数据和ECG5000心电图数据都采用150的窗口长度。这两组实验其他的参数设置都一样。
图4 时间序列滑动输入构造
本文使用了召回率、精确率两种评价指标来评判算法的性能。其中召回表示样本中被预测正确的正例:
(7)
式中:FN表示假正样本的个数。TP表示真正样本的个数。有两种可能,一种是把原来的正类预测成正类(TP),另一种就是把原来的正类预测为负类(FN)。精确率是针对预测结果而言的,它表示的是预测为正的样本中有多少是真正的正样本:
(8)
式中:FP表示假负样本的个数,即被判定为正样本,但事实上是负样本。预测为正有两种可能,一种就是把正类预测为正类(TP),另一种就是把负类预测为正类(FP)。
图5给出了电力系统数据单点异常数据检测及修正,可以看出,本文方法可以很好地拟合误差,通过误差序列的判断,可以得到修正序列。和标签数据对比结果表明,本文方法能够很好地实现数据的修正。图6给出了电力系统数据区间异常检测及修正,可以看出,本文方法实现区域数据的异常检测及修正。由于本文方法是序列对序列的拟合,因此相比其他方法在区域数据异常检测中更有优势。
图5 电力系统数据单点异常数据检测及修正
图6 电力系统数据区间异常检测及修正
表1给出了本文方法和其他几种方法在电力系统数据异常检测上的指标对比。可以看出,本文的方法比其他方法有明显的优势。ARIMA方法不能有效地提取数据特征,只是基于统计学意义上的表达,所以召回率和精确率较低。LCAD方法基于人工特征,很难得到序列特征的有效表达,因此召回率和精度也不高。LSTM能够提取序列的时序信息,因此LSTM方法的召回率和精度比ARIMA方法和LCAD方法要高。但是LSTM缺乏对序列的全面特征的表达,其指标不如ResNet方法。ResNet可以有效解决深度网络的梯度消失和模型退化,可以得到更高的语义特征,因此ResNet的召回率和精确率较高。MS-ResNet方法使用了多尺度特征提取,使得网络能够提取序列的不同时间尺度的特征,因此本文方法的召回率和精确率最高。
表1 电力系统数据异常检测指标对比(%)
图7给出了MS-ResNet方法在心电图时序数据区间异常检测及修正结果。可以看出,MS-ResNet可以非常好地拟合误差,并且能够较好地实现区间异常的判断。图7中,第三个周期出现了心电图的波动,即出现心电异常。图8给出对应的误差拟合序列。可以看出,原始数据波动大的地方,拟合误差也较大,比如图7的几个下波谷处对应的拟合误差就比较大,但这并不影响判别结果。本文通过拟合误差序列实现序列到序列的异常判断,并同时实现异常序列的修正。
图7 心电图时序数据区间异常检测及修正
图8 心电图时序数据误差估计序列
表2给出了本文方法和其他几种方法在心电图数据集上的对比结果。可以看出,几种方法的异常区间判别都比较高,这主要是由于心电图数据总体比较规律。本文的方法几乎能够将所有的异常区间检测出来,并且精度非常高,要优于其他几种方法。
表2 心电图时序数据异常检测指标对比(%)
时间序列异常数据检测与修正一直是数据科学与工程领域的研究热点。本文提出了一种多尺度深度残差网络模型实现时间序列异常数据检测与修正,该方法能够同时实现检测和修正。该方法通过对误差序列的估计实现异常数据的检测,并通过网络的最后一层实现数据的修正。本文中的多尺度卷积可以有效地提取时间序列的多尺度特征,提高了异常数据的辨别能力,同时深度残差结构可以有效地减少网络的梯度消失问题及模型退化问题。和其他几种方法的对比结果表明,本文提出的方法可以准确地实现时间序列的异常数据及异常区间检测及修正。