融合transformer和对抗学习的多变量时间序列异常检测算法TranAD论文和代码解读…

一、前言

今天的文章来自VLDB

TranAD: Deep Transformer Networks for Anomaly Detection in Multivariate Time Series Data

e96a54bcf5f8b7e651cc9e0266bff553.png
  • 论文链接:https://arxiv.org/pdf/2201.07284v6.pdf

  • 代码地址:https://github.com/imperial-qore/TranAD

二、问题

在文章中提出了对于多变量异常检测的几个有挑战性的问题

  1. 缺乏异常的label

  2. 大数据量

  3. 在现实应用中需要尽可能少的推理时间(实时速度要求高)

在本文中,提出了基于transformer的模型TranAD,该模型使用基于注意力机制的序列编码器,利用数据中更广泛的时间趋势快速推断。TranAD使用基于score的自适应来实现鲁棒的多模态特征提取以及通过adversarial training以获得稳定性。此外,模型引入元学习(MAML)允许我们使用有限的数据来训练模型。

三、方法

3.1 问题定义

一个时间序列d28716097400c3fad1dad3139bbcdbeb.png因为是多变量时间序列,每一个X是一个大小为m的向量,即该序列有m个特征。

该工作定义了两种任务

  1. Anomaly Detection(检测):给予一个序列来预测目前时刻的异常情况(0或者1),1代表该数据点是异常的。

  2. Anomaly Diagnosis(诊断): 文中这块用denote which of the modes of the datapoint at the 𝑡-th timestamp are anomalous.来描述,其实就是判断是哪几个维度的特征(mode)导致的实体的异常,诊断到维度模式的程度。

3.2 数据预处理

对数据做normalize,数据的保存形式,是一个实体一个npy文件,维度是(n, featureNum)

2f719176b829e3f3c0524496a91bc6d1.png

对数据进行滑窗,这里对于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的模型图。

432eb676e9e9acc1121b905f40c7a091.png

模型本身和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】范围内。89f2292bd662e00ac2b8d3489356d255.png

这个图其实十分清晰,这个方法最大的创新不在模型本身,甚至模型没什么改动,主要引入了对抗训练的思想 解释下其中的变量

  • W为输入的窗口数据(前面数据预处理页提到了窗口数据的生成)

  • Focus Score是和W一样维度的变量,在第一阶段为0矩阵,第二阶段是通过W和O1的计算得出

  • C W的最后一个窗口数据

这个C变量,文中这样说。

f4ef95e9ca715e59531b05542498e5bc.png

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2023年2月25日
下一篇 2023年2月25日

相关推荐