ICLR'25 | 基于记忆网络和混合Prototype的时间序列异常检测方法

发布于 2025-4-30 06:35
浏览
0收藏

今天给大家介绍一篇ICLR 2025中关于时间序列异常检测的工作。这篇文章采用基于Memory Bank和Prototype的异常检测方法,提出在此基础上引入多尺度patch和多周期性的建模方法,进一步提升时间序列异常检测效果。

ICLR'25 | 基于记忆网络和混合Prototype的时间序列异常检测方法-AI.x社区

论文标题:LEARN HYBRID PROTOTYPES FOR MULTIVARIATE TIME SERIES ANOMALY DETECTION

下载地址:​​https://openreview.net/pdf?id=8TBGdH3t6a​

1.研究背景

时间序列异常检测的主流方法,是使用正常的时间序列训练一个自编码器,序列过一个Encoder生成表征,再经过一个Decoder还原,通过reconstruction loss让这个自编码器能够重构正常的输入序列。当输入一个异常序列时,异常点位置的重构loss会比较大,根据这个重构loss判断时间序列是否有异常。

这种方法的问题在于,经常会出现过泛化的现象。由于使用了大量时间序列数据进行深度模型训练,模型的拟合解码能力比较强,即使是一个异常序列,使用上述方法得到的重构loss可能也会比较小,影响了异常检测的效果。比如下图中粉色部分,第一行是异常序列,第二行是重构序列,重构序列将序列中异常的部分也还原出来了,重构loss较小,误判了异常序列。

ICLR'25 | 基于记忆网络和混合Prototype的时间序列异常检测方法-AI.x社区

为了解决这种问题,业内的一种做法是引入了memory network和prototype的异常检测方法。下面首先介绍这种基础方法,然后介绍ICLR 2025这篇文章在该方案基础上的改进。

2.基于Memory和Prototype的异常检测

这种方法是在MEMTO: Memory-guided Transformer for Multivariate Time Series Anomaly Detection(NIPS 2023)中提出的。该方法的核心思路是通过记忆网络加到自编码器对于异常序列的还原难度。

ICLR'25 | 基于记忆网络和混合Prototype的时间序列异常检测方法-AI.x社区

设置多个prototype,每个prototype对应一个embedding,随机初始化。对于原始序列,使用Transformer Encoder生成每个时间点的embedding,和prototype embedding计算softmax后,加权融合到各个prototype embedding中,这是一个比较基础的记忆网络建模方法。这里使用滑动更新的方式,用上一次prototype embedding和当次加权融合的prototype embedding加权求和,公式如下:

ICLR'25 | 基于记忆网络和混合Prototype的时间序列异常检测方法-AI.x社区

通过上述方式,各个prototype embedding存储了全量数据(正常序列)中不同类型的序列信息。接下来,再利用类似的方式,利用query和prototype embedding计算softmax,对prototype embedding加权求和,得到每个时间步新的表征,再基于这个表征输入Decoder进行重构。

通过这种方式,异常序列的还原难度变高了。因为prototype通过滑动平均存储了所有序列的表征,Decoder输入的表征基于prototype embedding汇聚得到,这样模型在解码的时候,输入的不只是当前序列信息,而是所有序列和当前序列类似的正常序列,增加了对异常点的还原难度。

3.混合Prototype引入

下面介绍ICLR2025这篇文章针对上述建模方法的改造。之前的方法主要生成每个时间步的表征,prototype也都是每个时间步表征生成的,无法有效涵盖所有类型的时序片段。文中的核心是引入了多尺度patch粒度的表征和周期性的表征,进而生成混合prototype,相当于将prototype的类型变多,加强了prototype的丰富度,进而使异常序列的还原难道进一步提升了。

ICLR'25 | 基于记忆网络和混合Prototype的时间序列异常检测方法-AI.x社区

具体来说,文中引入了包括两种类型的prototype表征,一种是基于多尺度patch的表征,另一种是基于多周期性的表征。多尺度patch的建模思路已经比较常见,对于输入的多变量序列,本文中通过不同尺寸大小的average pooling,得到不同尺度的patch embedding。每种尺度的patch,都使用前面提到的类似方法,基于softmax、滑动平均进行prototype embedding更新,以及输入表征的重构。

由于引入了不同尺度的patch,对于原始序列每个时间步的异常判断,会使用包含该位置的所有尺度对应的patch作为输入,使用一个MLP进行多尺度表征融合,得到最终每个时间步的最终表征。

ICLR'25 | 基于记忆网络和混合Prototype的时间序列异常检测方法-AI.x社区

此外,文中也引入了多周期的prototype,重点刻画序列周期性。对原始序列进行傅里叶变换后,选择topK个频率作为周期项窗口,根据该频率进行原始序列划分,每个变量的时间序列周期性变化规律不同,因此每个变量的周期性prototype进行单独的学习。整体的prototype更新和表征重构方式和多尺度patch类似,核心区别是周期性模块是每个变量单独学prototype embedding,而前面的多尺度patch是多变量不同尺度学一个prototype embedding。

4.实验效果

通过实验效果可以看出,本文提出的时间序列异常检测方法在整体的效果上有显著提升。

ICLR'25 | 基于记忆网络和混合Prototype的时间序列异常检测方法-AI.x社区

从可视化图可以看到,文中的方法可以很清晰的将异常数据和正常数据分离开。基于记忆网络重构的表征也能更容易和异常数据分离开。

ICLR'25 | 基于记忆网络和混合Prototype的时间序列异常检测方法-AI.x社区

本文转载自​​圆圆的算法笔记​

收藏
回复
举报
回复
相关推荐