本文主要参考了知乎https://zhuanlan.zhihu.com/p/260651151 以及DataWhale

异常检测的概念

异常检测(Anomaly Detection)目的是识别出不正常数据,针对的是少数、不可预测或不确定、罕见的时间,有独特的复杂性,所以一般的机器学习和深度学习算法搞不定。

例如生产出异常产品、信用卡欺诈、网络入侵等等,针对的是少数异常事件。

当然,异常也不一定是坏事,比如异常有不同版本的名字:outlier, novelty, exceptions。其中novelty是很正面的,也就是找出新的东西。

异常检测面临的挑战

  • 未知性:异常与许多未知因素有关,例如,具有未知的突发行为、数据结构和分布的实例。它们直到真正发生时才为人所知,比如恐怖袭击、诈骗和网络入侵等应用;
  • 异常类的异构性: 异常是不规则的,一类异常可能表现出与另一类异常完全不同的异常特征。例如,在视频监控中,抢劫、交通事故和盗窃等异常事件在视觉上有很大差异;
  • 类别不均衡:异常通常是罕见的数据实例,这导致在大多数应用程序中无法获得大规模的标记数据。

异常的类别

点异常(point anomalies)指的是少数个体实例是异常的,大多数个体实例是正常的

例子:正常CPU图像与非正常CPU的图像

条件异常(conditional anomalies),又称上下文异常,指的是在特定情境下个体实例是异常的,在其他情境下都是正常的

例子:微博服务器由于某个热搜,CPU占用率突然上升或者下降,信用卡突然频繁出现大量高额交易;

群体异常(group anomalies)指的是在群体集合中的个体实例出现异常的情况,而该个体实例自身可能不是异常,在入侵或欺诈检测等应用中,离群点对应于多个数据点的序列,而不是单个数据点。

例子:社交网络中虚假账号形成的集合作为群体异常子集,但子集中的个体节点可能与真实账号一样正常。

异常检测数据集类别

  • 统计型数据static data(文本、网络流)
  • 序列型数据sequential data(sensor data )
  • 空间型数据spatial data(图像、视频)

Volodymyr et al., 2019

异常检测任务的类别

有监督:训练集的正例和反例均有标签

但通常反例(异常样本)的标签比较少

无监督:训练集无标签

半监督:在训练集中只有正例,异常实例不参与训练

异常检测的主要挑战

  • 数据量少:通常异常样本是很少的,有时候依赖人工标签,属于样本不平衡问题
  • 噪声:异常与噪声有时难以区分

例如下图中,蓝色点是非异常值,黄色点是异常值。

但在大圆圈中的黄点是很容易被发现是异常值的,但蓝点附近的黄点离正常点很近,很难被分出来

1620643261085

异常检测的应用领域

  • 入侵检测(Intrusion detection):通过从计算机网络或计算机系统中的若干关键点收集信息并对其执行分析,从中发觉网络或系统中能不能有违反安全策略的行为和遭到袭击的迹象,并对此做出适当反应的流程。最普遍的两种入侵检测系统包括基于主机的入侵检测系统(HIDS)、网络入侵检测系统(NIDS)。
  • 故障检测(Fraud detection):主要是监控系统,在故障发生时可以识别,并且准确指出故障的种类以及出现位置。主要应用领域包括银行欺诈、移动蜂窝网络故障、保险欺诈、医疗欺诈。
  • 恶意软件检测(Malware Detection)
  • 医疗异常检测(Medical Anomaly Detection):通过X光片、核磁共振、CT等医学图像检测疾病或量化异常,也可以通过EEG、ECG等时序信号进行疾病检测或异常预警。
  • 深度学习用于社交网络中的异常检测(Deep learning for Anomaly detection in Social Networks)
  • 日志异常检测(Log Anomaly Detection)
  • 物联网大数据异常检测(Internet of things (IoT) Big Data Anomaly Detection):通过监控数据流信息检测异常设备和系统行为。
  • 工业异常检测(Industrial Anomalies Detection)
  • 时间序列中的异常检测(Anomaly Detection in TimeSeries)
  • 视频监控(Video Surveillance):检测视频中的异常场景

