英文题目:Deep Learning for Anomaly Detection: A Review
中文题目:基于深度学习的异常检测综述
论文地址:https://arxiv.org/pdf/2007.02500.pdf
领域:异常检测,深度学习
发表时间:2020.01
作者:Guansong Pang,阿德莱德大学
出处:ACM Comput. Surv.
被引量:697(谷歌学术)
代码和数据:见论文附录A
阅读时间:2022.11.05
全文翻译:https://blog.csdn.net/pingguolou/article/details/117421638
本篇解读的论文发表于2020年,主要介绍基于深度学习的异常检测技术,可作为2009年发表的那篇高引的传统异常检测综述的互补。前三章主要是相关问题和挑战(1-3章)。从第四章开始总结了近年来深度异常检测的具体方法,共3大分类(4-6章),11个小分类。分别对关键直觉,目标函数,基本假设,优势劣势,及应对挑战方法进行讨论。最后讨论了未来的机会,还提供了大量文献列表和训练数据集,实用性强。本文旨在做一个二十分钟左右的简单的导读。
异常检测被定义为:检测明显偏离大多数数据的数据实例。早期技术涉及:数据挖掘、机器学习、计算机视觉和统计学,近年来深度学习在多维数据、时间数据、空间数据和图数据都表现出巨大提升,深度学习异常检测是使用神经网络学习特征表征和异常得分。
本篇主要贡献如下:
异常检测问题的复杂性主要包含以下几方面:
下面问题大多未被很好解决,而深度学习方法可能发挥作用。
相对来说深度方法能进行端到端的优化,且能学到专门的表征(隐藏层输出),提升数据利用率,能处理更复杂的数据(如文本,视频,图像等),目前已有成熟的多种框架,相对传统方法更有优势。
跳过一些神经网络的基本原理介绍。
深度网络可学习更好地表征数据。设为X原始空间中的数据集,学习一个映射X->Z,将其映射到表示空间,在表示空间中更容易区分正常和异常数据。异常检测目标是学习映射函数或者学习异常得分函数(异常得分越高,越可能异常)。
文章将深度学习异常检测分为3大类11小类。
三大类分别是:提取特征的学习(一个子类),标准化的特征表示(两个小类,七个子类),端到端的学习(四个子类)。
该方法从高维提取低维数据表示z = (x;Θ),再用于下游的异常检测,上下游相互独立。
与传统的PCA和随机投影相比,深度学习在提取富含语义的特征和非线性特征关系方面表现出更强的能力。
它基于假设:
深度学习模型提取的表征保留了有助于将区分异常的信息
比如使用AlexNet, VGG, ResNet图像处理框架提图片低维特征,然后进一步代入下游任务,比如把视频拆成多帧图像,检测其中的异常帧。它需要特征转换器足够强大,且在不同任务中尽量是通用的。
优点
结合特征学习和异常评分,一般分为以下两类:
模型就可以直接给出异常得分,通常是其它算法的附产品,未针对异常检测优化
通过使用通用的目标来学习实例的表征,目标函数往往不是为检测设计,但可用于提升异常检测效果。它可以捕捉数据中的基本规律。
其中Θ和W是训练得到的模型参数,是特征空间的映射,用于处理具体任务,l是损失函数,s是异常评分,f是评分函数。具体又分为以下4个子类别:
一种广泛使用的数据压缩和降维技术,低维数据表征强制学习数据的规律,以最小化重建误差。异常数据很难从低维表征中重建,因此有很大的重建误差,以此区分正常和异常。
它基于以下假设:
与异常情况相比,正常实例可以更好地从压缩的空间中进行重组。
一个AE由一个编码网络和一个解码网络组成,编码器将原始数据映射到低维特征空间,解码器则试图从投影的低维空间恢复数据,这两个网络的参数是用一个重建损失函数来学习的。模型会尽量保留与主导实例(即正常数据)相关的信息,而异常数据由于偏离正常数据,所以损失更大,也可将损失作为异常得分。
其中e表示编码,d表示解码,z是压缩后的数据x^为重建数据,s为异常评分。
之后还提出了AE的更多改进版本,如sparse AE, denoising AE, contractive AE等。AE除了处理表格数据以外,也被用于序列数据图数据图像视频的异常检测,如CNN-AE,LSTM-AE,GCN-AE等,这些方法将编解码输入到处理流程中;也有先处理AE,再处理其它网络如RNN的方法。
优点
基于生成对抗网络的异常检测也被广泛使用,这种方法主要通过生成网络G学习潜在的特征空间,从而捕捉数据的规则。真实实例和生成实例的残差被定义为异常得分。
它基于的假设是:
正常数据比异常数据,通过生成网络生成数据的效果更好。
AnoGAN是早期的方法,首先用常规目标训练GAN:
其中G是生成模型,D是判别模型,V是博弈的价值函数,其损失函数由两部分组成,一部分是残差损失,用于衡量生成数据的效果:
另一部分是基于特征匹配的损失:
其中是迭代次数的索引号,h是隐藏层的输出。z从一个随机采样开始,随着迭代逐步优化。异常得分被定义为最后一步得出的z构造出的数据和x的相似性:
为超参数。
AnoGAN的主要问题是Z的迭代搜索效率低,后来又提出了BEGAN,快速AnoGAN,ALAD,GANomaly 进一步优化,另外还有Wasserstein GAN,Cycle GAN等。
优点
主要用于时序数据,使用时间窗口,将以前实例作为上下文,通过预测实例来学习特征表示。为了精准预测,需要表征学习窗口内的时间序列和复发性依赖。正常实例服从依赖关系,异常数据违反依赖关系,是不可预测的。预测误差可用于定义异常评分。
基于以下假设:
正常实例在时序上比异常实例更可预测。
该技术常用于视频异常检测,如已知x1,x2,…xt帧,任务是预测未来帧xt+1,使预测的t+1帧与实际帧更为相似。损失函数被定义为:
其中x^是预测的帧,x是实际帧,pred是MSE计算的帧预测损失,adv是对抗损失,它使用对抗性训练来增强图像生成。
另一种研究方法是自回归模型,模型假设序列中的每个元素都线性地依赖于之前的元素。如给定x和它的潜在空间表示z = (x; Θ),自回归模型因子p(z)被定义为:
K是潜在空间的维度。
可能加
优点
通过建立自监督分类器来学习表征,它基于传统的交叉特征分析或特征模型,将与分类模型不一致的识别为异常。每个模型根据其他特征来预测一个特征。它评价的是特征内部的一致性。
传统方法多用于表格数据,深度学习模型可用于图像数据,通过增强数据建立预测模型。
它基于以下假设:
正常实例比异常实例对自监督分类器更一致。
开始的方法通过对图片的水平翻转,平移和旋转,在增强数据的基础上训练多分类模型,将同一图片及变换后的图片作为一个类别。在推理时,也用转换组合进行增强,用所有增强后的实例做softmax再聚合来定义规范性得分。其损失函数定义为:
其中CE是交叉熵,其中 z = ( (x); Θ),其中T是变换,z是低维空间的表示,是多分类器,yTj是转换后合成类的OneHot编码。这里使用了特征学习器和类别学习器。在这种自监督多分类训练过程中,正常实例引起的梯度变化比离群值大得多,网络更新也偏向正常值,正常值与分类器更为一致。评估异常使用三种策略:平均预测概率,最大预测概率,所有预测概率的负熵(此策略更好)。
优点
深度学习和机器学习相结合
针对某一种异常优化特征表示,可表示为:
与式2-3不同,这里的f是一种现有的异常评分,专门针对当前目标 f 优化特征表征,一般对异常的量度分为以下三类:
针对距离优化特征表示。传统的基于距离异常度量的主要问题是,无法在高维数据中有效工作,而基于深度学习的方法可在度量前将高维转换到低维空间,很好地解决了这一问题。
它基于以下假设:
异常现象分布在离其最近的邻居很远的地方,而正常实例位于密集的邻域。
这种方法首先用于利用随机邻居距离优化从超高维数据中学习低维表示。让伪标签异常的近邻远大于正常的近邻。伪标签是由一些基本距离的异常检测器生成的。
设S为X中的抽样的数据子集,A为异常集合,N为正常集合,计算损失函数如下:
m是预先定义好的常量,使用了铰链损失函数,其目的是让异常邻居的距离至少要比正常距离大m。距离函数f是随机距离,计算方法如下:
f用于表示实例的异常得分,也可以替换成其它距离计算方法。
优点
学习为后续基于单类分类的异常检测定制的特征表示。单分类是检测测试实例是否符合训练数据。大多数单分类模型受支持向量机启发,此处的方法一般是将SVM和深度网络相结合。
它基于以下假设:
所有的正常实例都来自于一个类,并可用紧凑的模型来概括,异常情况并不符合这个模型。
具体思想是先用神经网络降维,然后从低维数据中用SVM学习一个超平面实现分类。其通用表述是:
其中r是边界参数,Θ是从高维向低维映射的网络参数,z是转换后的低维向量,是一个超参数,它是训练集中异常分数的上限,任何 − w⊺z > 0的实例都可能报告为异常点。该方法有两个好处,可以用深度学习网络学习更有表现力的特征用于下游任务;另外有助于消除核函数中计算量大的配对距离计算。
另一条研究线路是研究SVDD(建立一个最小的超球体,以尽可能地包含所有正常数据)的深度模型,其核心加数是中心c和半径r,深度SVDD旨在利用神经网络将数据实例映射到最小体积的球体中,然后采用铰链损失函数来保证球体中心和投影实例之间的余量,目标可通过最小化以列损失函数共同训练:
一些改进方法,可将SVDD应用于半监督学习,其关键思想是最小化正常实例到中心的距离,同时最大化异常实体到中心的距离。
优点
这个挺好的
深度异常检测旨在学习表征,使异常数据偏离正常数据表征空间中的聚类。大量研究致力于使用聚类定义异常,如判断聚类的大小,与质心的距离,质心间的距离,以及成员间的距离,基于高斯混合模型的异常检测也被纳入该类别。
它基于以下假设:
正常实例比异常实例对聚类有更强的依附性。
深度聚类专门为聚类算法定制特征,基于以下关键直觉:
lclu是聚类的损失函数,y是伪标签,是特征映射,f是聚类分配函数,aux用于对表征施加额外的约束,比如基于自编码器的重建损失,以学习到稳健和保留局部结构的表征。
由于聚类可能被损失污染,上述方法可应用于半监督环境,在无监督环境中使用时还需要加一些额外约束条件。算法的目标是聚类,在过程中可以产生基于聚类的表征,后续还有一些改进,以加强对异常的识别。
优点
以端到端方式学习标量异常评分,不依赖现有的异常度量(以免受该方法的缺陷影响),底层框架可表示为:
它同时学习异常表征和异常得分或排名。和5.2中方法的差异是,5.2偏重结合现有的度量和深度学习方法,而端到端的学习通过重新设计损失函数直接学习。分为下列四个主要方法:
这组方法直接学习异常排名,神经网络由序数变量驱动。
它基于以下假设:
存在一个可观察的序数变量来捕捉某些数据的异常性。
在无监督环境中,一个研究思路是设计基于序数回归的损失函数来驱动异常评分神经网络。设y为标签,y = {1, 2 } 且 1 > 2,其目标函数设置为:
此外l是MSE或MAE的损失函数,当x为异常时y是c1,当x是正常实例时y是c2,此处的y是标量,因此是一个标量序数回归问题。
在端到端的网络中,是否正常(A/N,由一些现有的方法初始化,不断迭代更新)也作为网络的输入,学习优化异常分数,让异常的数据去拟合更大的值,比如使用ResNet-50抽取图像特征,然后在其后加入两个全连接层来构建异常评分。
在弱监督环境中,假设有很少的有标签的异常,和大规模无监督数据,异常检测被设置成成对关系预测任务,以区分数据为以下哪种情况:两个异常,一个异常,没有异常。设A为标记异常集,U为无标签集,全部数据X由A和U组成。P为数据抽样实例对,y是序列变量,预定义有:x x > x x > x x ,方法定义如下:
其中是预测标签的方法,模型被优化为:两个异常点分数大于一个异常点,大于无异常点。在推理阶段,每个实例与A和U分别配对,以获得异常得分。
另一种弱监督学习方法,用于视频监督,已知某个视频包含异常帧,但不知哪一帧异常,引入了基于多实例学习的排名模型,目标是保证异常视频(正袋)分数大于正常视频(负袋)分数。使用铰链损失:
其中x是抽样的视频片断,Bp是正袋,Bn是负袋,损失函数第一项保证异常得分大于正常得分,后两个是额外的优化约束,第二个保证得分平衡性,最后一个保证异常稀疏性(异常帧不会太多)。
优点
基于概率的方法。
利用先验分布对异常分数学习进行编码和驱动。可以对异常分数的内部模块或学习输出施加先验。
基于的假设
强加的先验捕捉了数据集的基本(非)正态性。
它的关键的直觉是,将一组序列数据作为输入的代理,代理的正常行为可以通过其潜在的奖励函数来理解,如果代理给一个测试序列分配了低奖励,那么该测试序列就会被识别为异常情况。可表述为如下的后验优化问题:
其中 (Θ)是基于Θ的先验分布,S是一系列的观测序列, (s|Θ)是潜在回报函数,回报的倒数可作为异常评分,最大化上述公式就等于直接学习了异常评分。
经验表明,各种真实数据集中的异常分数都非常符合高斯分布,即假设正常实例的异常分数聚在一起,而异常实例的异常分数远离该聚类。研究使用高斯先验对异常分数进行编码,并使分数能够直接优化。
损失函数定义如下:
若夫中和分别是均值和方差,正常时y=0,异常时y=1,m是置信区间参数。该方法具有很好的可解释性。
优点
通过最大化训练数据中事件的可能性来学习异常分数。由于正常实例更为常见,因此被认为是高概率事件,异常为低概率事件,从而定义异常得分。
它基于以下假设:
异常和正常实例分别是低概率事件和高概率事件。
使用直接对事件似然建模来学习异常分数的思想。问题被定义为:
学习参数Θ,p是x发生的概率,使用最大似然函数计算。
其中是异常评分函数,它通过特征间的关系计算:
其中z是x的低维表征,i,j是特征编号,w是交叉参数,通过训练获得。计算p时分母是正则化项,计算量大,因此,也有使用NCE方法对其进行优化的。
优点
基于GAN的方法。
训练单分类器以端到端方式学习实例是否正常,与5.2.2的区别在于它不依赖SVM等已有分类器。这种方法是GAN和单分类的结合,其核心是生成判别器,区分正常实例和生成的伪异常实例。
它基于以下假设:
(i) 近似于异常的数据实例可以被有效地合成。
(ii) 所有的正常实例都可以由一个判别性的单模型来总结。
最初提出的方法ALOCC训练两个深度学习网络,一个用于判别正常/异常实例,另一个被训练成扭曲正常值以生成异常实例(基于去噪AE)。方法定义为:
Px^是被高斯噪声破坏的X的数据分布,它与AE的参数同时优化。除了用AE造数据,有的方法还从异常类中抽取数据,另外还有一些生成破坏实例的其它方法,比如生成与正常实例互补的实例,生成边界实例等。
优点
7.1 代表性算法
表-2列出了代表性的算法
对其总结如下:
表-3列出了可用数据集,可从 https://git.io/JTs93 获取
探索异常信号是深度异常检测的关键,以获取异常评分,及正常/异常。很多方法用以对探测无监督或自监督的数据。5.1中的方法并未针对异常检测优化;5.2中方法虽然包含优化,但对数据分布进行了假设;另外,还有使用领域知识,实现知识驱动的异常检测的方法。
弱监督数据一般指不完全,不精确,不准确(如粗粒度)标记的异常数据,它们往往在现实中是可得的,并可以提升模型效果。但由于异常可能是高度异质性的,可能存在未知,新异常:超出了给定异常示例,最近研究发现,深度学习往往能学到超出给定异常示例范围的异常。
当然,检测已知异常也非常重要 ,异常可能来自不同的异常类,因此表现出完全不同的特征。重要的是探索利用少量标记数据来学习更强大的具有更深体系结构的检测模型的可能性。
大规模无监督,自监督表示学习在实现下游学习任务方面取得了巨大成功。在很难获得足够的标记数据的情况下使用。首先在无监督/自监督模式下从大规模无标记数据中学习可转移的预训练表示模型,然后在半监督模式下微调检测模型。
另外,数据可能包含噪声,因此,鲁棒性在预训练建模和微调阶段都很重要。此外,不同领域的异常和数据集差异很大,因此大规模的常态性学习可能在特定领域进行。
目前大多数深度异常检测方法都集中在点异常上,表现出比传统方法更好的性能。然而,对条件异常,集体异常的深度模型研究较少,而处理复杂依赖数据是深度模型的优势,也是未来重要的机会。
目前异常检测主要着重优化精度,对可解释性关注较少,导致解释性和可行动性较弱。可利用深度异常检测模型探索深度模型解释和可操作知识发现的方法。
已经有一些令人兴奋的新兴研究应用和问题设置,其中可能有一些扩展深度检测方法的重要机会。以及一些强相关的领域:比如OOD检测(分布外检测),好奇心学习,异常可能存在的依赖特征,检测对抗实例。