APP下载

深度自编码器在数据异常检测中的应用研究

2020-09-04张常华周雄图张永爱姚剑敏郭太良

计算机工程与应用 2020年17期
关键词:编码器编码深度

张常华,周雄图 ,张永爱,姚剑敏,2,郭太良,严 群 ,2

1.福州大学 物理与信息工程学院,福州 350108

2.博感电子科技有限公司,福建 晋江 362200

1 引言

随着互联网的普及和信息技术的发展,异常检测已逐渐成为数据挖掘领域的研究热点。异常检测旨在检测出观测数据中的非正常值,被广泛应用于信用卡欺诈、网络入侵检测、设备异常检测、医疗分析以及气象预报等领域。在上述领域中,异常数据的产生,相对于大量存在的正常数据,通常被视作一种随机现象,不符合正常数据的数据模式,也不具备正例样本所具有的数据相关性,并且异常数据样本较稀少。因此,如何精准地将大量数据中的少量异常数据检测出来,成为该研究领域亟需解决的关键难点[1-4]。

近年来,国内外研究学者围绕数据异常检测做了大量的研究工作。数据异常检测方法大致可分为传统机器学习和深度神经网络两种方法。近几年比较主流用于异常检测的机器学习方法有孤立森林(Isolation Forest,IF)与单类支持向量机(One Class Support Vector Machine,OCSVM)等方法[5-7]。如李新鹏等人[8]采用IF数据异常检测方法,在电力调度流数据异常检测的AUC 值达到了0.968;吴旗等人[9]利用改进的OCSVM方法,对网络流量异常进行检测,使得分类准确率提高了近10%,有效解决了传统流量异常检测方法的低准确率和开销大等弊端。目前主要应用于数据异常检测的深度神经网络模型有自编码模型(Auto Encoder,AE)以及变分自编码模型(Variational Auto Encoder,VAE)等。Sun等人[10]利用改进的变分自编码器检测网络入侵数据集KDD-CUP,其AUC 值可达到0.951,高于传统数据异常检测模型,相比于AE方法提高了0.53%,相比于OCSVM方法提高了12.15%。

随着深度神经网络模型应用于数据异常检测的研究不断取得进展,传统机器学习模型在异常检测上的性能已不如神经网络模型。如由于IF 和OCSVM 模型分类的性质,已不适应用于高维度的数据异常检测。尽管自编码以及变分自编码模型模型在数据异常检测上的性能普遍优于传统机器学习模型、但是模型训练需要正常(干净)的数据。另一方面,采用传统自编码模型进行数据异常检测,其训练数据集一般包括正常数据和异常数据,如果模型只能用正常数据进行训练,就必须事先进行数据预处理以获取只包含正常数据的数据集,对实际数据异常检测具有一定局限性[11]。

另一方面,在自编码网络构建中借鉴深度学习思路,已被用于特定环境中异常数据的检测[10,12]。针对目前数据异常检测方法存在的问题,本文引入深度学习网络中的自编码模型,并将自编码模型进行改进,构建出深度自编码模型(Deep Auto Encoder,DAE)。该模型方法不仅异常检测性能优于传统机器学习模型,而且克服了传统自编码需要正常数据进行模型训练的局限性,无需输入正常(干净)数据就可以训练网络模型。对比实验结果表明深度自编码模型在数据异常检测上的性能优于传统的机器学习模型以及自编码模型,对于现实问题中数据异常检测具有很好的实用价值[3-4,13-14]。

2 深度自编码器模型的构建

本文提出的深度自编码器模型是在自编码器模型的基础上,采用主成分分析的方法将数据分为两部分进行处理,可以弥补传统自编码模型需要正常数据集进行训练的缺陷并有效地检测出异常数据[15-16]。

2.1 自编码器模型网络

AE 是一种包含有输入层、隐藏层、输出层的三层神经网络模型,通过无监督的学习算法获取数据中重要信息。从输入层到隐藏层的压缩低维表达过程可以称作模型的编码阶段(Encoder),从隐藏层的压缩特征映射还原出输出层的近似原始数据的过程称为解码阶段(Decoder)。

