系列文章目录
用于无监督时间序列异常检测和解释的对抗性自编码器 ACM2023
文章目录
摘要
在许多复杂的系统中,设备通常被监控并产生大量的多元时间序列。然而,由于这些时间序列数据模式复杂,有用的标记数据很少,因此从这些时间序列数据中检测异常是一个很大的挑战。现有的方法要么依赖较少的正则化,要么需要大量的标记数据,导致异常检测的准确性较差。为了克服这些限制,本文提出了一种名为DAEMON的对抗性自编码器异常检测和解释框架,该框架对各种数据集都具有鲁棒性。关键思想是使用两个鉴别器对抗性训练一个自编码器来学习多元时间序列的正常模式,然后使用重建误差来检测异常。通过对隐变量进行正则化和采用对抗生成方法重构数据,保证了daemon的鲁棒性。提出了一种用于检测异常的无监督方法。此外,为了帮助作业者更好地诊断异常,DAEMON通过计算异常数据的梯度来提供异常解释。对真实数据的广泛实证研究表明,该框架在时间序列异常检测的整体f1得分和解释精度方面能够优于最先进的方法。
关键词
multivariate time series, anomaly detection, adversarial generation
提示:以下是本篇文章正文内容,下面案例可供参考
一、介绍
异常检测旨在确定哪些实例与其他实例相比表现出异常行为,在许多领域受到关注,如健康保险欺诈检测[4]、医疗异常检测[10,11]、时间序列分析[8,9,17,33,38,45,46]等。在许多实际应用中,被监测的设备会产生大量的多元时间序列,如航天器[15]、服务器[38]、水处理系统[12]等。例如,被监视的服务器机器的时间序列包括CPU负载、网络使用情况、内存使用情况等指标。在实际场景中,操作员主要关注实体级异常,而不是基于单变量时间序列的度量级异常。一方面,为每个度量训练模型非常耗时,特别是在复杂和大规模的系统中。另一方面,由于单个事件可能导致多个度量中的异常,因此如果我们在度量级别发现异常,则需要广泛的领域知识来定义度量之间的关系,以确定实体是否异常。
尽管在实体层面检测异常更为直观,但仍存在许多挑战。首先,真实数据缺乏标签,因为异常很少。对于操作员来说,手工标记每个异常是非常困难的。此外,数据的模式是不断变化的,这就要求检测方法即使以前没有出现过类似的模式,也要识别出异常。它使得大多数监督方法[22,25]在真实场景中无效。其次,由于工业服务中存在许多不同的模式,因此检测方法对各种模式的表现都很重要。然而,大多数现有的方法只适用于特定的模式。例如,Holt-winters[7]在季节性数据上表现良好,而Isolation Forest[26]在低维数据上表现良好。第三,由于事件可能导致多个指标的异常,因此显示异常的根本原因非常重要,以帮助作业者更好地了解事件。大多数现有方法只关注异常检测框架[5,17,23],而忽略了多变量时间序列的异常解释。
为了解决上述问题,本文提出了一种基于对抗性生成的时间序列检测异常的在线无监督异常检测和解释框架——对抗性自编码器异常检测和解释(DAEMON)。如图1所示,DAEMON由离线训练和在线检测两部分组成。在离线训练组件中,对自编码器进行三个目标的训练,即重建误差,引导自编码器隐变量的后验分布匹配给定先验分布的对抗性训练准则,另一个对抗性训练准则是最小化原始和重构时间序列之间的差异。我们首先使用一维卷积神经网络(1D-CNN)对原始多元时间序列进行编码。我们不是直接解码隐藏变量,而是对潜在向量施加一个先验分布,并使用一个对抗训练过程来匹配隐藏变量的后验分布和先验分布。这背后的基本原理是,如果模型以前从未观察到类似的模式,直接解码原始潜在向量并使用重建误差来训练网络将无法很好地重建时间序列。随后,使用解码器生成重构的时间序列。同时,采用另一种对抗训练方法来最小化原始时间序列与重构时间序列之间的差异,以避免过拟合。在线检测模块使用训练好的模型根据重构误差度量新实体的异常分数。基于每个实体的异常分数,我们提出了一种无监督阈值选择方法,即自适应相关窗口,该方法利用历史实体的异常分数来识别当前实体是否异常。此外,为了解释异常的根本原因,我们在重建时计算异常的每个度量(即维度)的综合梯度,并将梯度对重建贡献最大的顶部度量作为异常的根本原因。
总的来说,我们的主要贡献可以概括如下:
1.提出了一种新的基于对抗自编码器的多变量时间序列异常检测体系结构。设计了两个对抗训练过程,以保证鲁棒性和避免过拟合。
2.我们提出了一种有效的基于历史实体异常分数的无监督异常识别方法。
3.我们提出了一种异常解释方法,这种方法在最近的工作中很大程度上被忽视了。此外,考虑到多元时间序列在不同维度上的不同重要性,提出了一种新的解释度量。
4.DAEMON在四个真实数据集上的表现优于最先进的基线方法,总体f1得分为0.94,这证明了两种对抗性训练标准的好处。
5.为了更好地再现结果,我们在Github1上开源了我们的框架。
二、准备工作
在本节中,我们将正式介绍多元时间序列异常检测问题和DAEMON的总体结构。
2.1问题陈述
本文主要研究多元时间序列的异常检测问题。 给定一个多变量时间序列的集合 X = { x 1 , x 2 , ⋯ , x n } , X=\{x_{1},x_{2},\cdots,x_{n}\}, X={x1,x2,⋯,xn},,其中X的长度是n,并且一个实体(也称为观察、实例、记录、对象或数据点) x t x_{t} xt在时间上是一个M维向量,即是 x t ∈ R M x_{t}\in R^{M} xt∈RM,目标可以描述如下:
•异常检测:确定当前实体 x t x_{t} xt是否异常。
•异常解释:给定一个异常实体,确定最有可能导致异常的维度。
由于时间序列存在时间依赖性,利用历史实体检测异常更为有效[15,38]。 给定一个实体,我们用来表示对应的实体序列(窗口) χ t \chi_{t} χt,其中 W x t = { x t − Δ t + 1 , x t − Δ t + 2 , ⋯ , x t } W_{x_{t}}=\{x_{t-\Delta t+1},x_{t-\Delta t+2},\cdots,x_{t}\} Wxt={xt−Δt+1,xt−Δt+2,⋯,xt}。 表示从 t − Δ t + 1 t-\Delta t+1 t−Δt+1到t的多元时间序列段 W x t W_{x_t} Wxt, Δ t \Delta t Δt是序列的长度。𝑊𝑥𝑡用于计算𝑥𝑡的异常分数𝑆𝑥𝑡,然后𝑆𝑥𝑡用于确定𝑥𝑡是否异常。如果𝑥𝑡异常,则梯度对重建贡献最大的顶部𝑘维度被视为异常的根本原因。
2.2框架概述
daemon的框架如图1所示,它分为离线训练和在线检测两个部分。离线训练组件旨在训练一个检测模型来学习数据的正常模式。首先,将历史多元时间序列数据送入数据预处理模块。在这个模块中,数据将被清理,归一化,并通过滑动窗口分割成序列。之后,由一个自编码器和两个鉴别器组成的特定检测模型将被对抗性训练以学习数据的正常模式。通过对抗性训练过程,可以提高检测模型的鲁棒性。由于daemon的训练过程快,可以应用于需要频繁训练检测模型的实际应用中。
当离线训练组件完成后,检测模型将被转移到在线检测组件。 由于历史实体有利于检测异常,我们使用缓冲区来存储历史实体。 当一个新的实体出现时,将与之相关联的缓冲区中的数据发送到数据预处理模块,然后使用相应的实体序列OF来计算实体级异常得分和基于检测模型的度量梯度。 之后,将其异常分数和历史实体的异常分数发送给自适应相关窗口模块,以识别其是否异常。 如果是异常,我们通过对其各维梯度进行排序,给出了异常的根本原因,并将顶维数显示给算子。
三、方法
在这一部分中,我们介绍了daemon的方法。首先介绍了网络结构,然后进行数据预处理、离线训练、在线检测、阈值选择和异常解释。
3.1 网络结构
如图2所示,daemon的网络结构由三部分组成:一个自编码器
G
A
G_{A}
GA(包含一个编码器
G
E
(
⋅
)
G_{E}(\cdot)
GE(⋅)和一个解码器
G
D
(
⋅
)
G_{D}(\cdot)
GD(⋅),一个鉴别器
D
E
(
⋅
)
D_{E}(\cdot)
DE(⋅)和另一个鉴别器
D
D
(
⋅
)
D_{D}(\cdot)
DD(⋅)。设
W
x
t
W_{x_{t}}
Wxt为输入,z自编码器的隐变量,
p
(
z
)
p(z)
p(z)先验分布,
q
(
z
∣
W
x
t
)
q(z|W_{x_{t}})
q(z∣Wxt)为编码分布,
p
d
(
W
x
t
)
p_{d}(W_{x_{t}})
pd(Wxt)为数据分布。编码器生成隐变量𝑞(z)的后验分布如下:
q
(
z
)
=
∫
W
x
t
q
(
z
∣
W
x
t
)
⋅
p
d
(
W
x
t
)
d
W
x
t
(
1
)
q(z)=\int_{W_{x_t}}q(z|W_{x_t})\cdot p_d(W_{x_t})dW_{x_t}\quad\quad(1)
q(z)=∫Wxtq(z∣Wxt)⋅pd(Wxt)dWxt(1)
我们设计了一个对抗网络
D
E
(
⋅
)
D_{E}(\cdot)
DE(⋅)来引导后验𝑞(𝑧) 匹配先验𝑝 (𝑧)。 𝑞(𝑧|𝑊𝑥𝑡) 被假设为高斯分布,并且使用[19]中提出的相同的重新参数化技巧通过编码器网络进行反向传播。解码器
G
D
(
⋅
)
G_{D}(\cdot)
GD(⋅)生成重建𝑊′ 𝑥𝑡,如下所示:
W
x
t
′
=
G
D
(
G
E
(
W
x
t
)
)
(
2
)
W_{x_t}'=G_D(G_E(W_{x_t}))\quad\quad\quad\quad(2)
Wxt′=GD(GE(Wxt))(2)
提出了另一个对抗网络𝐷𝐷 (·) 来避免过度拟合,它比较原始时间序列和重建时间序列之间的统计差异。对于这四个网络,我们使用带有沿时间维度滑动的滤波器的一维卷积神经网络(1D-CNN)作为基本网络结构,因为最近的研究表明 1D-CNN 比长短期记忆更稳健( LSTM)时间序列网络 [32, 35]。通过适当大小的 1D-CNN 接
3.2 数据预处理
数据预处理模块由数据清洗和数据规范化两部分组成。由于谱残差(Spectral Residual, SR)[14]算法在单变量时间序列异常检测中表现良好。我们使用SR来清理数据,然后用最小-最大归一化对数据进行归一化。
3.2.1数据清理。
谱残差(Spectral Residual, SR)是一种无监督算法,在视觉显著性检测任务[14]和单变量时间序列异常检测任务[33]中表现优异,该算法可分为三个步骤:(1)进行傅里叶变换,得到振幅谱和相位谱;(2)谱残差计算;(3)傅里叶反变换,将序列变换回空间域。由于SR适用于单变量时间序列[33],所以我们对多变量时间序列数据的每个维度都采用SR。
3.2.2数据规范化。
清洗完数据后,我们将时间序列𝑋归一化如下:
X j ~ = X j − min ( X j ) max ( X j ) − min ( X j ) , ( 3 ) \widetilde{X^j}=\frac{X^j-\min(X^j)}{\max(X^j)-\min(X^j)},\quad\quad\quad(3) Xj =max(Xj)−min(Xj)Xj−min(Xj),(3)
3.3 Offline Training
如图2所示,我们的模型中有两个鉴别器。编码器和自编码器可以看作是两个对应的发生器。与常规GAN框架[13]类似,我们可以通过一个两人最小最大博弈来训练我们的模型。鉴别器试图区分真实样本和假样本,而生成器试图生成可以欺骗鉴别器的样本。鉴别器
D
E
(
⋅
)
D_{E}(\cdot)
DE(⋅)用于引导后验𝑞(z)匹配一个先验𝑝(z),它试图最大化损失函数:
L
D
E
=
E
z
∼
p
(
z
)
[
log
(
D
E
(
z
)
)
]
(4)
+
E
W
x
t
∼
p
d
(
W
x
t
)
[
log
(
1
−
D
E
(
G
E
(
W
x
t
)
)
)
]
\begin{aligned} \mathcal{L}_{D_{E}}& =\mathbb{E}_{z\sim p(z)}\left[\operatorname{log}(D_{E}(z))\right] \\ &&\text{(4)} \\ &+\mathbb{E}_{W_{x_{t}}\sim p_{d}(W_{x_{t}})}\left[\log(1-D_{E}(G_{E}(W_{x_{t}})))\right] \end{aligned}
LDE=Ez∼p(z)[log(DE(z))]+EWxt∼pd(Wxt)[log(1−DE(GE(Wxt)))](4)
同时,相应的生成器,即𝐺𝐸 (·),尝试混淆𝐷𝐸 (·),从而最小化以下损失函数:
L
G
E
=
E
W
x
t
∼
p
d
(
W
x
t
)
[
log
(
1
−
D
E
(
G
E
(
W
x
t
)
)
)
]
(
5
)
\mathcal{L}_{G_{E}}=\mathbb{E}_{W_{x_{t}}\sim p_{d}(W_{x_{t}})}[\log(1-D_{E}(G_{E}(W_{x_{t}})))]\quad(5)
LGE=EWxt∼pd(Wxt)[log(1−DE(GE(Wxt)))](5)
同样,鉴别器𝐷𝐷(·)试图使损失函数最大化:
对应的生成器𝐺𝐷(·)尝试最小化损失函数:
L
G
D
=
E
W
x
t
∼
p
d
(
W
x
t
)
[
log
(
1
−
D
D
(
G
A
(
W
x
t
)
)
)
]
(
7
)
\mathcal{L}_{G_D}=\mathbb{E}_{W_{x_t}\sim p_d(W_{x_t})}[\log(1-D_D(G_A(W_{x_t})))]\quad(7)
LGD=EWxt∼pd(Wxt)[log(1−DD(GA(Wxt)))](7)
我们使用 L G E \mathcal{L}_{G_{E}} LGE和 L G D \mathcal{L}_{G_{D}} LGD作为对抗正则化来保证𝐺变量的鲁棒性,𝐺变量的优化目标如下:
L = L r + λ G E L G E + λ G D L G D , ( 8 ) \mathcal{L}=\mathcal{L}_{r}+\lambda_{G_{E}}\mathcal{L}_{G_{E}}+\lambda_{G_{D}}\mathcal{L}_{G_{D}},\quad\quad\quad(8) L=Lr+λGELGE+λGDLGD,(8)
其中,
λ
G
E
\lambda_{G_{E}}
λGE和
λ
G
D
\lambda_{G_{D}}
λGD是调整不同损失对总体目标函数影响的权重参数。L𝑟为重建损失,计算公式为:
L
r
=
E
W
x
t
∼
p
d
(
W
x
t
)
∥
W
x
t
−
G
A
(
W
x
t
)
∥
1
(
9
)
\mathcal{L}_{r}=\mathbb{E}_{W_{x_{t}}\sim p_{d}(W_{x_{t}})}\|W_{x_{t}}-G_{A}(W_{x_{t}})\|_{1}\quad\quad(9)
Lr=EWxt∼pd(Wxt)∥Wxt−GA(Wxt)∥1(9)
由于GAN的梯度减小和模态崩溃,直接使用
L
G
E
\mathcal{L}_{G_{E}}
LGE和
L
G
D
\mathcal{L}_{G_{D}}
LGD作为正则化很难训练模型。为了解决这一限制,我们使用特征匹配损失来取代原始的对抗正则化,该特征匹配损失被证明可以减少GAN训练[34]的不稳定性。设为一个函数,它输出从相应分布中采样的给定输入的鉴别器的中间层。特征匹配测量L2原始数据的特征表示与生成数据之间的L2距离。因此,对抗损失
L
G
E
\mathcal{L}_{G_{E}}
LGE和
L
G
D
\mathcal{L}_{G_{D}}
LGD可以重新计算为:
L
G
E
=
∥
E
W
x
t
∼
p
d
(
W
x
t
)
F
E
(
G
E
(
W
x
t
)
)
−
E
z
∼
p
(
z
)
F
E
(
z
)
∥
(
10
)
L
G
D
=
∥
E
W
x
t
∼
p
d
(
W
x
t
)
(
F
D
(
W
x
t
)
−
F
D
(
G
A
(
W
x
t
)
)
)
∥
2
\begin{aligned} &\mathcal{L}_{G_{E}} =\|\mathbb{E}_{W_{x_{t}}\sim p_{d}(W_{x_{t}})}F_{E}(G_{E}(W_{x_{t}}))-\mathbb{E}_{z\sim p(z)}F_{E}(z)\| \\ &&\left(10\right) \\ &\mathcal{L}_{G_{D}} =\|\mathbb{E}_{W_{x_{t}}\sim p_{d}(W_{x_{t}})}\left(F_{D}(W_{x_{t}})-F_{D}(G_{A}(W_{x_{t}}))\right)\|_{2} \end{aligned}
LGE=∥EWxt∼pd(Wxt)FE(GE(Wxt))−Ez∼p(z)FE(z)∥LGD=∥EWxt∼pd(Wxt)(FD(Wxt)−FD(GA(Wxt)))∥2(10)
式中,分别为 F E F_{E} FE和 F D F_{D} FD中间层 D E D_{E} DE和 D D D_{D} DD的函数。同时训练 G A ( ⋅ ) G_A(\cdot) GA(⋅)、 D E ( ⋅ ) D_E(\cdot) DE(⋅)和 D D ( ⋅ ) D_D(\cdot) DD(⋅)。在我们的实验中,两个鉴别器的训练步长设置为1。
3.4 Online Detection
训练过程结束后,我们可以使用 DAEMON 模型来确定新实体是否异常。由于历史实体有利于理解实体𝑥𝑡的模式[15, 38],因此我们将序列𝑊𝑥𝑡作为重建𝑥𝑡的输入,并使用重建误差来计算异常分数𝑆𝑥𝑡。请注意,虽然我们可以计算 𝑊𝑥𝑡 中每个点的重建误差,但我们只测量最后一个点的误差,因为我们希望在检测过程中尽快检测到异常。 𝑥𝑡的异常分数计算如下:
S x t = ∥ x t − x t ′ ∥ 1 , ( 11 ) S_{x_{t}}=\|x_{t}-x_{t}^{\prime}\|_{1},\quad\quad\quad\quad\quad(11) Sxt=∥xt−xt′∥1,(11)
其中 𝑥′ 𝑡 是 𝑥𝑡 的相应重建。
异常得分越高意味着𝑥𝑡被重建的可能性越小,这表明它更有可能是异常的。 𝑆𝑥𝑡将被发送到阈值选择模块以识别𝑥𝑡是否异常。
3.5 阈值选择
对于在线异常检测系统来说,通常很难选择合适的阈值来判断异常。一种解决方案是通过基于标记数据训练分类器来识别异常。然而,在实际场景中,操作员没有简单的方法来手动标记每个时间序列,因为系统必须同时处理数百万个时间序列,这使得分类器在实际应用中存在不足。在本文中,我们研究了一种有效的无监督方法,即自适应相关窗(ACW)来识别异常。具体来说,我们假设异常分数的分布为正态分布2,并采用𝜏-Sigma方法来检测异常。对于每个实体 𝑥𝑡 ,我们维护一个窗口(即相关窗口(CW)),其中包含与 𝑥𝑡 相关的历史实体的异常分数,并计算 CW 的平均值和标准差。然后,将𝑥𝑡的异常分数𝑆𝑥𝑡与平均值和标准差进行比较。异常值计算如下:
A C W ( x t ) = { 1 , if S x t − μ x t σ x t > τ 0 , otherwise ( 12 ) ACW(x_t)=\begin{cases}1,\text{if}\dfrac{S_{x_t}-\mu_{x_t}}{\sigma_{x_t}}>\tau\\0,\text{otherwise}\end{cases}\quad(12) ACW(xt)=⎩ ⎨ ⎧1,ifσxtSxt−μxt>τ0,otherwise(12)
其中𝜇𝑥𝑡和𝜎𝑥𝑡分别是与𝑥𝑡相关的CW的平均值和标准差,𝜏是控制置信区间的参数。 𝐴𝐶𝑊(𝑥𝑡 ) = 1 表示𝑥𝑡异常。
3.6 异常解释
异常解释是异常诊断任务中的关键问题之一,但在最近的异常检测研究中却被忽略了[17,23,33]。我们通过整合异常实体每个维度的梯度来分析异常解释。
解释异常的一种简单方法是计算异常每个维度的重建误差 [38, 41]。然而,这种方法很大程度上取决于检测模型的重建精度。如果检测模型不能很好地重建数据,该方法可能无法解释异常。最近,提出了一种称为积分梯度(IG)[39]的方法来指示哪些像素对图像分类贡献最大,或者哪些单词对文本分类贡献最大。 IG 集成了从中性基线实体到给定实体的每个维度的梯度。中性基线实体用于识别给定实体的不同部分的归因,这些部分是特定于应用程序的。例如,在图像分类问题中,通常使用黑色图像作为中性基线实体,而在文本分类问题中,零嵌入标记向量被视为中性基线实体。考虑到异常检测可以被视为一个分类问题,并且受到IG在识别分类问题中关键因素的成功的启发,我们应用IG来解释异常(即找到导致异常的关键维度)。在异常解释问题中应用 IG 的关键步骤是选择合适的中立基线实体。下面,我们首先分析如何使用IG来解释异常,然后提出选择中性基线实体的方法。
给定一个表示深度网络的函数𝐹,令 x t ∈ R M x_t\in R^M xt∈RM为实体, x t b ∈ R M x_{tb}\in R^{M} xtb∈RM为其对应的中性基线实体,其中𝑀 为每个实体的维度数。 IG 计算 𝑥𝑡𝑏 和 𝑥𝑡 之间的偏差 D ( x t b , x t ) D(x_{tb},x_{t}) D(xtb,xt)来确定 𝑥𝑡 各部分的贡献。 D ( x t b , x t ) D(x_{tb},x_{t}) D(xtb,xt) 计算如下:
D ( x t b , x t ) = F ( x t b ) − F ( x t ) = F ( α ( 1 ) ) − F ( α ( 0 ) ) = ∑ m ∫ n = 0 1 ∂ F ( α ( n ) ) ∂ α m ( n ) ∂ α m ( n ) ∂ n d n (13) = ∑ m D m ( x t b , x t ) \begin{aligned} D(x_{tb},x_{t})& =F(x_{tb})-F(x_{t}) \\ &=F(\alpha(1))-F(\alpha(0)) \\ &=\sum_m\int_{n=0}^1\frac{\partial F(\alpha(n))}{\partial\alpha^m(n)}\frac{\partial\alpha^m(n)}{\partial n}dn& \text{(13)} \\ &=\sum_mD_m(x_{tb},x_t) \end{aligned} D(xtb,xt)=F(xtb)−F(xt)=F(α(1))−F(α(0))=m∑∫n=01∂αm(n)∂F(α(n))∂n∂αm(n)dn=m∑Dm(xtb,xt)(13)
其中 𝛼 是指定 𝑥𝑡𝑏 和 𝑥𝑡 之间关系的平滑函数,𝛼(1) = 𝑥𝑡𝑏 , 𝛼(0) = 𝑥𝑡 和 ∂ F ( y ) ∂ y m \frac{\partial F(y)}{\partial y^{m}} ∂ym∂F(y)表示 𝐹 沿 y 处的第 𝑚 维度。
根据方程13,如果我们将DAEMON的自动编码器设置为𝐹,并将异常𝑥𝑡及其中性基线实体𝑥𝑡𝑏设置为𝐹的输入,我们可以使用𝐷𝑚 (𝑥𝑡𝑏, 𝑥𝑡 ) (1 ≤ 𝑚 ≤ 𝑀)到分析𝑥𝑡的根本原因。接下来,𝛼可以是𝑥𝑡𝑏和𝑥𝑡的线性组合[39],即
α
(
n
)
=
n
⋅
x
t
b
+
(
1
−
n
)
⋅
x
t
.
D
m
(
x
t
b
,
x
t
)
\alpha(n)=n\cdot x_{tb}+(1-n)\cdot x_{t}.D_{m}(x_{tb},x_{t})
α(n)=n⋅xtb+(1−n)⋅xt.Dm(xtb,xt)。
D
m
(
x
t
b
,
x
t
)
D_m(x_{tb},x_t)
Dm(xtb,xt) 可以计算如下:
D
m
(
x
t
b
,
x
t
)
=
(
x
t
b
m
−
x
t
m
)
⋅
∫
n
=
0
1
∂
F
(
x
t
+
n
⋅
(
x
t
b
−
x
t
)
)
∂
x
t
m
d
n
,
(
14
)
D_m(x_{tb},x_t)=(x_{tb}^m-x_t^m)\cdot\int_{n=0}^1\frac{\partial F(x_t+n\cdot(x_{tb}-x_t))}{\partial x_t^m}dn,(14)
Dm(xtb,xt)=(xtbm−xtm)⋅∫n=01∂xtm∂F(xt+n⋅(xtb−xt))dn,(14)
其中 x i m x_i^m xim 是实体 𝑥𝑖 第 𝑚 维度的值。
从公式 14 可以清楚地看出,中性基线实体 𝑥𝑡𝑏 的值在计算 𝐷𝑚 中很重要。我们现在分析如何为实体𝑥𝑡选择合适的𝑥𝑡𝑏。考虑到时间序列是按时间顺序排列的实体序列,我们使用𝑥𝑡的实体窗口W𝑥𝑡来重建𝑥𝑡,并选择𝑥𝑡的重建实体作为其中性基线实体𝑥𝑡𝑏。
四、实验
我们对四个真实数据集进行实验来评估我们提出的模型。我们使用 PyTorch(v1.0.0 和 Python 3.6.4)实现算法。所有实验均在配备 NVIDIA Tesla P100 16GB HBM2 GPU 和 64G 内存的 Linux (EulerOS 4.8.5) 机器上运行。
4.1 Datasets
为了证明我们模型的优先级,我们选择了四个真实数据集:SMD(服务器机器数据集)[38]、SMAP(土壤湿度主动被动卫星)、MSL(火星科学实验室漫游器)[15]和SwaT(安全水处理)3 。 SMD、SMAP和MSL都有训练和测试子集,并且每个测试子集中的异常都已被标记。对于 SWaT,根据[12],系统需要 5-6 小时才能达到稳定。因此我们从训练集中消除了前 21,600 个样本。每个数据集的子集都是单独训练的,因为它们是不同的场景。这些数据集的详细信息如表 1 所示。
4.2 评估指标
我们使用 Precision (Pre)、Recall (Rec) 和 F1-score (F1) 来评估 DAEMON 和基线的性能。
在实际应用中,操作员通常不关心逐点度量,并且异常经常连续发生,形成连续的异常段。如果在连续异常段的任何子集中触发警报,则可接受。因此,我们采用点调整方法[38, 40]来衡量性能。如果异常段中的任何点可以被算法检测到,我们认为该段被正确检测到,并且该段中的所有实体被认为被正确检测为异常。
4.3 基线方法
我们将 DAEMON 与以下算法进行比较。
• VAE [19]。变分自动编码器,其网络结构与𝐺𝐴相同。
• EncDec-AD [30]。 EncDec-AD是一种基于编码器-解码器重构的seq2seq模型。
• GANomaly [2]。基于重建的模型,采用条件生成对抗网络,共同学习数据的生成和潜在空间的推理。
• LSTM-NDT [15]。基于预测的模型,使用 LSTM 网络根据历史实体来预测数据。
• DAGMM [47]。基于预测的模型,由两个主要部分组成:压缩网络和估计网络。
• LSTM-VAE [31]。一种基于重构的模型,将LSTM和VAE结合起来,用LSTM代替VAE的前馈网络。
• BeatGAN [46]。基于重建的模型,采用对抗性生成方法来重建数据。
• OmniAnomaly [38]。基于重构的模型,采用随机变量连接和平面归一化流来重构输入数据。
• NSNN [37]。基于分类的模型,采用负采样的方法在正常数据的基础上生成异常,并使用异常和正常数据来训练分类器。
4.4 参数
表2列出了整个实验中使用的参数,除非明确指定,否则所有参数均分配默认值。
此外,DAEMON 的每个网络均由一维 (1D) 卷积神经网络组成,滤波器沿时间维度滑动。详情如下。
𝐺𝐸的网络结构。 𝐺𝐸 由三部分组成,基本编码器部分、均值部分和标准差部分。基本编码器部分每层的内核大小和数量为32(4/2/1)-64(4/2/1)-128(4/2/1)-256(4/2/1)- 512(4/2/1),以及平均值部分 128(4/1/0) 和标准偏差部分 128(4/1/0)。 32(4/2/1)表示滤波器的数量为32,滤波器的大小为4,步幅为2,填充为1。
𝐺𝐷的网络结构。 𝐺𝐷由6个一维转置卷积层组成,即512(4/1/0)-256(4/2/1)-128(4/2/1)-64(4/2/1)32(4/2 /1)-𝑀(4/2/1),其中𝑀是输入数据的维数。
𝐷𝐸 和 𝐷𝐷 的网络结构。 𝐷𝐸 和 𝐷𝐷 具有相同的架构细节,由与基本编码器部分相同的结构组成,以及结构为 1(4/1/0) 和 Sigmoid 激活的层。
我们为 SMAP 数据集设置 𝜆𝐺𝐸 = 1.0 和 𝜆𝐺𝐷 = 0.1。采样训练数据的移位长度设置为SMD、SMAP和MSL的1,以及SWaT的10。控制置信区间的参数,即 𝜏,设置为 3。
4.5 实验结果
我们评估了 DAEMON 和其他最先进的方法在四个真实数据集上进行多元时间序列异常检测的性能。性能从四个方面进行评估:准确性、模型变体、阈值选择和异常解释。
4.5.1 准确性
首先,我们比较 DAEMON、VAE、EncDec-AD、GANomaly、LSTMNDT、DAGMM、LSTM-VAE、BeatGAN、OmniAnomaly 和 NSNN 在四个数据集和 Total 数据集上的 Precision (Pre)、Recall (Rec) 和 F1-score (F1) (总数据集上的性能是这四个数据集上的并集性能)。每种方法的异常分数通过最小-最大缩放标准化在 0 和 1 之间,并报告最佳 F1。表 3 显示了每种方法的性能。 DAEMON 在 SMD、MSL 和 SWaT 数据集上的表现优于所有基线,其 F1 仅略低于 SMAP 数据集上的最佳基线。此外,与其他最先进的方法相比,DAEMON 在 Total 数据集上的 F1 上表现出了最佳性能。 DAEMON的鲁棒性优于所有基线,因为DAEMON在所有数据集上的Pre和Rec值均高于0.89,这是任何基线都无法达到的。原因是设计了两个判别器来对抗性地研究输入数据的模式,这保证了DAEMON的鲁棒性和通用性。
4.5.2 型号变体
由于SR算法更容易检测异常,为了演示DAEMON中使用的主要技术(即1D-CNN、自动编码器隐藏变量的对抗性训练以及原始数据和重构数据的对抗性训练)的效果更一般的场景,我们删除数据预处理模块中的SR进程并重新配置DAEMON以创建三个变体,描述如下。 (V1) 1D-CNN被LSTM和GRU取代,分别表示为DAEMON-LS和DAEMON-GR。 (V2) 自动编码器隐藏变量的对抗性正则化被 VAE [19] 中使用的 KL 散度取代,表示为 DAEMON-KL。此外,去除了自动编码器隐藏变量的对抗性正则化,表示为DAEMON-RH。 (V3)原始数据和重构数据的对抗性正则化被删除,表示为DAEMON-RR。
**一维CNN的效果。**图 3 显示 1D-CNN 在大多数数据集上的表现优于 LSTM 和 GRU,这表明 1D-CNN 还可以捕获时间序列的长期依赖性,更适合研究时间序列中发生的动态变化和模式。当前窗口。由于 SMAP 数据集是常规数据集 [15],因此数据模式没有显着变化,从而导致使用 LSTM 的最佳性能。
**隐藏变量的对抗性正则化的效果。**隐藏变量的对抗性训练是我们模型的关键部分之一,它保证了DAEMON的鲁棒性。从图3中我们可以看到,通过隐藏变量的对抗性训练,DAEMON的表现优于使用KL散度的变体。这是因为与对抗性正则化相比,KL散度无法捕获隐藏空间某些区域的数据流形[29],导致重建效果较差。此外,我们删除了隐藏变量的对抗性正则化以证明其效果。从图3中我们可以看到,在所有数据集上,DAEMON的表现都优于DAEMON-RH。因为通过隐藏变量的对抗性训练,它确保了潜在空间具有良好的属性,可以实现生成过程并提高鲁棒性。
**重建数据的对抗性正则化的效果。**重建数据的对抗性正则化在避免过度拟合方面发挥着重要作用。从图 3 可以清楚地看出,通过使用重构数据的对抗性正则化,DAEMON 的性能得到了提高。如果没有对重建数据进行对抗性正则化,模型(即 DAEMON-RR)将更容易过度拟合,从而导致性能较差。
4.5.3 阈值选择
正如 3.5 节中所讨论的,选择合适的相关窗 (CW) 对于提高自适应相关窗 (ACW) 方法的性能非常重要。然而,在实际应用中,监控的时间序列数量巨大,为每个实体维护一个CW是不可行的。为了克服这个限制,我们采用了一种简单但有效的策略,即使用验证集(训练集的最后 30% 数据)作为测试集中每个实体的 CW。为了证明 ACW 方法的有效性,我们将其与 Peaks-OverThreshold (𝑃𝑂𝑇) 方法 [36] 和最佳 F1 值进行比较。从表4可以看出,通过ACW获得的F1略低于最佳F1值(0.016∼0.141),其性能优于POT。在大多数数据集上,ACW 的性能优于某些基线的最佳 F1 值(见表 3),证明了我们策略的有效性。
4.5.4 异常解释
异常解读是在线异常检测服务的重要组成部分,可以帮助运营商了解和处理异常情况。由于多元时间序列的实体由各种维度组成,因此我们计算异常的每个维度的梯度,并将其梯度对重建贡献最大的 top-𝑘 维度记录为根本原因。受到[38]中提出的异常解释指标 HitRate@P% 和归一化折扣累积增益(NDCG)的启发,NDCG 是一种广泛用于学习排名系统的评估指标 [6],我们提出了一种名为重构折扣累积增益的新指标增益(RDCG@P%)衡量每种算法的异常解释性能。让 |𝐺𝑥𝑡 |是地面实况数组 𝐺𝑥𝑡 的长度,P 是正整数(例如 100),𝐼𝑥𝑡 是具有最大异常分布的$\lfloor P%\times|G_{x_t}|\rfloor $ 维度的列表。 RDCG@P% 计算如下:
R D C G @ P % = ∑ i ∣ G x t ∣ v i log 2 ( d i + 2 ) , ( 15 ) RDCG@P\%=\sum_i^{|G_{x_t}|}\frac{v_i}{\log_2(d_i+2)},\quad(15) RDCG@P%=i∑∣Gxt∣log2(di+2)vi,(15)
其中𝑣𝑖是表示𝐺𝑥𝑡的第 G x t i G_{x_{t}}^{i} Gxti是否在𝐼𝑥𝑡中的值,𝑑𝑖是测量从𝐺𝑖𝑥𝑡到𝐼𝑥中相同值的距离𝑡 .如果 𝐺𝑖 𝑥𝑡 在 𝐼𝑥𝑡 中,𝑣𝑖 = 1 且 𝑑𝑖 = |𝑖 − 𝑖𝑑𝑖 |,其中 𝑖𝑑𝑖 表示 G x t i G_{x_{t}}^{i} Gxti 在 𝐼 中的索引𝑥𝑡。否则,𝑣𝑖 = 0 且𝑑𝑖 = |𝐺𝑥𝑡 |。此外,RDCG@P% 可以标准化如下:
n R D C G @ P % = R D C G @ P % I R C G @ P % , ( 16 ) nRDCG@P\%=\frac{RDCG@P\%}{IRCG@P\%},\quad\quad\quad(16) nRDCG@P%=IRCG@P%RDCG@P%,(16)
其中 IRCG@P% 是 RDCG@P% 的理想值。基于以上讨论,HitRate@P% 可以被认为是 nRDCG@P% 的一个特例,通过为 𝐼𝑥 中的每个 G x t i G_{x_t}^i Gxti 设置 𝐼𝑅𝐶𝐺@𝑃% = |𝐺𝑥𝑡 |, 𝑣𝑖 = 1 和 𝑑𝑖 = 0 𝑡 ,证明 nRDCG@ P%比HitRate@P%可以应用的场景更多。
由于只有SMD具有异常解释的groundtruth,因此我们对其进行了异常解释的实验。我们没有选择GANomaly、LSTM-NDT和DAGMM进行比较,因为GANomaly和LSTM-NDT在SMD上的性能较差,并且无法获得DAGMM中每个维度的重建误差。图 4 显示了将 𝑃 从 100 更改为 300 时每种方法所有检测到的异常的平均解释精度。对于所有方法,nRDCG@P% 随着 𝑃 的增加而降低,因为更多的𝐺𝑥𝑡项目可以包含在 𝐼𝑥𝑡 中,从而导致更大的 RDCG @P%和IRCG@P%,而IRCG@P%的值变化大于RDCG@P%。无论𝑃如何,DAEMON 的性能都优于其他最先进的方法,这证明了我们提出的解释方法的优越性。
五、相关工作
近年来,异常检测得到了广泛的研究[16,18,33,36,38,41,44,46]。以往的工作可以分为传统统计方法、监督方法和无监督方法。统计方法包括小波分析[27]、卡尔曼滤波[20]、基于草图的方法[21]、SVD[28]、自回归积分移动平均(ARIMA)[42]及其变体。然而,这些探测器对噪声和参数敏感,这限制了它们在实践中的应用。
为了解决传统统计方法的局限性,提出了监督集成方法,例如 EGADS [22] 和 Opprentice [25]。 EGADS 包含一系列异常检测和预测方法,以及用于检测时间序列异常的异常过滤层。 Opprentice 利用统计检测方法来训练随机森林分类器 [24] 来检测异常。 EGADS和Opprentice可以实现高性能,但它们严重依赖良好的标签,这在复杂和大规模的应用中是不可行的。
为了克服标签有限的问题,无监督方法近年来引起了广泛关注[1,15,17,33,38,40,46]。许多研究人员尝试采用深度学习算法来检测异常。周等人。 [46]使用生成对抗网络(GAN)来检测多元时间序列的异常。李等人。 [23]设计了一个基于 GAN 的模型来根据重建残差和判别来检测异常。乔等人。 [17]提出了两个集成框架,结合了多个稀疏连接的循环神经网络,以减少某些自动编码器过度拟合异常值的影响,并使用重建误差来检测异常。张等人。 [41]采用签名矩阵来表征系统状态的多个级别,并采用卷积长短期记忆来捕获时间模式。赵等人。 [43]结合基于预测的模型和基于重建的模型来检测多元时间序列的异常。具体来说,提出了两个图注意层来学习时间序列在时间和特征维度上的依赖性。
在检测异常时,重要的是分析异常的根本原因,以帮助操作人员处理异常。大多数研究根据原始数据和重建数据之间的重建误差来解释异常。苏等人。 [38]采用随机变量连接和平面归一化流来重建时间序列数据,并使用重建概率来解释异常。安特瓦格等人。 [3]使用基于博弈论的框架,即Shapley Additive Explanations,来解释自动编码器检测到的异常,它通过关注具有高重建误差的维度之间的联系来提供解释。张等人。 [41]为多元时间序列构造矩阵,即签名矩阵,以研究不同时间序列数据对之间的相互相关性,并利用原始签名矩阵和重构签名矩阵之间的残差来分析异常的根本原因。
六、结论
多变量时间序列异常检测是监控系统中的一项重要任务。在实际应用中,一种高效、通用、准确的异常检测方法是必不可少的。在本文中,我们提出了一种用于多元时间序列异常检测的新颖架构,即对抗性自动编码器异常检测和解释(DAEMON)。 DAEMON 提供了一种直观有效的方法来识别异常并根据不同指标的梯度分析异常的根本原因。广泛的实验结果表明,DAEMON 在四个数据集上优于最先进的方法,这表明 DAEMON 非常强大,可以应用于各种在线异常检测服务。
在未来的工作中,研究半监督方法基于有限的标记数据自动选择阈值以过滤操作员不感兴趣的异常是有意义的。
[1] Subutai Ahmad, Alexander Lavin, Scott Purdy, and Zuha Agha. 2017. Unsuper-
vised real-time anomaly detection for streaming data. Neurocomputing 262 (2017),
134–147.
[2] Samet Akcay, Amir Atapour-Abarghouei, and Toby P Breckon. 2018. Ganomaly:
Semi-supervised anomaly detection via adversarial training. In ACCV. 622–637.
[3] Liat Antwarg, Ronnie Mindlin Miller, Bracha Shapira, and Lior Rokach. 2021.
Explaining anomalies detected by autoencoders using Shapley Additive Explana-
tions. Expert Systems with Applications 186 (2021), 115736.
[4] Richard A Bauder and Taghi M Khoshgoftaar. 2017. Medicare fraud detection
using machine learning methods. In ICMLA. 858–865.
[5] Andrea Borghesi, Andrea Bartolini, Michele Lombardi, Michela Milano, and
Luca Benini. 2019. Anomaly detection using autoencoders in high performance
computing systems. In AAAI, Vol. 33. 9428–9433.
[6] Sebastian Bruch, Xuanhui Wang, Michael Bendersky, and Marc Najork. 2019.
An analysis of the softmax cross entropy loss for learning-to-rank with binary
relevance. In SIGIR. 75–78.