基于标签的可获得性划分异常检测:

  • 有监督异常检测:在训练集中的正常实例和异常实例都有标签,这类方法的缺点在于数据标签难以获得或数据不均衡(正常样本数量远大于异常样本数量)。
  • 半监督异常检测:在训练集中只有单一类别(正常实例)的实例,没有异常实例参与训练,目前很多异常检测研究都集中在半监督方法上,有很多声称是无监督异常检测方法的研究其实也是半监督的,对其解释的是该异常检测是无监督异常检测,学习特征的方式是无监督的,但是评价方式使用了半监督的方法,因此对于无监督与半监督的界定感觉没有那么规范。
  • 无监督异常检测:在训练集中既有正常实例也可能存在异常实例,但假设数据的比例是正常实例远大于异常实例,模型训练过程中没有标签进行校正。
  • 弱监督异常检测:针对异常实例不完全、粗粒度标签、部分实例标签错误等情况进行算法设计。

异常检测的方法

基于传统方法的异常检测模型

  • 基于重构的方法:假设异常点是不可被压缩的或不能从低维映射空间有效地被重构的。常见的方法有PCA、Robust PCA、random projection等降维方法 [4,5] 。
  • 聚类分析方法:通过聚类可以创建数据的模型,而异常点的存在可以扭曲、破坏该模型。常见的方法有Gaussian Mixture Models、 k-means、 multivariate Gaussian Models [6,7,8]。
  • 一类分类方法:对正常数据建立区分性边界,异常点被划分到边界外。常见的方法有OC-SVM [9,10]。

基本统计学方法

统计学方法对数据的正常性做出假定。统计学方法假定正常的数据对象由一个统计模型产生,而不遵守该模型的数据是异常点。统计学方法的有效性高度依赖于对给定数据所做的统计模型假定是否成立。

异常检测的统计学方法的一般思想是:学习一个拟合给定数据集的生成模型,然后识别该模型低概率区域中的对象,把它们作为异常点。

即利用统计学方法建立一个模型,然后考虑对象有多大可能符合该模型。

假定输入数据集为$\{x^{(1)}, x^{(2)}, ..., x^{(m)}\}$,数据集中的样本服从正态分布,即$x^{(i)}\sim N(\mu, \sigma^2)$,我们可以根据样本求出参数$\mu$和$\sigma$。

$\mu=\frac 1m\sum_{i=1}^m x^{(i)}$

$\sigma^2=\frac 1m\sum_{i=1}^m (x^{(i)}-\mu)^2$

线性模型

典型的如PCA方法,Principle Component Analysis是主成分分析,简称PCA。

PCA假设的是异常点不可被压缩,或者不能从低维空间有效地被重构。常用的方法包括:

  • PCA
  • Robust PCA
  • random projection

基于近邻度的方法

这类算法适用于数据点的聚集程度高、离群点较少的情况。同时,因为相似度算法通常需要对每一个数据分别进行相应计算,所以这类算法通常计算量大,不太适用于数据量大、维度高的数据。

​ 基于相似度的检测方法大致可以分为三类:

  • 基于集群(簇)的检测,如DBSCAN等聚类算法。
    聚类算法是将数据点划分为一个个相对密集的“簇”,而那些不能被归为某个簇的点,则被视作离群点。这类算法对簇个数的选择高度敏感,数量选择不当可能造成较多正常值被划为离群点或成小簇的离群点被归为正常。因此对于每一个数据集需要设置特定的参数,才可以保证聚类的效果,在数据集之间的通用性较差。聚类的主要目的通常是为了寻找成簇的数据,而将异常值和噪声一同作为无价值的数据而忽略或丢弃,在专门的异常点检测中使用较少。
  • 基于距离的度量,如k近邻算法。