设原始空间数据为Rm×n,m为原始空间中数据实例数,n为每条实例数据的维度。x(i)∈Rn(i=1,2,…,m),编码和解码过程分别如式(1)和式(2)所示:

式(1)中,h(i)为每一个输入实例x(i)经过编码器得到隐藏层的特征表达;θ=(W,b)为网络参数,W为输入层到隐藏层之前的权值矩阵,b为隐藏层神经元的偏置量,σ(x)为激活函数,本文选用式(3)的Sigmoid 函数。式(2)中,x̂(i)为隐藏层经过解码后得到的重构表达;θ=(W′,b′)为网络参数,W′为隐藏层到输出层的权值矩阵,通常取W′=WT,b′为输出层神经元的偏置量。

AE 的学习目标是最小化重构误差L的值,使得输入与输出值尽可能接近,误差函数L的选择为式(4)所示的均方误差损失函数:

则自编码器的目标函数可改写为式(5):

其中,X为输入数据,E代表编码器,D代表解码器,‖为L2 范数。本文所提到的深度自编码器模型是在原自编码器的基础上进行改进,实际上是对式(5)进行改进,让其更好地应用于数据异常检测[16-19]。

2.2 深度自编码器网络构建

传统自编码网络应用于数据异常检测,首先用正常的数据集训练一个自编码器,通过训练出的自编码器计算异常数据的重建误差,最后设置一个阈值α,重建误差大于这个阈值则为异常,否则为正常,可见传统的自编码器应用于数据异常检测,模型训练需要正常(干净)数据。并且,根据式(5)的目标函数可知,目标函数无任何约束项(正则项),也会使得模型易出现过拟合现象[10,20]。

另一方面,主成分分析(Principal Components Analysis,PCA)主要通过求数据集的协方差矩阵最大特征值对应的特征向量,由此找到数据方差最大的几个方向,对数据达到降维的效果。在数据异常检测过程中引入PCA 方法,将输入数据分为正常数据和异常数据两部分,正常数据部分由自编码网络重建输出,异常数据部分由近端法进行优化输出,如图1所示。

图1 深度自编码模型结构

在初始时刻,假设输入数据中异常部分为0,即把整个初始输入数据X0当成正常部分,经过自编码网络训练后,所输出的重建数据LD0与初始输入数据X0求差即为当前训练的异常部分S0,并采用近端优化方法进行优化输出再与输入数据进行求差进行下一次模型训练。如PCA方法中描述将输入数据X分为两部分进行处理,即:

其中,X代表输入数据,L代表输入数据中的正常(干净)部分,S代表输入数据中的异常部分。将L部分输入到自编码器网络进行有效重建输出LD,通过输入数据X,得出S=X-LD,将其用近端法优化输出S,与输入数据X相减再次得到L=X-S,等待下一次输入到自编码器网络重建输出。如此交替优化后,模型即完成一次训练。当达到所设定的迭代次数后输出最终结果。通过PCA 方法将输入数据分为异常与正常部分,模型不仅可以将输入数据中的异常部分隔离开,并用正常部分去训练(学习)自编码器,而且还通过近端优化的方法去优化异常部分,通过迭代使正样本与负样本有效地分离开,达到异常检测的效果。这样构建将有利于模型更好地描述数据集中正常数据的分布,并且有望在无标签的情况下达到很好的异常检测效果。

将S加入到目标函数的正则项部分。根据式(5)与图1模型构建,可将模型的目标函数重写为:

其中,L是输入数据中的正常(干净)数据部分,可以由自编码器很好地重建出;S包含着自编码器难以重建的异常或噪声数据;LD是正常(干净)数据重建后输出数据;式中的Eθ,Dθ是将编解码进行参数化;λ是调整S稀疏程度的参数,即输入数据中心异常数据的比例大小,是后续模型训练中的重要参数。即λ越小代表模型认为越多的数据为异常数据,反之越少的数据为异常数据。式中为L21范数,其计算式为:

