MEMTO: Memory-guided Transformer for Multivariate Time Series Anomaly Detection

目录

  • 一、问题与思路
    • 1.1 现存问题
    • 1.2 解决思路
  • 二、模型与方法
    • 2.1 模型概览
    • 2.2 Encoder and decoder
    • 2.3 门控存储器模块
      • 2.3.1 门控存储器更新阶段
      • 2.3.2 查询更新阶段
      • 2.3.3 损失函数
      • 2.3.4 初始化内存项
      • 2.3.5 异常评分
      • 2.3.6 阈值设定
  • 三、实验与分析
    • 3.1 模型结果
    • 3.2 消融实验
    • 3.3 LSD的统计分析

一、问题与思路

1.1 现存问题

现有的基于重构的方法可能存在过度泛化的问题,即异常输入被重构得太好。如果编码器提取异常的独特特征,或者解码器对异常编码向量具有过度的解码能力,则可能发生这种情况。

Q1:为什么“只用正常样本训练,由于编码器和解码器表达能力的限制,模型仍然可能对异常样本具有比较好的重构能力”,明明没有对异常模式进行学习,为什么对其还有比较好的重构能力?
A1:主要是由于编码器和解码器本身的建模能力存在局限性。

  1. 编码器在提取特征时,主要学习到了正常数据中的一些网络结构/分布信息等。这些特征很可能对异常数据也有一定的表示能力。
  2. 解码器在解码时,主要学习到了如何从编码向量重构输出。这种重构的模式很可能也适用于异常数据,即使输入的是异常的编码向量,也能重构出较为正常的输出。

也就是说,这些网络组件本身对输入输出的建模并不是百分之百完美和严格的。它们根据正常数据学到的模式,很可能也适用于未见过的异常数据。这是由于它们自身的局限性导致的过度泛化。

1.2 解决思路

本文提出了一种新的基于重构的多变量时间序列异常检测方法——记忆导向变压器(MEMTO)。门控存储器模块是MEMTO的关键组件之一,它包括表示数据中正常模式的原型特征的项。我们采用增量方法来训练门控存储模块中的单个项目。
它根据输入数据确定每个现有项目的更新程度。这种方法使MEMTO能够以更加数据驱动的方式适应各种正常模式。利用存储在存储器中正常模式的特征重构异常样本可以得到与正常样本相似的重构输出。在这种情况下,MEMTO很难重建异常,从而释放了过度泛化的问题。

二、模型与方法

2.1 模型概览

image.png
首先将输入子系列 X s X^s Xs馈送到编码器,然后将编码器输出特征用作查询 q s q^s qs,以检索相关项或更新门控内存模块中的项。解码器的输入是更新后的查询,它们是查询 q t s q^{s}_t qts和检索到的记忆项的组合特征。解码器将更新后的查询序列映射回输入空间,完成重构。
image.png

2.2 Encoder and decoder

MEMTO使用transformer的编码器将输入子序列投射到潜在空间。用由两个完全连接的层组成的弱解码器。解码器不应该过于强大,因为这可能导致其性能独立于编码器编码输入时间序列的能力的情况。

2.3 门控存储器模块

该机制旨在限制编码器捕获异常独特属性的能力,从而使重建异常数据更具挑战性。

2.3.1 门控存储器更新阶段

我们期望内存项包含与正常时间戳相对应的所有查询 q q q的原型。因此,我们采用一种增量的方法,通过定义查询条件的记忆注意 v i , t s v_{i,t}^{s} vi,ts(i=1,2,…M)来更新记忆项。它由softmax计算每个内存项和查询之间的点积,如下所示:
image.png

算出来的 v i , t s v_{i,t}^{s} vi,ts就代表着第s个窗口,在第t个时间点,查询q和第i个内存项的注意力值,所以最终结果应该是一个L×M的矩阵,代表这个时间窗口中每个时间点与每个内存项的一个注意力矩阵

我们在我们的记忆模块机制中提出了一个更新门ψ,以根据各种正常模式灵活地训练每个记忆项。这个门控制从查询中获得的新正常模式注入到存储在内存项中的现有原型正常模式的程度,它允许我们的模型以数据驱动的方式学习每个现有内存项应该更新到什么程度。我们的内存更新机制的方程是:
image.png
U ψ , W ψ U_ψ,W_ψ Uψ,Wψ表示线性投影,σ 表示sigmoid函数,◦ 表示逐项积

2.3.2 查询更新阶段