​ k近邻算法的基本思路是对每一个点,计算其与最近k个相邻点的距离,通过距离的大小来判断它是否为离群点。在这里,离群距离大小对k的取值高度敏感。如果k太小(例如1),则少量的邻近离群点可能导致较低的离群点得分;如果k太大,则点数少于k的簇中所有的对象可能都成了离群点。为了使模型更加稳定,距离值的计算通常使用k个最近邻的平均距离。

  • 基于密度的度量,如LOF(局部离群因子)算法。

​ 局部离群因子(LOF)算法与k近邻类似,不同的是它以相对于其邻居的局部密度偏差而不是距离来进行度量。它将相邻点之间的距离进一步转化为“邻域”,从而得到邻域中点的数量(即密度),认为密度远低于其邻居的样本为异常值

集成方法

集成是提高数据挖掘算法精度的常用方法。集成方法将多个算法或多个基检测器的输出结合起来。其基本思想是一些算法在某些子集上表现很好,一些算法在其他子集上表现很好,然后集成起来使得输出更加鲁棒。集成方法与基于子空间方法有着天然的相似性,子空间与不同的点集相关,而集成方法使用基检测器来探索不同维度的子集,将这些基学习器集合起来。

常用的集成方法有Feature bagging,孤立森林等。

feature bagging

与bagging法类似,只是对象是feature。

孤立森林

孤立森林假设我们用一个随机超平面来切割数据空间,切一次可以生成两个子空间。然后我们继续用随机超平面来切割每个子空间并循环,直到每个子空间只有一个数据点为止。直观上来讲,那些具有高密度的簇需要被切很多次才会将其分离,而那些低密度的点很快就被单独分配到一个子空间了。孤立森林认为这些很快被孤立的点就是异常点。

用四个样本做简单直观的理解,d是最早被孤立出来的,所以d最有可能是异常。

孤立森林

基于机器学习的方法

在有标签的情况下,可以使用树模型(gbdt,xgboost等)进行分类,缺点是异常检测场景下数据标签是不均衡的,但是利用机器学习算法的好处是可以构造不同特征。

基于深度学习的方法

关于异常检测方法有很多综述,包括 [2,3,12,19] 。

Deep One Class

异常样本只有一类的,例如:Deep SVDD [11] 、OC-NN [20]。

SVDD

目标函数:

$$ \min _{R, \mathcal{W}} \quad R^{2}+\frac{1}{\nu n} \sum_{i=1}^{n} \max \left\{0,\left\|\phi\left(\boldsymbol{x}_{i} ; \mathcal{W}\right)-\boldsymbol{c}\right\|^{2}-R^{2}\right\}+\frac{\lambda}{2} \sum_{\ell=1}^{L}\left\|\boldsymbol{W}^{\ell}\right\|_{F}^{2} $$

$\mathcal{W}$是神经网络的权重,异常分数由$d(x)=\left\|\phi\left(\boldsymbol{x}_{i} ; \mathcal{W}\right)-\boldsymbol{c}\right\|$决定,如果$d(x)>R^2$则$x$为异常,否则为正常。

OC-NN

目标函数

$$ f(r)=\left(\frac{1}{N v} \cdot \sum_{n=1}^{N} \max \left(0, r-y_{n}\right)\right)-r $$

根据输出层来判定正常、异常值,$S_{n:}=\hat{y}_{n}-r, \quad S_{n}>0$为正常值,否则为异常值。

Deep Clustering

采用深度学习的聚类方法一般是用神经网络对输入数据进行编码,然后认为最后的编码序列可以代表神经网络的很多特征,然后我们对编码序列进行聚类就可以达成聚类的目的。该类方法被用于异常检测的包括:CAE-l2 cluster [15] 、DAE-DBC [18]。

img

CAE-l2 cluster:在autoencoder中间加入了L2标准化以及k-means。

DAE-DBC