L21 范数为先求各行的L2 范数得到一个m行1 列的向量,再计算求这个向量的1范数。即:矩阵X每一行的L2范数之和[13-14,18-19]。

模型输出结果ŷ可定义为矩阵X-LD-S对每行求L2范数,即得到一个m行的列向量,如式(9)。由于S矩阵代表异常数据,当S矩阵中某行基本接近于0向量,说明该条输入实例很可能为正常数据,输出结果ŷ近似于X-LD的L2范数;当S矩阵中某行的行向量中的值为不可忽略的值,说明该条输入实例很有可能为异常数据,输出结果ŷ为式(9)所示。最终模型的决策函数可设定一个相应的阈值将数据分为异常或者正常数据。

其中,xij为X-LD-S内i行j列的值。

3 算法实现

3.1 深度自编码算法

本文构建的深度自编码模型具体算法如算法1,其中步骤3 至步骤10 为DAE 算法主要部分。步骤3 先初始化S与LD,使其为m×n的0 值矩阵,并随机初始化自编码网络中的权值W和偏置b。步骤5至步骤10为DAE模型一次训练,其中步骤7、8为传统自编码器重建输入的部分;步骤9、10为深度自编器改进的部分,具体根据重建的LD更新稀疏矩阵S,并用近端优化的方法优化稀疏矩阵。这样即DAE 模型完成一次训练,当训练次数达到迭代次数上限iteration_limit时,模型输出最后决策得分Sn。

算法1深度自编码(DAE)算法

3.2 近端优化方法

近端优化方法提供一个近端算子,相当于阈值函数,与λ值比较,对数据中的S部分进行优化更新。并通过每次迭代优化后,正常数据(正样本)的S部分将置为0,而异常数据(负样本)的S部分值将置为与阈值相关的值,当该行的2 范数越大于λ时,其优化后的S值将越大,模型将认为当前行为异常值的概率更大,反之亦然。故可通过近端优化算法迭代后,可以使得输入数据中的正常数据与异常数据有效地分离开,达到异常数据检测的效果。

采用近端优化方法对算法1步骤10的S进行优化,根据λ值求解出S。其中λ为调控正常数据与异常数据的一个阈值,λ值越小模型越敏感,模型认为输入数据中异常值比例越多,反之相反。近端优化算法具体如算法2,其中步骤4 至步骤9 为算法主要部分,步骤5、6计算S每一行的2范数,如果S当前行的2范数大于λ,将对该行进行更新,否则直接置0。故每次可通过近端优化算法迭代,使得正常数据与异常数据很好地分离开,λ也是后续模型调参中的一个重要参数。

算法2近端优化算法

3.3 模型训练方法

本文中,DAE 采用交替方向乘子的优化方法进行模型训练。交替方向乘子算法(Alternating Direction Method of Multipliers,ADMM)是将目标函数分为两个或者多个部分进行优化的方法。首先,对其中一部分进行优化求解,对其他部分进行固定。将式(6)分为两部分,一部分优化L,则S固定为常量,优化目标为:‖LD-Dθ(Eθ(L)) ‖2;另一部分优化S,则包含L的部分固定为常量。其中优化第一部分L时,使用反向传播(Back Propagation,BP)方法,该方法是深度学习模型训练中经典的优化方法;优化第二部分S,使用3.2节中所提到近端优化的方法最小化正则项部分。

最后,整个模型的训练实际上是首先固定S,使用BP 算法训练自编码器并最小化再固定L,使用近端优化的方法优化正则项部分。在每次交替最小化中,都分别计算出S=X-LD和LD=X-S,直到达到迭代次数,模型训练完成,输出最终结果。从整个算法的构建以及训练可以看出,DAE 模型训练无需有标签数据,属于无监督学习,较之传统AE需要正常(干净)数据去训练的半监督学习应用性更广,并且DAE 模型加入了约束项(正则项),使得模型不易出现过拟合现象,泛化能力更强,有望获得更加可靠的结果。

