时间序列异常检测任务,目标是判断时间序列的各个片段是否异常。今天这篇文章是ICLR 2023中一篇利用BERT解决时间序列异常检测的工作。核心是利用BERT模型结合时间序列异常样本生成做预训练,让BERT具有判别异常片段的能力,再应用到下游时间序列异常检测任务中。
1、整体思路
本文提出的AnomalyBERT整体模型结构如下图。整体思路,首先,对于一个正常的时间序列,抽取某个片段,对于这个片段使用某种异常值生成的方式构造异常样本。接下来,将这个异常样本输入到Transformer模型中,模型得到每个片段的异常值打分预测结构,拟合目标是这个片段是否为异常的分类任务。在经过大量数据的训练后的BERT,就具有了判别时间序列每个片段是否异常的能力。
2、模型细节
下面主要从异常样本生成、模型结构、训练方式3个部分,介绍AnomalyBERT的模型细节。
异常样本生成,主要目的是将一个正常的时间序列处理成某个片段异常的序列,通过这种方式实现有监督的训练。文中提出了4种类型的异常样本构造方法:
Soft Replacement:将原始片段替换成窗口外序列的加权求和
Uniform Replacement:将原始片段替换成一个常数值序列
Peak Noise:在片段中增加异常峰值
Length Adjustment:修改片段中序列的长度,然后再填充到原来片段中
异常数据构造的目的,主要是为了模拟真实场景异常序列。如何构造这个数据对最终效果影响非常大,因此需要针对下游任务选择最适合的异常数据构造方法。例如本文中提到的4种异常数据构造方法,都暗含了一些对异常数据形态的先验假设。
模型结构方面,主体是Transformer结构,对于position embedding部分,文中是直接在每层的attention计算中加入位置偏置向量,这一点是和BERT有差异的,主要为了增强模型对时序的感知能力。将时间序列分成各个片段后输入到Transformer,类似于PatchTST的思路,最终每个片段生成一个打分,用来判断当前片段是否存在异常值。
优化目标上,是一个二分类任务,对于人工构造异常片段部分,希望模型打分接近1。损失函数是简单的二分类交叉熵损失。
3、模型效果
下图是一些可视化的例子。左侧第一列是时间序列,红色部分代表异常点,上面是原始序列,下面是模型对各个片段的打分。可以看到对于异常部分,模型的预测打分是明显偏高的,能够正确识别时间序列中的异常片段。第二列是表示的TSNE分布,异常部分的表示与正常部分的表示在分布中可以得到一定程度的分离。
整体的实验效果如下图,在多个数据集上AnomalyBERT都取得了超越之前方法的效果。