前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于对比学习的时间序列异常检测方法

基于对比学习的时间序列异常检测方法

作者头像
圆圆的算法笔记
发布2023-08-17 08:50:36
1.1K0
发布2023-08-17 08:50:36
举报

今天给大家介绍KDD 2023中,牛津大学与阿里巴巴联合发表的时间序列异常检测工作。在以往的时间序列异常检测中,使用最多的方法是基于Reconstruction的方法。本文探索了对比学习在时间序列异常检测中的应用,取得了不错的效果。下面给大家详细介绍一下这篇文章。

论文标题:DCdetector: Dual Attention Contrastive Representation Learning for Time Series Anomaly Detection

下载地址:https://arxiv.org/pdf/2306.10347.pdf

1、为什么用对比学习

时间序列异常检测任务,需要判断时间序列中每个样本点,或者整个时间序列是否异常。解决这类问题的方法,主要可以分为有监督方法和无监督方法。其中,有监督方法需要获取到时间序列各个点是否异常的label,然而什么样的时间序列是异常的并没有一个明确的标准,这种label的标注也需要大量人力,往往无法获取大量准确的有label数据。这导致有监督方法在时间序列异常检测中的应用并不普遍。

相反,无监督方法或者半监督方法,不需要或者只需要少量的人工标注数据,是目前业内时间序列异常检测的主流方法。这类方法的核心是,通过大量的无标签时间序列数据,学习一个能够表征数据分布的模型,再利用这个模型对异常点进行判断。目前的主流方法是reconstruction-based方法,即训练一个类似于auto-encoder的框架,将时间序列输入到Encoder得到中间表示,再输入Decoder还原序列。在使用时,如果一个序列输入模型后,某些点还原的不够好,就说明这个时间序列或者序列中某个样本点是异常的。

但是,reconstruction-based方法的一个问题是比较难训练一个高质量对的Encoder,因为时间序列数据中混杂着正样本点和异常样本点,输入样本是存在噪声的,随着异常样本点的比例增加,使用这些数据训练的Encoder鲁棒性也越来越差,影响了异常检测的效果。

那么,能否用对比学习解决异常检测问题呢?文中提到一个假设:正常的样本点,和其他样本点有非常紧密的关系;而异常样本点,与其他样本点的关系很弱。我们可以从不同的角度学习样本点表征,如果不同角度的样本点表征相似,说明这个样本点和上下文其他样本点的关系是紧密的,是一个正常点,否则就是一个异常点。从不同角度学习样本表征一致性,正是对比学习的核心思路。因此,本文基于上述思路,采用对比学习的框架进行时间序列异常值检测。

2、实现方法

文中提出的对比学习时间序列异常检测框架,是一种经典的双塔模型。对于一个时间序列,分别输入到两个表征学习网络,生成两个表征向量,再使用对比学习的优化目标进行参数更新。

表征学习网络的结构,采用的是Patch+Transformer,将时间序列分成多个patch,使用Transformer进行patch级别的信息提取。这类框架在之前的文章中也有详细介绍,感兴趣的同学可以进一步阅读。

文中需要从不同的视角提取两种类型的时间序列表征,本文采用的两种视角,第一种是patch-wise的表征,第二种是in-patch的表征。Patch-wise表征基于patch粒度学习序列表征,将每个patch的序列映射到一个embedding后,使用Transformer建模多个patch之间的关系,最后融合到一起形成序列向量表示。In-patch表征则是利用Transformer在每个patch内部建立patch内样本点之间的关系,最后也融合成序列向量表示。注意这里是每个时间步产出一个向量,后续每个时间步对应做对比学习,以此实现每个点是否异常的判断。

在得到两种视角的表征后,下一步需要进行两个表征的对比学习。由于in-patch和patch-wise在不同层次提取了表征,而最终需要对齐到每个时间步的表征,因此需要做一次上采样。如下图所示,patch-wise输出的是每个patch的表征,需要映射到每个样本点的表征,这里直接使用repeat的方式。而in-patch输出的是每个样本点对的表征,这里对样本点进行组合得到各个patch的表征。最后两部分在每个时间步对应向量计算内积,进行对比学习。

损失函数文中采用KL散度衡量两个向量的距离,计算公式如下,其中D表示KL散度,Stopgrad表示不进行梯度反传:

在最后的使用上,使用上面训练好的Encoder生成两个视角的向量后,计算时间点之间的KL散度,大于一定阈值就认为这个时间点是异常点。

3、实验效果

整体的实验结果如下,通过precision、recall、f1等指标衡量不同模型在4个时间序列异常检测数据集上的效果,可以看到本文提出的方法,在大多数数据集上,在准召上都有一定程度的效果提升。文中也对stop-gradient、归一化等方面进行了消融实验等进一步分析。

4、总结

本文建立在正常点具有不同视角表征一致性的假设下,通过in-patch和patch-wise两种视角提取样本点表征,计算KL散度实现对异常点的判断,是一次比较成功的对比学习时间序列异常值检测探索。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-07-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 圆圆的算法笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档