在查询更新阶段,我们生成更新后的查询,然后将其作为输入馈送给解码器。与门控内存更新阶段类似,我们定义了内存条件查询注意力 w i , t s w_{i,t}^{s} wi,ts,由softmax计算每个查询与内存项之间的点积如下:
image.png
然后,将检索到的记忆项 m i m_i mi加权和,取 w i , t s w_{i,t}^{s} wi,ts作为其对应的权重,得到检索到的记忆项:
image.png
原始查询的q和检索到的记忆项q沿着特征维度连接,构成更新的查询。更具有鲁棒性,因为原始查询的q中异常的独特属性可以被内存项中的相关正常模式抵消。异常的重建输出通常与正常样本相似,这使得异常的重建更具挑战性。这种强化的难度有助于更有效地区分正常和异常数据,防止过度泛化。

2.3.3 损失函数

image.png
密集的 W S W_S WS使一些异常有可能被很好地重建,因此,为了保证在内存中只检索有限数量的密切相关的正常原型,我们引入了熵损失 L e n t r L_{entr} Lentr作为我们对 W s W_s Ws进行稀疏正则化的辅助损失:

image.png
image.png

2.3.4 初始化内存项

由于我们是逐步更新记忆项的,如果这些项是随机初始化的,那么在训练过程中就有不稳定的风险。我们提出了一种新的两阶段训练范式,该范式使用聚类方法将记忆项的初始值设置为数据的近似正常原型模式。
在第一阶段,MEMTO通过重建输入的自监督任务进行训练,经过训练的MEMTO编码器对随机抽样的10%的训练数据生成查询 q q q。然后,我们应用K-means聚类算法对查询进行聚类,并将每个质心指定为记忆项的初始值。
image.png

2.3.5 异常评分

我们引入了一个综合考虑输入和潜在空间的基于二维偏差的检测准则。
我们将时间点t处的潜空间偏差(LSD) 定义为每个查询q与其最近的记忆项m之间的距离,异常时间点的LSD会比正常时间点的LSD大,因为每个记忆项都包含一个正常模式的原型。
image.png
我们将归一化LSD与ISD相乘,用LSD作为权重放大ISD的正异常差:
image.png

2.3.6 阈值设定

将阈值设置为来自训练和验证数据的异常得分组合结果的top-p%,并为每个数据集指定p值。假如规定的p值是5%。 那么其中的步骤就是:

  1. 分别计算训练数据和验证数据的每一个样本点的anomaly score。
  2. 将两部分的anomaly score合并到一起,形成一个大的anomaly score集合。
  3. 取这些anomaly score排序最高的前5%分数点,设置为阈值。
  4. 在测试数据上,分数高于这个阈值的点,判定为异常。

三、实验与分析

3.1 模型结果

image.png

3.2 消融实验

image.png

3.3 LSD的统计分析

我们进一步探索门控存储模块在数据中捕获原型正常模式的优越能力。每种类型内存模块的平均LSD值如下:
image.png
在大多数数据集中,我们提出的门控内存模块始终显示出正常样本比异常样本更低的平均LSD值。此外,这些值之间的相对差异比其他存储模块机制更显著。这些结果证明了我们的记忆模块机制在捕获数据中正常模式的原型特征方面的有效性。
下图展示了与一个段内的每个时间戳相关联的异常评分和真实值标签:
image.png
结果表明,与基线相比,基于二维偏差的准则能较好地检测出异常。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/446390.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

宝塔一键迁移报错创建失败问题完美解决

很多站长朋友在使用宝塔面板迁移的时候总是出错,如图: 遇到这样的问题不要慌,我们已经完美处理,详细解决教程:宝塔一键迁移报错问题完美解决教程

深入理解操作系统Operator System(2)

目录 操作系统对上的管理 系统调用接口 用户操作接口(库函数) 系统调用和库函数的概念 结构层次示意图 总结 为什么要有操作系统❓ 上次主要介绍了操作系统的"管理"和操作系统对下的管理。本篇主要是对上的管理。 操作系统对上的管理 …

Linux智能网关结合Node-RED实现实时工业数据采集

工业4.0的发展,物联网技术在制造业中的应用越来越广泛。其中,基于Linux系统的工业物联网智能网关因其开放性、稳定性和安全性而备受青睐。这类智能网关创新性地集成了开源工具Node-RED,为从各种工业设备(如PLC)中高效收…

安装torch以及版本对应问题

首先查看cuda版本:winR 输入:nvidia -smi 我的cuda版本12.2,安装的torch版本要小于12.2 我的pip/conda源都改成清华源了,torch2.0以上的版本截止到2024年3月10日也没有。 pytorch官网:https://pytorch.org/ 寻找匹配…

关于比特币的AI对话

【ChatGPT】 比特币源码开源吗? 是的,比特币的源码是开源的。比特币项目是在MIT许可证下发布的,这意味着任何人都可以查看、修改、贡献和分发代码。比特币的源码托管在GitHub上,可以通过下面的链接进行访问: https://g…

注意!!墙裂推荐几个好用的实用小工具!一定会用到的!