DAE-DBC:先利用autoencoder降维,然后通过聚类方法判别异常值。

AutoEncoder

一个通用的自动编码器由编码器和解码器组成,编码器将原始数据映射到低维特征空间,而解码器试图从投影的低维空间恢复数据。这两种网络的参数通过重构损失函数来学习。为了使整体重构误差最小化,保留的信息必须尽可能与输入实例(如正常实例)相关。

将自动编码器用于异常检测是基于正常实例比异常实例能从压缩的特征空间更好地被重构这一假设。 判别方式是计算重构误差$d(x)=\|x-f(g(x))\|$,如果$d(x)>\lambda$则$x$为异常,反之正常,$\lambda$是需要定义的阈值。这里说一下阈值的计算方法有很多,可以通过训练集结果的正态分布计算,或者计算训练集结果的min-max标准化等等。

典型案例:稀疏自动编码器(sparse AE)、去噪自动编码器(denoising AE)、收缩自动编码器(contractive AE)、鲁邦自动编码器(Robust Deep AE)等。这类方法太多了,在这里就不举例了,基本原理很简单。

该类方法的优点是能够通过非线性方法捕捉复杂特征,试图找到正常实例的一种通用模式,缺点是如何选择正确的压缩程度,以及如何解决“过拟合”的问题(网络拟合的太好以至于异常实例也“潜伏”在低维特征空间中)。为了解决这个缺点,有研究者使用正则化或者记忆矩阵等等方法。

Generative Models

这种方法通常旨在学习生成网络G的潜在特征空间,使潜在空间能够很好地捕捉到给定数据背后的常态。

将生成模型用于异常检测是基于在生成网络的潜在特征空间中正常实例比异常实例能够更准确地被产生这一假设。 实际实例和生成实例之间的残差被定义为异常分数。

典型案例:AnoGAN、GANomaly、Wasserstein GAN、 Cycle GAN、VAE等。

该类方法的关键问题是如何设计合适的生成器和目标函数。

Predictability Modeling

基于预测模型的异常检测方法通过使用时间窗内的历史实例预测当前实例来学习特征表示,这些特征表示能够捕捉时间或序列的依赖关系,正常实例通常能够保持良好的依赖关系,可以很好地被预测,而异常实例通常会违反这些依赖关系,使得不可预测。

将预测模型用于异常检测是基于在与时间相关的序列中,正常实例比异常实例更容易被预测这一假设。 预测序列与实际序列之间的残差被定义为异常分数。

典型案例:自回归模型(Autoregressive)、ConvLSTM预测模型、Slow Feature Analysis(SFA)等。

也有一些结合的重构和预测的异常检测模型,例如Composite LSTM [13] 、Composite ConvLSTM [14] 。

该类方法在工控数据集、视频异常监控比较常用,有利于处理时间序列数据。

Composite LSTM

基于迁移学习的异常检测方法

迁移学习中数据迁移和特征迁移能够被用于异常检测,基于数据迁移:通过Data Augmentation生成合成数据扩大训练集数量,从而更好地进行正常实例的表征学习。基于特征迁移:representation transfer,从相关问题中提取一些表征层来提高异常检测模型精度。

基于Deep Metric learning的异常检测方法

通过度量学习的方法能够让同类样本之间的距离变小,异类样本之间的距离变大,在异常检测方法中可以将数据映射到meric空间中,从而更好地分离异常值,并减少维度灾难。目前的方法有:SCDML [17]、ADDML [16]等 。

SCDML : 为了提取更多的判别特征来优化聚类模型,在第一阶段使用Siamese网络,度量学习的损失函数为对比损失( contrastive loss)。在第二阶段使用k近邻标签更新策略,将未标记数据动态转换为有标记数据,充分发挥未标记数据的贡献。

SCDML

ADDML:该方法通过最小化相似度误差将数据映射到低维空间,目的是在度量空间中让相似的实例更近。在测试阶段,利用实例到中心的距离计算异常分数。

ADDML