4 实验结果与分析

实验在Intel Core i5 CPU@1.6 GHz、显卡AMD HD8600、4 GB RAM 环境下和 Windows7 操作系统下实现,使用Python3.5 进行仿真实验,DAE 算法采用TensorFlow 框架实现,其他基线算法采用PyOD 自带包来实现。

4.1 评价指标

采用AUC值来评价模型的性能。利用机器学习领域中二分类问题的四个概念进行分析,如图2所示。

其中,TP(True Positive)为在预测正样本中,预测正确的数目;FP(False Positive)为在预测正样本中,预测错误的数目;TN(True Negative)为在预测负样本中,预测正确的数目;FN(False Negative)为在预测负样本中,预测错误的数目[16]。

AUC(Area Under Curve)值的概念解释如下:ROC曲线(Receiver Operating Characteristic Curve)为接受者操作特性曲线,ROC曲线上每个点反映着对同一信号刺激的感受性,ROC 曲线下与坐标轴围成的面积即为AUC值。其中,横轴为假正类FPR(False Positive Rate):纵轴为真正率(召回率)TPR(True Positive Rate):TPR=。AUC 值是一个介于0.1 和1 之间的概率值,当随机挑选一个正样本以及负样本,当前模型算法根据计算得到的Score 值将这个正样本排在负样本前面的概率就是AUC 值,AUC 值越大,当前分类算法越有可能将正样本排在负样本前面,从而能够更好地分类,也可以有效地评价模型算法的好坏,即AUC 值越大模型性能越好。由于异常检测数据正负样本的不均匀性,而AUC 值又不受正负样本不均衡的影响,故对比实验主要是对各算法的AUC 值进行比较。

4.2 数据集

本文采用PyOD工具包中所用的数据集,与传统异常检测方法进行比较。PyOD 是一个全面且可拓展的Python异常检测工具包,里面集成了很多传统的异常检测算法模型,便于验证DAE 算法的性能优越性。本文选用7个多维点数据集进行对比,列数代表数据集的特征数(即维度)和标签值(即y值),行数代表数据集的样本数。具体算法模型输入X为数据集的多维数据,所需要的标签(y值)1代表异常值,0代表正常值。表1为各数据集的具体信息。

表1 各数据集具体信息

4.3 实验结果与分析

对于每个数据集,首先将其随机打乱分为两部分:80%用于训练,20%用于测试。为了研究不同超参对模型结果的影响,以mnist数据为例,分别对不同λ值以及自编码网络结构下的模型进行实验,得到各种情况下的AUC 值并找到最优超参值,如表2 和表3 所示。表2 为对比不同自编码隐藏层与神经元数对AUC 值影响,将模型其他参数设置最优参数,通过实验可得,当自编码隐藏层为3层时,并且第一层神经元数为输入数据维度的 0.6~0.7 之间时,AUC 值达到最优。表3 分析了λ对模型的影响,将模型其他参数都设置为最优参数。由算法2 可知,λ为调控正常数据与异常数据的一个阈值,通过表1可知mnist数据集中异常值比例为9.21%,故对模型λ调参,当模型判定的异常值比例与9.21%接近,此时λ值作为模型可参考的最优参数。当λ=1 时,其异常值比例值接近于实际值,并且AUC值达到最大,则此时λ值为模型最优参数。

表2 mnist数据集下不同自编码网络结构的AUC值

表3 mnist数据集下不同λ 值下自编码模型表现

通过模型在mnist 数据集上对不同超参的研究,用相同的方法对其他6个数据集进行细调参,其最优超参结果如表4所示。其中主要的需要细调的参数为:自编码器隐藏层数以及各隐藏层中神经元个数(layers)、一次训练所选取的样本数(batch_size)、模型的学习率(learning_rate)、以及模型中定义的超参数(λ)。

