一、前言
今天的文章来自VLDB
TranAD: Deep Transformer Networks for Anomaly Detection in Multivariate Time Series Data
论文链接:https://arxiv.org/pdf/2201.07284v6.pdf
代码地址:https://github.com/imperial-qore/TranAD
二、问题
在文章中提出了对于多变量异常检测的几个有挑战性的问题
缺乏异常的label
大数据量
在现实应用中需要尽可能少的推理时间(实时速度要求高)
在本文中,提出了基于transformer的模型TranAD,该模型使用基于注意力机制的序列编码器,利用数据中更广泛的时间趋势快速推断。TranAD使用基于score的自适应来实现鲁棒的多模态特征提取以及通过adversarial training以获得稳定性。此外,模型引入元学习(MAML)允许我们使用有限的数据来训练模型。
三、方法
3.1 问题定义
一个时间序列因为是多变量时间序列,每一个X是一个大小为m的向量,即该序列有m个特征。
该工作定义了两种任务
Anomaly Detection(检测):给予一个序列来预测目前时刻的异常情况(0或者1),1代表该数据点是异常的。
Anomaly Diagnosis(诊断): 文中这块用denote which of the modes of the datapoint at the 𝑡-th timestamp are anomalous.来描述,其实就是判断是哪几个维度的特征(mode)导致的实体的异常,诊断到维度模式的程度。
3.2 数据预处理
对数据做normalize,数据的保存形式,是一个实体一个npy文件,维度是(n, featureNum)
对数据进行滑窗,这里对于windowSize之前的数据并不舍去,而是用前面的数据直接复制,代码如下:
windows = []; w_size = model.n_window
for i, g in enumerate(data):
if i >= w_size: w = data[i-w_size:i]
else: w = torch.cat([data[0].repeat(w_size-i, 1), data[0:i]])
3.3 模型
先看一下transformer的模型图。
模型本身和TranAD除了有两个decoder其他基本上完全一样,这里结构不赘述了,具体看
transformer的论文: https://arxiv.org/pdf/1706.03762.pdf
代码:https://pytorch.org/docs/stable/generated/torch.nn.Transformer.html (推荐看官方的trasnformer代码,直接看源码实现)
TranAD也省去了decoder中feed forward后的add&Norm,softmax也更改为sigmoid,文中提到sigmoid是把输出的数据拟合到输入数据的归一化状态中,即【0, 1】范围内。
这个图其实十分清晰,这个方法最大的创新不在模型本身,甚至模型没什么改动,主要引入了对抗训练的思想 解释下其中的变量
W为输入的窗口数据(前面数据预处理页提到了窗口数据的生成)
Focus Score是和W一样维度的变量,在第一阶段为0矩阵,第二阶段是通过W和O1的计算得出
C W的最后一个窗口数据
这个C变量,文中这样说。
文章出处登录后可见!