迟百峰
(北京交通大学计算机与信息技术学院,北京 100044)
时间序列是随时间变化的一组实值数据,时间序列异常检测广泛运用在工业、环境、网络和医疗等领域,研究学者设计异常检测方案发掘时间序列中不符合历史发展趋势的数据模式,进一步预测可能发生的潜在危险事件[1]。例如网络入侵检测可发现人为操作的恶意活动[2],医疗异常检测可辅助医生对各种疾病进行诊断[3],等。多元时间序列异常检测通过识别异常辅助专业人员工作、避免重大事故发生等。为了更好地检测出时间序列这一特殊数据形式中的异常,大量基于规则、统计、距离、密度的传统方法被提出,在不同应用场景下也取得了一定的效果,但这些方法难以适应大规模量级的数据,也不能较好地捕捉数据间的时序关系,导致异常检测的性能和准确率有所下降。
近几年,基于深度学习的异常检测方案受到了广泛的关注。深度神经网络能处理复杂数据,循环神经网络特别适用于序列数据,能进一步捕捉数据之间的时间依赖关系。卷积神经网络能捕捉数据间的局部空间特征。深度自编码器是一种广泛用于数据压缩的技术,由编码器和解码器两部分组成。不同于传统主成分分析法(principle component analysis,PCA)[4],编码器对数据进行降维、降噪处理,解码器重建原始数据样本[5]。使用CNN 和LSTM 搭建的DAE 在将多元高维时间序列数据映射到特征子空间时,考虑到数据之间的顺序关系和局部相关性,有助于在全局或局部区域识别某点数据是否为异常值。
本文核心工作是将卷积神经网络和长短时记忆网络融合搭建自编码器,既能得到数据的隐层空间表示,还可以捕捉数据间的一些局部特性和时间依赖关系。在隐层空间使用传统分类器检测识别异常样本。
异常检测的发展历史悠久,其异常定义通常是指明显偏离其他样本观测值的数据[6]。在时间序列领域中异常通常包括点异常、上下文异常和子序列异常三种类型[7]。点异常指的是时间序列中某时间戳的数据明显不同于其他数据。上下文异常类似于点异常,只不过上下文异常是属于一种局部异常,在时间序列中表示该时间戳的数据明显区别于前后邻域时间的数据变化。子序列异常指的是时间序列中某片段为异常。
针对于以上不同的异常类型,经典的两类解决方案为基于统计学和基于传统机器学习异常检测方法。其中基于统计学的方法是较早替代专家人工设定规则的时间异常检测方法。针对时间序列这一数据类型,使用回归模型对时间序列历史趋势进行建模,学习其内在的演变规律或模式,对未来值进行预测。当实际值与回归模型产生的预期值出现显著偏差时,该数据将被标记为异常样本。常见的方法有自回归模型(autoregressive model,AR)、自回归移动平均模型(autoregressive moving average model,ARMA)、差分整合移动平均自回归模型(autoregressive integrated moving average model,ARIMA)[8]。回归模型的方法解释性强、运行效率高,在金融等领域也有广泛的应用,但难以准确设定衡量差异性的阈值,也无法迁移到多维非线性时间序列异常检测任务场景中。
基于传统机器学习的方法不同于基于统计学的方法,传统机器学习方法可以在不关注数据底层特定分布的情况完成时间序列异常检测任务。如局部离群因子(local outlier factor,LOF)通过密度估计方式搜索最近邻,将位于稀疏区域的数据标记为异常[9]。后来Oehmcke 等人将LOF 扩展应用到时间序列数据[10],Tang 等人提出基于连接的离群因子(connective-based outliers factor,COF)改进密度估计的计算方式[11]。孤立森林(isolation forest,iForest)方法使用随机超平面切割数据空间,分布密度稀疏的异常样本或离群点更容易被切分到一个子空间中[12,13]。单类支持向量机(One-Class SVM,OC-SVM)并不依靠密度划分寻找异常,而是改进支持向量机(SVM)利用分类技术在类极度不平衡的时间序列数据上进行异常检测[14]。本质上将二分类转化成单分类,只要数据不属于正常类,就将其标记为异常样本[15]。
相比于上文所介绍的两大经典方案,随着深度神经网络的快速发展,深度学习异常检测方案已经在离群点检测上取得了显著性效果[16]。比如循环神经网络(RNNs)可有效捕捉时间序列数据的特征,其经典模型长时间记忆网络(LSTM)和门控递归单元(GRU)通过内部独特结构存储、遗忘或传递时间信息,通过反馈连接建立前后时间值的关联。在时间序列异常检测中,LSTM序列模型预测未来时间序列趋势,如果不符合LSTM捕捉到的上下文发展规律可当异常样本处理,并已经证明与传统方法相比算法性能显著提高[17]。卷积神经网络(CNN)能从复杂的高维数据中提取局部特征,可作为特征提取器用于序列数据或图像数据的离群点检测[18]。深度自编码器通过重构输入数据学习一个恒等变换函数,当自编码器使用正常数据作为输入进行模型训练时,仅能够对正常样本进行恒等变换,无法重建的异常样本会因高残差被标记为离群值[19]。此外,结合自编码器的编码器编码能力和传统分类器分类能力,将异常检测问题转化为有监督的分类问题也取得了很好的进展[20]。
本文采用混合深度学习异常检测思路,在数据预处理的基础上,第一步将深度自编码器的编码器作为特征提取器,第二步将易区分的编码数据送入传统分类器中进行异常检测,实际结果表明该结合方案具有很强的鲁棒性[21-22]。
本文提出的混合深度学习异常检测方法分三大阶段,分别是数据预处理、模型搭建、预训练模型中的编码器先对数据进行编码,然后送入传统分类器进行异常检测,本章节依次对三个阶段展开论述。
时间序列的尺度选择、缺失值处理或噪声污染处理严重影响异常检测的准确性。本文采用滑动窗口技术和二次下采样技术对原始正常数据进行处理,有助于深度自编码器在此基础上学习到更加明显的区分特征,具体操作如下,总体过程如图1所示。
(3)二次下采样技术处理滑动窗口序列。下采样技术广泛运用在视觉图像领域,通过对图像进行下采样,可使得图像符合显示区域的大小或生成对应图像的缩略图。将其迁移到时间序列领域上对数据进行采样缩减,使得深度自编码器训练速度更快并一定程度避免过拟合情况的发生。下采样技术还能充分考虑数据的分布不均衡等问题,以相对较少的样本考虑全体数据的特性。首先第一次下采样使用在滑动窗口技术处理后的序列集合上,即对滑窗产生的各个窗口进行下采样,假设采样的个数为k,那么Wsample=[wstart,…,wend],其中k=wend-wstart。进而在对Wsample内的数据进行第二次下采样,这样可以考虑到不同时刻不同时间段和不同时间间隔的情况。
本文使用的主要模型为深度自编码器,主要内部网络结构包括卷积神经网络(CNN)和长短时记忆(LSTM)网络。卷积神经网络(CNN)通常用于计算机视觉中的目标检测、图像分类等任务[23-25],但时间序列数据在形式上类似于图像数据,可更好地关注数据的局部特征。长短时记忆网络(LSTM)通过内部结构引入基于上下文的加权自循环机制,可自动判定过去信息是否遗忘或向后传递[26-27],被广泛用于自然语言处理、语音识别和时间序列各种任务中[26-28]。
深度自编码器有机地统一CNN 和LSTM 两种经典神经网络结构,对时间序列数据既捕捉局部特征,也考虑前后时间依赖程度。其中编码器部分可对数据样本进行隐层特征的表示学习,解码器部分通过重构原始样本约束其隐变量学习的程度,重构误差越小表示自编码器对数据样本重建能力越好,那么自编码器重建异常样本则会产生一个较差的效果从而发现异常。
深度自编码器通编码部分为将原始数据映射到隐层特征空间,相当于对原始数据进行一种潜在空间的表示学习[29]。解码部分则试图将原始数据的新表示还原成原始数据。一般使用均方误差(mean square error,MSE)衡量原始输入和重建输入差异度,即重构效果。数学表达如下:
公式(1)代表自编码器对原始数据的编码过程,本质上是一个映射函数f用隐变量z来表示原始数据x。公式(2)代表自编码器对隐变量z的解码过程,本质上也是一个映射函数g将隐变量z还原成原始数据x^。公式(3)就是使用均方误差MSE尽可能的降低原始数据与重建数据的差异性。
本文所采用的模型架构如图2 所示,预处理数据作为输入依次经使用Relu 激活的卷积层、带有正则操作的最大池化层、使用Relu 激活的全连接层以及两次LSTM 层获得最终输出,具体代码流程见算法1:训练CNN+LSTM自编码器。
图2 模型架构
算法1:训练CNN+LSTM自编码器
模型预训练过程使用仅包含正常样本的数据集,这样深度自编码器可以对正常样本的时间序列有较好的重建能力,对异常样本则无法进行重建或重建效果很差。异常检测阶段主要使用预训练好的自编码器的编码器对数据进行编码,在潜在空间对数据进行隐层表示,异常样本将明显远离正常样本的所在范围。传统分类器(如SVM 等)就可以明确地划分出决策边界,从而精准地发现异常点和正常点,具体过程如图3所示。
图3 异常检测过程
异常检测过程重要的环节为数据编码表示、训练传统分类器、使用传统分类器在测试集上进行标签类别预测。使用二进制表示输出结果,即1表示该样本为异常,0表示该样本为正常。具体代码流程见算法2。
算法2:异常检测过程
本文在Mammography、Satimage-2、Campaign三个数据集上进行了广泛的实验,与单纯使用传统分类器、普通全连接网络搭建的自编码器结合传统分类器的方法对比,评价本文所提出的使用CNN 和LSTM 搭建的深度自编码器与传统分类器结合的异常检测效果。此外,还与经典的异常检测方法进行比较,如局部异常因子(Local Outlier Factor,LOF)[9]、一类支持向量机(One Class SVM,OCSVM)[14]、孤立森林(Isolation Forest,IForest)[12]以及先进的 Copula-Based Outlier Detection(COPOD)[30]。实验结果表明本文提出的方法异常检测效果普遍更佳。
本文在3 个数据集上进行了实验,分别来自ODDS 异常检测数据库的Mammography、Satimage-2 数据集,和来自于UCI 机器学习数据库的Campaign数据集,基本信息如表1所示。
表1 数据集介绍
(1)Mammography 数据集最初是Aleksandar Lazarevic 提供的乳腺摄影,记录乳腺是否存在钙化的情况。在异常检测任务中,将钙化情况视为异常样本(标记为1),其他全部情况视为正常样本(标记为0)。
(2)Satimage-2 数据集由陆地卫星(statlog)记录采集并最初用于多分类任务,在异常检测任务中,对原始数据集的第2 类别下采样出71 个异常样本(标记为1),其他所有类别视为正常样本(标记为0)。
(3)Campaign 数据集记录的是葡萄牙某银行机构的一次营销活动情况,在异常检测任务中,用户在本次活动中成功订阅该机构产品视为异常(标记为1),反之视为正常(标记为0)。
本文主要参数为数据预处理中使用的滑窗及两次采样大小,和CNN+LSTM-AE 模型中的卷积核、神经单元数等,具体信息如表2所示。
表2 实验参数
本文评价标准采用F1 Score,原因是异常检测问题本质上是一个类极度不平衡情况下的分类问题,使用F1 Score 可以兼顾检测的精确率和召回率,能客观地表明模型的健壮程度。
与普通全连接层搭建的自编码器结合传统分类器、原始传统分类器进行对比,可以发现使用CNN+LSTM 对原始数据编码后再结合传统分类器,在这三个数据集上均表现出良好的效果,实验结果如表3 所示。Mammography 数据集上效果尤为显著,F1 Score均有明显提高。在Satimage-2数据集上,本文提出的方法略优于使用普通全连接层的编码后结合传统分类器,并且F1 Score 接近满分趋势。Campaign 数据集样本量偏大,异常分布极不均衡,本文提出的方法虽优于其他两种方案,但F1 Score 均在0.9 以下。总的来说,CNN+LSTM-AE 方法在小数据集上可保持较高的F1 Score,对于大数据集只能小幅度提升F1 Score,并不能像其他数据集达到接近F1 Score=1的结果。
表3 实验结果
与经典的异常检测方法进行对比,如局部异常因子(local outlier factor,LOF)、一类支持向量机(one class SVM,OCSVM)、孤立森林(isolation forest,IForest),本文提出的方法依旧领先于其他三种方法,实验结果如表4 所示。原因很简单,三种经典方法均无法有效捕捉序列相关性等局部特征,F1 Score 仅能保持在0.5 左右,而本文提出的CNN+LSTM 作为数据的预编码结合传统分类器有效克服经典方法的缺点,可取得F1 Score 平均保持在0.9左右显著效果。
表4 实验结果
基于概率累计函数设计的快速异常检测方法COPOD 的异常检测效果特别快,实际应用场景广泛,但主要问题与上面三种经典方法一样,无法考虑到数据之间的局部信息或顺序信息导致检测效果不佳。本文提出的方法与COPOD比较的实验结果如表5所示。
表5 实验结果
根据广泛的实验结果分析可知,本文提出的混合方法可有效提高异常检测的效果,F1 Score均能保持一个较高的程度。此外仅使用普通的全连接层搭建自编码器结合传统分类器都能取得比较好的性能,间接证明先使用神经网络对数据进行编码,提取内在更具区分性的特征,再进行异常检测的思路行之有效。不过本方案也存在比较明显的问题是先对深度自编码器进行预训练得到强大的编码器,再进行异常检测不属于端到端模型,导致两部分可能均陷入局部最优解,无法动态权衡两部分得到一个全局最优解,所以在大数据集Campaign 上的F1 Score 始终无法与其他数据集相媲美。
本文提出了一种深度混合多元时间序列异常检测的方法,使用CNN 和LSTM 搭建深度自编码器,目的是学习到数据有效的隐层表示,基于这种隐层表示结合传统分类器高效快速地检测识别异常样本。该方案也进一步表明CNN 和LSTM 的组合确实能较为充分地考虑数据之间的时间依赖关系,经编码器编码得到的隐层特征表示在潜在空间的区分边界更加容易确定。在今后的工作中,将考虑设计原始混合模型为端到端模型并加入注意力机制,提升在任何大小、任何形式数据集上的异常检测性能,同时考虑时间序列不同维度之间的影响程度,进一步提升本文方法在结构复杂的实际应用场景下的鲁棒性、高效性。