目前常用的数据异常检测方法主要有ABOD、FB、IForest、KNN、LOF、MCD、PCA、OCSVM 和AE 等。其中,前7种均为无监督的机器学习方法,OCSVM为半监督的机器学习方法,AE 为半监督的深度神经网络方法。本文中提出的DAE模型是无监督深度神经网络方法,为了考察DAE 模型的无监督异常检测效果,选用7种无监督的机器学习方法、1种半监督的机器学习方法和1 种半监督的深度神经网络方法作为基线方法进行对比实验。实验采用表4中DAE模型最优超参选择,对10 种方法绘制ROC 曲线,进行可视化展示。图3 给出了Minst数据集下各方法的ROC曲线,图中横轴为假正类FPR,纵轴为真正率TPR,不同颜色的曲线代表不同的方法,其中红色粗实线代表DAE方法,虚线为其他基线方法,右下角为不同方法的AUC 值(即ROC 曲线下面积)。将DAE 模型AUC 值与其他9 种基线方法进行对比,并考察10种方法在各数据集中的AUC值排名,结果如表5 所示。表中加粗的数值为当前数据集中AUC值最优的结果。由表可得,DAE模型在4个数据集中的AUC 值达到最优,在1 个数据集中达到次优,在另两个数据集分别排在第3 和第6,表现出较好的异常数据检测效果。另一方面,7 种无监督机器学习方法中,只有IForest 和 KNN 这 2 种分别在 wbc 数 据集和 optdigits 数据集出现过一次最优,但这两种方法在其他6种数据集的排名情况相对较差,如IForest在mnist数据集中的AUC值(0.796 5)明显低于 DAE 模型的 AUC 值(0.883 6),KNN在pendigits数据集中的AUC值(0.748 7)明显低于DAE 模型的AUC 值(0.953 2),表现出对数据集的依赖性。虽然OCSVM半监督机器学习方法在satimage-2和musk两个数据集的AUC值达到最优,AE半监督深度神经网络学习方法在3个数据集中达到次优的情况,但它们在其他数据集中AUC 值却明显低于DAE模型,且半监督学习需要正常数据进行训练,对于实际数据异常检测中具有一定局限性。从上述对比实验结果可得,本实验所采用的9 种基线方法对数据集都具有较大的依赖性,在不同数据的异常检测稳定性和可靠性较差;DAE模型的稳定性与可靠性更强,更适用于实际的数据异常检测中。改进后的模型不仅克服了传统自编码需要正常数据进行模型训练的局限性,而且在数据异常检测上的AUC值以及模型的稳定性也高于传统机器学习模型与传统自编码模型,相较于传统数据异常检测方法具有很大的优势。

表4 深度自编码算法模型的超参选择

图3 mnist数据集下各方法的ROC曲线

5 结束语

本文将原有自编码模型进行改进,结合主成分分析的方法构建出了一种深度自编码网络模型(DAE)。并使用近端优化方法去优化目标函数正则项部分,反向传播优化方法去优化自编码部分,最后采用交替方向乘子方法(ADMM)去训练整个模型。在实验部分,将深度自编码模型应用在7个真实数据集上与9种基线方法进行比较评估。实验结果表明本文所提的模型在4 个数据集中达到最优并且在1 个数据集中可以达到次优的结果,另两个数据集分别排在第3和第6,其综合结果优于其他的基线方法。因此就其表现来说,本文所提的算法模型可以作为当前数据异常检测研究提供一种新的思路,具有一定研究价值。

表5 各模型算法AUC值

猜你喜欢

编码器编码深度
融合CNN和Transformer编码器的变声语音鉴别与还原
基于SAR-SIFT和快速稀疏编码的合成孔径雷达图像配准
深度理解一元一次方程
《全元诗》未编码疑难字考辨十五则
子带编码在图像压缩编码中的应用
深度观察
深度观察
Genome and healthcare
深度观察
基于双增量码道的绝对式编码器设计