前言 在开发的世界里,面对各种挑战和问题时,拥有一套合适的工具箱至关重要。这不仅能提升我们的工作效率,还能让复杂的任务变得简单,甚至在解决棘手问题的同时,还能让我们的心情略微舒畅。众所周知,有用的…

【EtherCAT实践篇】九、EtherCAT增加变量示例:增加浮点数输入变量

目的:在EtherCAT开发板上IO程序基础上进行修改,将原来的16位整数型数据Analog input改为32位浮点数,基于STM32F405底板。 1、XML配置修改 1.1 更改数据类型 ETG1020基础数据中包括浮点数 REAL,可以直接使用浮点数。 这里在xml…

MySQL索引+常见问题详解

网络上的讲述MySQL索引的文章太多了,我打算换个角度来说。我们尝试着从设计者的角度思考,索引为什么这么设计。 假如你是索引的设计者,你会如何设计索引。我们不妨以新华字典为例。如果我们要查询汉字爱是什么意思,我们有如下操作…

【读书笔记】针对ICS的ATTCK矩阵详解(一)

Techniques - ICS | MITRE ATT&CKhttps://attack.mitre.org/techniques/ics/ 一、初始访问(Initial Access) 该阶段:攻击者正在尝试进入ICS环境。 初始访问包括攻击者可能用作入口向量,从而可以在 ICS 环境中获得初始立足点的…

怎么在学习强国网上发布文章,学习强国投稿发稿方法途径,附学习强国多少钱价格明细表

学习强国是一款受用户欢迎的学习软件,许多人希望在其平台上发布自己的文章,以分享和传播自己的学习成果和心得体会。那么,怎么在学习强国网上发布文章呢?接下来,我们将介绍一些投稿发稿的方法和途径。 首先&#xff0c…

PLC的FC与FB模块程序的功能解析

前文讲了在西门子系列的PLC中四个程序模块的描述,从S7-1200PLC开始就有FC和FB程序块了,但在使用的时候,一些使用者还是不好理解,以至于不知道该如何选择。今天,我们就用大白话的方式给大家讲解FC与FB的功能。 1、FC与…

Python打印Linux系统中最常用的linux命令之示例

一、Linux中的~/.bash_history文件说明: 该文件保存了linux系统中运行过的命令的历史。使用该文件来获取命令的列表,并统计命令的执行次数。统计时,只统计命令的名称,以不同参数调用相同的命令也视为同一命令。 二、示例代码&am…

数据结构二叉树续

在前边我们讲完了二叉树的一些代码结构 现在呢我们需要进一步去细化 我们传参数组后,让数组里面的数据进行调整 如何调整成堆呢? 建堆 所以我们分装一个成堆的函数 还是先去断言 然后创建空间 这里我们需要用到一个memcpy函数 memcpy函数是用来…

RabbitMQ - 07 - 通过注解创建队列和交换机

之前消息模型的实现,都是通过rabbitMQ Management 控制台来手动创建 queue 和 exchange 的 在项目开发中有两种方式通过代码声明 创建 一种是通过 Bean 方式,这种代码量较大 稍繁琐 一种是通过注解的方式声明 先编写消费者代码 通过注解绑定了 消息队列,交换机,还有 routin…

预约自习室

预约自习室 1、技术介绍 自习室预约系统的后端开发语言采用Node,后端开发框架采用Express,数据库采用的Node的最佳搭档MySQL。采用Vue作为前端开发框架,Element-UI作为开发的组件库,微信小程序。期间采用axios实现网页数据获取&a…

Linux 进程程序替换

💓博主CSDN主页:麻辣韭菜-CSDN博客💓   ⏩专栏分类:http://t.csdnimg.cn/G90eI⏪   🚚代码仓库:Linux: Linux日常代码练习🚚   🌹关注我🫵带你学习更多Linux知识   🔝&#x1f5…

springboot257基于SpringBoot的中山社区医疗综合服务平台

中山社区医疗综合服务平台的设计与实现 摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代,居民信息因为其管理内容繁杂,管…

车载诊断协议DoIP系列 —— 传输层控制协议(TCP)用户数据报协议(UDP)

车载诊断协议DoIP系列 —— 传输层控制协议(TCP)&用户数据报协议(UDP) 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师(Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意别人怎…

【notepad++工具使用之】批量加逗号

背景 在使用sql语句in关键字查询时,我们需要把数据用逗号进行隔开,在数据量非常少的时候(十几二十个这样),可以手动的去加逗号分隔符; 但是遇到1000个怎么弄呢? 强大的Notepad 批量处理数据时…

macOS14.4安装FFmpeg及编译FFmpeg源码

下载二进制及源码包 二进制 使用brew安装ffmpeg : brew install ffmpeg 成功更新到ffmpeg6.1 下载FFmpeg源码