论文标题 | Deep Anomaly Detection with Deviation Networks
论文来源 | KDD 2019
论文链接 | https://arxiv.org/abs/1911.08623
源码链接 | https://github.com/GuansongPang/deviation-network

本文是一篇使用深度学习模型进行异常检测的文章。在异常检测领域,目前存在的方法大部分是先进行特征学习,然后再使用异常检测的方法间接地优化异常数据样本评分。本文提出了一个端到端学习的异常检测模型。

Introduction

异常数据是指明显偏离大部分数据分布的数据对象,异常检测的目标就是正确地检测出这些异常数据。在现实世界中有很多的应用场景,例如交易反欺诈、网络攻击检测和医疗异常检测等。传统的异常检测方法通常受限于数据的维度灾难和特征的非线性等问题。最近基于深度学习的方法在处理上述问题中表现出不错的性能,但是仍然存在不足:一是在大部分的异常检测任务中,难以获得大规模的标签数据来训练模型;二是不同任务中异常数据通常具有不同分布,这对异常检测任务是非常大的挑战。

目前基于无监督学习的异常检测方法大概分为两个阶段,如 Figure1-(a) 所示,首先是使用无监督学习的方法来学习数据的特征,例如使用自编码器的中间层特征或者 GANs 的隐空间特征作为数据的特征表示;然后使用学习到的特征去定义异常评分,例如使用重构误差或者基于距离的度量等方法。然而,这类方法存在一个缺点,由于数据的特征学习阶段和异常评分判定阶段是分开的,可能导致学习到的特征是次优的,甚至和使用的异常检测方法不相关。

除此之外,目前基于无监督学习的异常检测方法可能会存在一个共性的问题,就是由于缺少异常数据的先验知识,模型识别出的异常数据可能是噪声数据或者是无意义的数据对象。解决这种问题的最有效的方法就是使用数据集中有限的异常标注数据作为先验知识提供给模型进行学习。

Figure 1

鉴于以上目前方法存在的问题,在此文章中作者基于半监督学习提出了一种端到端的异常检测框架,如 Figure1-(b) 所示,可以将特征学习和异常评分共同进行学习优化,来达到更好的异常检测效果。整个框架可以用一个神经网络模型表示-偏差网络(deviation network,DevNet)。DevNet 训练的数据中包含少量的异常标注数据,并且使用高斯先验知识优化模型基于 Z-score 的偏差损失函数。整个将框架结构如 Figure 2 所示。

End-to-end Anomaly Score Learning

Problem Statement

给定一批数据包含N+KN+K个样本:X={x1,x2,,xN,xN+1,xN+2,,xN+K}\mathcal{X}=\left\{\mathrm{x}_{1}, \mathrm{x}_{2}, \cdots, \mathrm{x}_{N}, \mathrm{x}_{N+1}, \mathrm{x}_{N+2}, \cdots, \mathrm{x}_{N+K}\right\},其中xiRD\mathrm{x}_{i} \in \mathbb{R}^{D}U={x1,x2,,xN}\mathcal{U}=\left\{\mathrm{x}_{1}, \mathrm{x}_{2}, \cdots, \mathrm{x}_{N}\right\}表示无标签样本,K={xN+1,xN+2,,xN+K}\mathcal{K}=\left\{\mathrm{x}_{N+1}, \mathrm{x}_{N+2}, \cdots, \mathrm{x}_{N+K}\right\}表示小部分异常样本,即KK远小于NN. 我们的目标是学习一个异常评分函数ϕ:XR\phi : X \mapsto \mathbb{R},对于每个样本都给出一个异常评分,同时满足条件:当xix_i是异常样本而yiy_i不是异常样本时,ϕ(xi)>ϕ(xj)\phi \left(\mathrm{x}_{i}\right) > \phi \left(\mathrm{x}_{j}\right)

Proposed Framework

为了解决上述问题,文中提出了一个端到端的学习框架,主要包含三个部分:异常评分网络,参考评分生成器和偏差损失函数,如 Figure2 所示。

  • Anomaly scoring network:即异常评分函数ϕ:XR\phi : X \mapsto \mathbb{R},对于每个输入样本给出一个异常评分;
  • Reference score generator:为了调整生成的异常评分,使用这个模块生成参考评分(reference score)。假定正常样本的异常评分服从先验概率分布FF, 参考评分定义为ll个正常样本的异常分数{r1,r2,...,rl}\{r_1, r_2, ..., r_l\}的均值,用μR\mu_{\mathcal{R}}表示。这个值可以通过先验分布或者采用学习的方法获得。
  • Deviation loss function:定义损失函数用于优化模型的异常评分。输入包括异常评分ϕ(x;Θ)\phi(\mathrm{x}; \Theta) , 参考分数均值μR\mu_{\mathcal{R}}和方差σR\sigma_{\mathcal{R}}. 偏差损失函数这样定义的目的是使得异常样本的打分显著偏离参考评分,正常样本的打分离参考分数越近越好。

文中提出的框架为何能解决上述目前方法存在的主要问题?首先文章中提出的框架通过损失函数使正常样本的异常评分尽可能服从分布FF, 异常样本的评分尽可能偏离FF. 同时这样的一个损失函数会使得模型学习的特征尽可能去区分正常样本和异常样本。文中的框架主要的优势在于使用很少的异常标记样本和异常分数的先验去学习正常样本的高层抽象特征,对于一个显著偏离正常分布的样本可以给出较高的异常分数。同时对于对于不同模式的异常数据也能进行异常检测。

