# Anomaly detection **Repository Path**: conjurer/anomaly-detection ## Basic Information - **Project Name**: Anomaly detection - **Description**: 用于多变量时间序列数据中无监督异常检测和诊断的深度神经网络 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2024-08-20 - **Last Updated**: 2024-09-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 工业物联网时间序列包含不同的尺度模式,例如,电力需求数据呈现每日重复和每周重复,但大多数时间序列异常检测模型只能获取特定尺度的特征,忽略了由于不同尺度带来的影响 且工业物联网中的异常大多呈现出变化早、发育慢、振幅小等特点,这些早期故障的准确诊断需要长序列建模的能力,而这些模型在实际应用中无法记住序列之间的所有历史信息。再者,尽管以往的多元时间序列异常检测方法都考虑了时间依赖性,包括支持向量回归、贝叶斯模型、自回归综合移动平均和基于循环神经网络的模型,这些方法可以捕捉到时间维度上的动态变化,但忽略了不同时间序列之间的空间依赖性 目前基于深度学习的异常检测方法学习多尺度特征存在不足以及对时空关系拟合不够 备注:农业物联网中的物联数据存在时空关系,例如时间存在多维度:每日、每周的数据;例如空间跨地区: 学习多尺度特征的不足 1. 作物生长阶段的多尺度特征: ○ 农作物在其生长周期中会经历不同的阶段,每个阶段对环境因素的需求和响应也不同。例如,在幼苗期,作物对水分的需求较为敏感;而在成熟期,则可能更关注光照和温度。深度学习模型需要能够捕捉这些不同生长阶段下的多尺度特征,但目前许多模型在这方面的表现仍显不足。 2. 传感器数据的多尺度性: ○ 传感器数据往往包含多种尺度的信息,如长期趋势(如季节变化)、中期波动(如天气变化)和短期噪声(如测量误差)。深度学习模型在处理这些数据时,往往难以同时有效地提取和融合这些多尺度的信息。 对时空关系拟合不够 1. 空间特征的局限性: ○ 农业物联网中的传感器通常分布在农田的不同位置,形成了空间上的分布。然而,现有的深度学习模型在处理这些空间分布的数据时,往往忽略了不同位置之间的空间关系,如土壤湿度在不同位置之间的传播和相互影响。 2. 时间特征的缺失: ○ 农作物生长是一个时间过程,不同时间点的环境数据对作物生长的影响是相互关联的。然而,深度学习模型在处理时间序列数据时,往往更侧重于当前时间点的数据,而忽视了历史数据对当前状态的影响。这导致模型在拟合时空关系时表现不佳,难以准确预测作物的生长状态和趋势。 改进建议 1. 多尺度特征提取与融合: ○ 研究和开发适用于农业物联网的多尺度特征提取和融合方法。例如,可以采用金字塔结构或特征金字塔网络(FPN)来捕捉不同尺度的特征,并通过特征融合来提高模型的鲁棒性和准确性。 2. 时空关系建模: ○ 引入时间卷积网络(TCN)、长短时记忆网络(LSTM)等时间序列分析工具来增强模型对时间特征的捕捉能力。同时,结合空间关系建模方法(如图神经网络GNN),以更好地拟合时空关系。 3. 增加训练数据和模型复杂度: ○ 通过增加训练数据的多样性和数量来提高模型的泛化能力。同时,提高模型的复杂度(如增加网络层数、使用更复杂的网络结构等)以增强其对多尺度特征和时空关系的拟合能力。但需注意防止过拟合现象的发生。 多尺度时空特征融合 首先通过图注意力网络捕获多个时间序列之间的相关性,并通过双向长短期记忆神经网络在获取时间序列之间相关性的基础上捕获时间序列的时间特征,进而更好地生成多元时间序列的时空关系特征 同时,充分考虑到工业物联网时间序列特征的多尺度特性,使用多尺度门控时间卷积网络提取时间序列的多尺度时序特征,并通过双仿射模块实现多尺度时序特征和双向时空特征的有效融合并产生潜变量的均值和方差,以完成对输入数据的编码操作。最后,本文采用门控循环单元堆叠两个全连接层作为解码器,通过解码器以获取最终重构结果,并利用变分自编码器结合对抗训练的方式有效解决传统自编码器模型易受训练数据噪声影响而导致模型性能低下的问题 主要贡献(技术的好处) 1、综合考虑了工业物联网多元时序数据序列间的时空复杂特征关系,通过图注意力机制使得本文模型可在无任何先验知识的情况下成功捕捉不同时间序列之间的相关性,避免了模型因特定传感器受噪声影响而降低模型整体准确率的问题。 2、设计了多尺度门控提取时间序列的多尺度时序特征,充分考虑到了工业物联网时间序列特征的多尺度特性,并提出了基于多尺度时序特征和双向时空特征融合的双仿射模块,实现了多尺度时序特征和双向时空特征的深度融合。 3、提出了结合对抗训练的变分自编码器来放大异常的重构误差,有效地解决了传统自编码器模型易受训练数据噪声影响而导致模型性能低下的问题。在Occupancy数据集上的实验,与其他最优方法相比性能提升 基于深度学习的无监督异常检测模型,现有的深度学习方法可以分为基于预测的方法和基于重构的方法两种 基于重构的方法 将正常数据点压缩为低维表示,再基于这些压缩编码表示重构为原始数据。即通过将数据映射到低维空间中,以最小重构误差提取正常数据中的重要信息。一般来说,异常通常包含一些不具代表性的特征,因此很难在不损失信息的情况下将其映射到低维空间中,异常通常意味着较大的重构误差,进而实现异常检测 模型构建 双向时空特征提取模块 基于GAT的空间特征提取; 工业物联网的时间序列之间的相关性难以通过先验的方式获取;将滑动窗口划分后的多元时间序列视为一个完全图,其 中每个节点代表某个特征,每条边表示两个对应特征之 间的关系,并通过图注意力神经网络来捕捉相邻节点之 间的关系 前向传播中,GAT层会对输入特征进行线性变换,然后通过注意力分数来加权这些特征,从而得到加权后的特征表示 基于BiLSTM的时间特征提取 为了捕获时间序列中的时间依赖性,在 GAT 获取不同序列之间的相关性后,使用BiLSTM捕获时序数据的双向时序特征。BiLSTM由两个输入方向相反的LSTM隐藏层组 成,在这种结构下,先前和未来的信息在输出层均可被利用,因此本文将 GAT 得到的输出序列输入前向和后向 LSTM,分别生成隐藏状态 ht f 和 hbt ,并将其合并生成最终的隐藏状态作为时间特征表示 xt ts : 包含2个LSTM层,分别处理正向和反向的时间序列数据。正向LSTM处理时间序列从当前时间点到未来时间点的信息,而反向LSTM则处理从当前时间点到过去时间点的信息。 这样BI LSTM能同时捕获时间序列数据中的时间依赖性和时间序列的全局上下文信息。 工作流程 ● 输入: 模块接收时间序列数据作为输入,这些数据通常是一个序列化的张量,其中包含了多个时间步长和每个时间步长的特征。 ● GAT处理: 输入数据首先通过GAT层,该层捕获不同时间步长之间的关系,生成一个加权的特征表示。 ● Bi-LSTM处理: GAT层的输出接着被送入Bi-LSTM层,该层进一步捕获时间序列数据中的动态时序特征。 ● 输出: Bi-LSTM层的输出是一个包含了丰富时空信息的特征表示,这些特征可以被用于后续的异常检测或其他分析任务。 多尺度特征提取模块 为获取不同尺度的时间依赖性,利用具有不同 卷积核大小的多个 TCN 构建多尺度时间序列层,通过 不同尺度的 TCN构建不同尺度的特征图来提取多尺度特征 多尺度特征提取模块(Multi-Scale Feature Extraction Module)的设计目的是为了捕获时间序列数据中的不同时间尺度上的模式和特征。在处理时间序列时,数据可能包含从短期波动到长期趋势的多种时间尺度的信息 工作流程 ● 输入: 模块接收时间序列数据作为输入,这些数据通常是一个序列化的张量。 ● 多尺度卷积: 使用多个卷积核大小的卷积层来提取不同尺度的特征。较小的卷积核捕获短期模式,而较大的卷积核捕获长期模式。 ● 门控处理: 每个卷积层的输出通过门控机制,以选择性地保留或遗忘信息。 ● 特征融合: 从不同尺度捕获的特征可能会通过某种融合技术(如加权和、拼接或更复杂的融合策略)来组合,形成综合特征表示。 双放射特征融合编码模块 1. 特征融合的目的: ○ 在许多任务中,模型可能需要同时考虑来自不同来源的特征,例如,从不同传感器收集的数据或从同一数据源提取的不同尺度的特征。 ○ 特征融合有助于整合这些信息,以便模型可以更全面地理解输入数据。 举个例子 假设我们正在处理一个时间序列异常检测任务,我们有两个特征提取模块的输出:一个是多尺度特征提取模块(例如,多个不同窗口大小的卷积神经网络),另一个是双向时空特征提取模块(例如,带有图注意力机制的Bi-LSTM)。 这两个模块的输出可能是不同维度的特征向量,我们的目标是将这些特征融合到一起,以获得一个编码表示,这个表示可以捕捉到时间序列的多尺度和双向时空特征。 双解码器模块 使用Tensorflow复现 文件说明 matrix_generator.py : 生成签名矩阵,用于存储和表示时间序列数据中的某些特征或模式 在这个特定的上下文中,签名矩阵用于以下目的: 1. 特征提取:从原始的时间序列数据中提取有用的特征,这些特征能够代表数据的重要属性。 2. 多尺度分析:通过使用不同的时间窗口大小,脚本能够捕获时间序列在不同时间尺度上的行为。 3. 成对相似性计算:脚本计算时间序列片段之间的成对相似性或相关性,这通常涉及到计算两个序列片段的点积,并可能通过这种方式来评估它们之间的相似度。 4. 数据重构准备:生成的签名矩阵可以用于深度学习模型的训练阶段,帮助模型学习如何重构正常的数据模式,并识别异常模式。 5. 异常检测:在时间序列数据中,异常点或异常行为可能表现为与正常模式显著不同的模式。通过比较重构的数据和实际数据之间的差异,可以检测出这些异常。 6. 模型训练和测试:生成的签名矩阵作为输入数据,用于训练和测试深度学习模型(如MSCRED),以评估模型在异常检测任务上的性能。 代码分析 ● generate_signature_matrix_node 针对节点类型的时间序列数据,生成多尺度的签名矩阵。它首先对数据进行归一化处理,然后计算不同窗口大小下的时间序列片段之间的成对相似性,并将结果保存为Numpy数组。 ● generate_signature_matrix_link 针对链接类型的时间序列数据,生成签名矩阵。这个函数首先清洗和标准化链接数据,然后计算链接之间的成对相似性,并将结果保存。 主要流程 1. 读取数据 a. 程序首先从一个文件中读取数据。这些数据是一堆数字,每个数字代表一个传感器在某个时间点的读数 2. 准备数据 a. 归一化,分布到0-1之间,这样不同传感器的数据可以在相同的尺度上比较了 3. 转置数据 a. 将数据的形状调整一下,让每一列代表一个传感器的所有时间点的数据 4. 生成签名矩阵 a. 程序根据设定的时间窗口大小,计算每个时间窗口内,每一对传感器数据的相似度。这里的相似度是通过计算两个时间序列的点积,然后除以时间窗口的大小来得到的 5. 填充矩阵 a. 每一对传感器都会生成一个相似度数值,并将这个数值填入到签名矩阵中的对应位置。 6. 保存结果 7. 清理并重复 ConvLSTM层 ● 创建ConvLSTM层:ConvLSTM是一种特殊的网络单元,它结合了卷积层的特征提取能力和LSTM的记忆力 ● 动态RNN: ● 注意力机制:帮助模型关注最重要的部分 ● 计算注意力权重 ● 重构输出:根据注意力权重调整数据的形状