参考资料

  • [1] Chalapathy R, Chawla S. Deep learning for anomaly detection: A survey[J]. arXiv preprint arXiv:1901.03407, 2019.
  • [2] Pang G, Shen C, Cao L, et al. Deep Learning for Anomaly Detection: A Review[J]. arXiv preprint arXiv:2007.02500, 2020.
  • [3] Kiran B R, Thomas D M, Parakkal R. An overview of deep learning based methods for unsupervised and semi-supervised anomaly detection in videos[J]. Journal of Imaging, 2018, 4(2): 36.
  • [4] Günter S, Schraudolph N N, Vishwanathan S V N. Fast iterative kernel principal component analysis[J]. Journal of Machine Learning Research, 2007, 8(Aug): 1893-1918.
  • [5] Huber P J. Robust statistics[M]. John Wiley & Sons, 2004.
  • [6] Zimek A, Schubert E, Kriegel H P. A survey on unsupervised outlier detection in high‐dimensional numerical data[J]. Statistical Analysis and Data Mining: The ASA Data Science Journal, 2012, 5(5): 363-387.
  • [7] HubKim J S, Scott C D. Robust kernel density estimation[J]. The Journal of Machine Learning Research, 2012, 13(1): 2529-2565.
  • [8] Xiong L, Póczos B, Schneider J G. Group anomaly detection using flexible genre models[C]//Advances in neural information processing systems. 2011: 1071-1079.
  • [9] Chen Y, Zhou X S, Huang T S. One-class SVM for learning in image retrieval[C]//Proceedings 2001 International Conference on Image Processing (Cat. No. 01CH37205). IEEE, 2001, 1: 34-37.
  • [10] Williams G, Baxter R, He H, et al. A comparative study of RNN for outlier detection in data mining[C]//2002 IEEE International Conference on Data Mining, 2002. Proceedings. IEEE, 2002: 709-712.
  • [11] Ruff L, Vandermeulen R, Goernitz N, et al. Deep one-class classification[C]//International conference on machine learning. 2018: 4393-4402.
  • [12] https://sites.google.com/view/kdd2020deepeye/home
  • [13] Srivastava N, Mansimov E, Salakhudinov R. Unsupervised learning of video representations using lstms[C]//International conference on machine learning. 2015: 843-852.
  • [14] Medel J R, Savakis A. Anomaly detection in video using predictive convolutional long short-term memory networks[J]. arXiv preprint arXiv:1612.00390, 2016.
  • [15] Aytekin C, Ni X, Cricri F, et al. Clustering and unsupervised anomaly detection with l 2 normalized deep auto-encoder representations[C]//2018 International Joint Conference on Neural Networks (IJCNN). IEEE, 2018: 1-6.
  • [16] Yilmaz S F, Kozat S S. Unsupervised Anomaly Detection via Deep Metric Learning with End-to-End Optimization[J]. arXiv preprint arXiv:2005.05865, 2020.
  • [17] Li X, Yin H, Zhou K, et al. Semi-supervised clustering with deep metric learning and graph embedding[J]. World Wide Web, 2020, 23(2): 781-798.
  • [18] Amarbayasgalan T, Jargalsaikhan B, Ryu K H. Unsupervised novelty detection using deep autoencoders with density based clustering[J]. Applied Sciences, 2018, 8(9): 1468.
  • [19] Ruff, L., Kauffmann, J., Vandermeulen, R.A., Montavon, G., Samek, W., Kloft, M., Dietterich, T.G., & Muller, K. (2020). A Unifying Review of Deep and Shallow Anomaly Detection.
  • [20] Chalapathy R, Menon A K, Chawla S. Anomaly detection using one-class neural networks[J]. arXiv preprint arXiv:1802.06360, 2018.
  • [21]https://zhuanlan.zhihu.com/p/260651151
最后修改:2021 年 06 月 01 日 02 : 41 PM
如果觉得我的文章对你有用,请随意赞赏