Figure.2 模型架构

Deviation Networks

文中将提出的框架表示为一个具体的模型-Deviation Networks(DevNet),模型中定义了高斯先验和基于 Z-score 的偏差损失,能够通过一个端到端的评分学习器定向优化异常评分。下面具体介绍框架中每个模块的实现方法。

End-to-end Anomaly Scoring Network

假设QRMQ \in \mathbb{R}^{M}是样本特征空间的中间表示,那么异常评分网络ϕ(;Θ):XR\phi(\cdot ; \Theta) : X \mapsto \mathbb{R}可以由两部分组成,一是特征学习器:ψ(;Θt):XQ\psi\left(\cdot ; \Theta_{t}\right) : X \mapsto Q,二是异常评分函数:η(;ΘS):QR\eta\left(\cdot ; \Theta_{S}\right) : Q \mapsto \mathbb{R},其中Θ={Θt,Θs}\Theta=\left\{\Theta_{t}, \Theta_{s}\right\}

对于HNH \in \mathbb{N}层特征学习器ψ(;Θt)\psi\left(\cdot ; \Theta_{t}\right), 权重矩阵为Θt={W1,W2,,WH}\Theta_{t}=\left\{\mathbf{W}^{1}, \mathbf{W}^{2}, \cdots, \mathbf{W}^{H}\right\},表示为以下形式:

q=ψ(x;Θt)\mathbf{q}=\psi\left(\mathbf{x} ; \Theta_{t}\right)

对于不同类型的输入数据,可以采用不同的特征学习器,例如多维数据-MLP,图像数据-CNN,序列数据-RNN。

$\eta\left(\cdot ; \Theta_{S}\right) $定义为异常评分函数,可以对于特征学习器中间的输出特征使用一个线性分类器来计算异常评分,计算方式如下所示:

η(q;Θs)=i=1Mwioqi+wM+1o\eta\left(\mathbf{q} ; \Theta_{s}\right)=\sum_{i=1}^{M} w_{i}^{o} q_{i}+w_{M+1}^{o}

因此,异常评分网络可以根据上述两部分表示为:

ϕ(x;Θ)=η(ψ(x;Θt);Θs)\phi(\mathrm{x} ; \Theta)=\eta\left(\psi\left(\mathrm{x} ; \Theta_{t}\right) ; \Theta_{s}\right)

Gaussian Prior-based Reference Scores

通过 anomaly scoring network 可以得到异常评分,参考评分μRR\mu_{\mathcal{R}} \in \mathbb{R}定义为随机抽取的正常样本R\mathcal{R}异常分数的均值。对于生成μR\mu_{\mathcal{R}}有两种方法:数据驱动和先验驱动的方法。数据驱动的方法是通过模型学习到数据样本中的μR\mu_{\mathcal{R}},先验驱动的方法是通过选择某种概率分布来生成μR\mu_{\mathcal{R}}。文中作者采用的是预先定位先验概率FF, 使用这种方式一是可以提供一定的可解释性,另一方面可以快速的采样得到分数,相比学习的方式更加的高效。

根据中心极限定理研究表明,高斯分布能够更好地拟合数据样本中的异常分数。因此作者直接采用高斯分布在数据样本中采样,得到样本表示如下:

r1,r2,,rlN(μ,σ2)μR=1li=1lri\begin{aligned} r_{1}, r_{2}, \cdots, r_{l} & \sim \mathcal{N}\left(\mu, \sigma^{2}\right) \\ \mu_{\mathcal{R}} &=\frac{1}{l} \sum_{i=1}^{l} r_{i} \end{aligned}

对于高斯分布中的参数μ,σ\mu, \sigmall, 文中通过实验表明 DevNet 对这些参数的选取不敏感。作者直接采用μ=0,σ=1\mu=0, \sigma=1l=5000l=5000

Z-Score-based Deviation Loss

首先根据 Z-score 计算偏差,然后使用 contrastive loss 得到文中提出的 deviation loss 如下所示:

dev(x)=ϕ(x;Θ)μRσR\operatorname{dev}(\mathbf{x})=\frac{\phi(\mathbf{x} ; \Theta)-\mu_{\mathcal{R}}}{\sigma_{\mathcal{R}}}

L(ϕ(x;Θ),μR,σR)=(1y)dev(x)+ymax(0,adev(x))L\left(\phi(\mathrm{x} ; \Theta), \mu_{\mathcal{R}}, \sigma_{\mathcal{R}}\right)=(1-y)|\operatorname{dev}(\mathrm{x})|+y \max (0, a-\operatorname{dev}(\mathrm{x}))

其中正常样本y=1y=1, 异常样本y=0y=0。对于超参文中取值a=5a=5.

还存在一个问题是我们不知道数据样本U\mathcal{U}中对象的标签,文中直接采用最简单的方法是将U\mathcal{U}所有数据看成是正常的数据样本,在实验中发现这种方法效果不错。

整个算法的流程如下所示:

算法流程

Experiments

作者在九个公开的数据集上对比了四个基准算法,本文提出的方法都取得很好的效果,详细的参数设置和实验介绍参考原文。对比结果如下表所示:

实验结果

联系作者