A Deep Neural Network for Unsupervised Anomaly Detection and Diagnosis in Multivariate Time Series Data
发表会议:2019 AAAI
1 背景:
1.多元时间序列异常检测和诊断是要在时间步长中识别异常状态并查明原因。作者要建立这样的一个系统。
2.系统需要捕获每个时间序列中的事件依赖性,同时对不同时间序列对之间的相互关系进行编码,并且需要抗噪声能力,还可以根据不同事件的严重性为操作员提供不同等级的异常评分。
2 相关工作:
1.历史数据中没有异常标签,监督算法不可行。
2.现有存在许多无监督算法,但检测异常的效果都不是很好。
1)多元时间序列数据中存在时间依赖性,因此基于距离的聚类放大如knn,os-svm以及基于密度估计的方法效果都不是很好,因为无法捕获不同时间步长的时间相关性。
2)多元时间序列数据在日常应用中通常包含噪声,噪声严重的时候可能会影响时间预测模型的泛化能力,因此如arma,lstm等方法会增加检测的误报率。
3)实际应用中,应该根据不同事件的严重性为操作员提供不同级别的异评分,现有的分析方法对噪声敏感,无法处理此类问题。
3 作者提出的方法
1.作者提出了一种多尺度卷积递归编码/解码器(MSCRED)
2.MSCRED首先构建多尺度签名矩阵,以表征不同时间步长的系统状态的多个级别,即用不同级别指示不同异常事件的严重性。
3.在给定签名矩阵的情况下,使用卷积编码器对传感器相关性模式进行编码。
4.使用卷积长短期记忆网络来捕获事件模式。
5.利用编码传感器相关性和事件信息的特征图,使用卷积解码器重建签名矩阵,并进一步用残差签名矩阵诊断异常。
4 具体实现方法(MSCRED框架)
4.1 特征提取与签名矩阵
对于时序数据,首先构造特征矩阵,对于长度T,包含n个特征的时间序列数据,在每一个时间点t(t<T)取长度w的数据段,对n个特征两两计算内积,得到大小为n*n的特征矩阵,这反映了在t时刻过去w时间范围内的系统状态,对于数据中每个时间点都进行相似的计算,我们就将t*n的时间序列转换为t*n*n的特征矩阵。
由于各个传感器之间的数据存在相关性,于是作者这里没有把从传感器中得到的数据直接使用,而是进行了预处理
关于预处理的方法,作者提出了一个特征矩阵的构造方法。
举个例子,比如说我们有30个传感器,对每个传感器取了10000分钟的数据,那么我们会得到一个30*10000的原始数据的矩阵。
得到这个原始矩阵之后设置一个时间窗口,比如说是w=10min,同时设置一个时间间隔g=10min,然后我们就可以对原始矩阵进行切片
比方说第20分钟, 我们就取11-20min这10min的数据,会得到30个长度为10的向量。
之后对着30个向量两两做内积,比如说x3与x1做内积,再除以一个比例系数k,就可以得到一个数m31,做完这个过程会得到一个30*30的矩阵。
由于我们是10分钟采样一次,10000分钟的序列可以采样1000次。就可以得到1000个这样的矩阵。
作者在论文中设置了三个时间间隔w,分别为10,30,60。对每一个w做上述的的操作,所以数据预处理最后会得到1000个30*30*3的矩阵。
这样做的好处就是在就是我们通过机器学习模型重建特征图时可以很容易的进行定位,比如一个特征出现异常,那么它在特征图上对应的一行或者一列可能会出现很大的重建误差。
再者可以比较不同时间尺度的矩阵重建的误差推断严重程度,如果短时间尺度的特征矩阵重建误差较大,但是长时间尺度的特征矩阵重建误差不是那么显著,那么可能就会认为这是一次持续较短的异常。
4.2 重建误差分布
4.2.1 卷积编码器
将Mt输入到卷积层
*表示卷积运算,f()表示激活函数,Wl表示大小为bl的卷积核,bl是偏差项,并且X(t,l)表示第l层的输出特征图,作者使用4个卷积层,conv1-conv4,具有32个3*3*3大小内核,64个3*3*32大小内核,128个2*2*64大小内核,以及256个2*2*128的内核,以及1,1,2*2,2*2,2*2的步幅。
4.2.2 ConvLSTM
在卷积的每一层中,模型首先让原始特征图或上一级输入经过一次卷积,然后将输出结果通过Conv-LSTM层,然后使用注意力机制从Conv-LSTM各部的隐藏层状态中获取当级输出特征。
4.2.3 Convolutional Decoder
在Decoder的每一级,首先将Decoder上一级的输出特征和Encoder对应一级的输出特征级联,再经过一层反卷积得到输出。
Decoder使用Encoder中每一级提取的特征而不是仅仅依靠最后一级的特征的做法,与物体分割领域的做法是相似的,这使得模型能综合利用不同尺度的信息对数据进行重建。
如上图整个流程:
1.输入矩阵5*30*30*3
2.原始输入矩阵卷积得到5*303032的矩阵cnn1,再通过ConvLSTM卷积得到一个30*30*32的矩阵lstm1。
3.将cnn1卷积得到5*15*15*64的矩阵cnn2,再通过ConvLSTM卷积得到15*15*64的矩阵lstm2。
4.将cnn2卷积得到5*8*8*128的矩阵cnn3,再通过ConvLSTM卷积得到8*8*128的矩阵lstm3。
5.将cnn3卷积得到5*4*4*256的矩阵cnn4,再通过ConvLSTM卷积得到4*4*256的矩阵lstm4。
6.将lstm4反卷积,得到8*8*128的矩阵,连接lstm3,再反卷积,得到15*15*64的矩阵,连接lstm2,再反卷积得到15*15*128,连接lstm3,再反卷积得到30*30*32,再和lstm1连接,得到30*30*64,再反卷积,得到30*30*3即可。
4.3 评估
对于测试集,对它先进行特征抽取,得到特征矩阵,对特征矩阵进行重构,对重构矩阵进行对应元素相减再求平方,对于每个元素,比较其和设定阈值的大小,计算超过阈值的个数。
5 实验
同时,作者也通过实验说明了构造特征矩阵的方法可以有效的对异常进行细粒度分类,简单的来说就是使用较短时间长度构造的特征矩阵重建误差作为判断能够更好的检验出各种持续时间长的误差,而使用较长时间步长构建的矩阵对时间短的异常不敏感,通过比较各层特征矩阵的重建误差就可以获得异常的持续时间,作者也认为这是异常严重程度的度量。
S m l 分别对应三种时间步长,三种都检测出来的话我们就认为持续时间长,较为严重,右边的图也可以看到,数据集中总共5个异常,时间步长为10可以全部检测出来,时间步长为60时只能检测出来一个,三个都检测出来的我们就认为这个比较严重。
同时,作者也通过实验说明了构造特征矩阵的方法可以有效的对异常进行细粒度分类,简单的来说就是使用较短时间长度构造的特征矩阵重建误差作为判断能够更好的检验出各种持续时间长的误差,而使用较长时间步长构建的矩阵对时间短的异常不敏感,通过比较各层特征矩阵的重建误差就可以获得异常的持续时间,作者也认为这是异常严重程度的度量。
S m l 分别对应三种时间步长,三种都检测出来的话我们就认为持续时间长,较为严重,右边的图也可以看到,数据集中总共5个异常,时间步长为10可以全部检测出来,时间步长为60时只能检测出来一个,三个都检测出来的我们就认为这个比较严重。
接下来是作者对产生异常的原因的分析,作者的做法是把模型对于每一个异常的评分降序排序,排在前几个的就是产生异常的根本原因。可以看到在找异常原因的时候MSCRED表现的也比较优秀。
最后一个实验是作者模拟实际环境加入了许多噪声,可以看到,作者提出的模型的鲁棒性也优于其他的模型。
6.总结
首先这个工作的总体思想还是已经很常见的使用正常的数据来训练自动编码器,然后让待检测的数据输入自动编码器再解码,最后查看与原始数据的误差,误差超过阈值则认为是异常。
创新点:
第一个是把多元时间序列的数据转化成多分辨率特征矩阵,再将特征矩阵作为自动编码器的结构来输入学习正常多元时间序列中的时间与空间的关系,使用特征矩阵能更好的反应各个传感器再空间上的关系,有助于分析产生异常的原因。多分辨率也有助于分析异常的严重程度。
第二个是在网络结构方面,综合使用卷积层,lstm和注意力机制来构造Encoder,使用处理图像分割中的方法,在Decoder中将Encoder输出的特征图与上一级输出级联后再反卷积重建特征图,以此增加网络拟合能力。