首页>>人工智能->用于检测分布外样本和对抗性攻击的可解释 AI (XAI) 设计

用于检测分布外样本和对抗性攻击的可解释 AI (XAI) 设计

时间:2023-11-29 本站 点击:0

介绍

在本文中,我们将讨论无监督深度卷积神经网络的可解释和可解释原型。我们还将讨论基于 lstm 自动编码器的实时异常检测器,用于高维异构/同构时间序列多传感器数据。

此外,我将带您了解MSDA包的新功能。可以在此处的 GitHub 页面上找到更多详细信息。

MSDA v1.10.0 中有哪些新增功能?

MSDA 是low-codePython 中的开源多传感器数据分析库,旨在减少假设,以提供对时间序列多传感器数据分析和实验中的周期时间的洞察。它使用户能够快速有效地执行端到端的概念验证实验。该模块通过捕获变化和趋势来识别多维时间序列中的事件,以建立旨在识别相关特征的关系,帮助从原始传感器信号中进行特征选择。

它还提供了一种在无监督深度卷积神经网络上精确检测实时流数据中的异常的规定。基于 LSTM 自动编码器的检测器旨在在 GPU/CPU 上运行。最后,使用博弈论方法来解释构建的异常检测器模型的输出。

该套餐包括:

时间序列分析。

每个传感器列wrt时间的变化(增加,减少,相等)。

每列的值如何随另一列的 wrt 变化,以及每列的另一列 wrt 之间的最大变化比。

与趋势阵列建立关系以识别最合适的传感器

用户可以选择窗口长度,然后检查每个传感器列的每个窗口的平均值和标准偏差

它为高于或低于阈值的每个传感器列值提供增长/衰减值的计数

特征工程

涉及跨各种聚合窗口的值趋势的特征:平均值的变化和变化率,跨窗口的标准偏差

变化的比率,与标准的增长率。偏差。

随着时间的推移而变化

随时间的变化率

成长或衰退

增长率或衰减率

高于或低于阈值的值计数

**无监督深度时间序列异常检测器。**

**博弈论方法来解释时间序列数据模型。**

MSDA 简单、易于使用且代码量低。主要功能如下图所示:

谁应该使用 MSDA?

MSDA 是一个任何人都可以使用的开源库。我们认为,MSDA 的理想目标受众是:

研究人员进行快速 POC 测试

希望提高生产力的经验丰富的数据科学家

喜欢低代码解决方案的公民数据科学家

数据科学学生

参与构建概念验证项目的数据科学专业人员和顾问

什么是异常?

什么是异常,为什么要关注它?通俗地说,“异常”或“异常值”是数据空间中异常或不符合趋势的数据点。异常检测侧重于识别数据中以某种方式偏离预期或典型的示例。现在,问题是,“您如何定义某事是异常的还是异常值的?”快速、合理的答案是所有那些不跟随样本空间中相邻点趋势的点。

对于任何业务领域,从大量数据中检测可疑模式都非常关键。例如,在银行领域,欺诈交易对银行构成严重威胁和损失/责任。在本文中,我们将尝试学习如何在不事先训练模型的情况下从数据中检测异常,因为您无法在我们不知道的数据上训练模型!这就是无监督学习的整个想法有用的地方。我们将看到用于构建实时异常检测器的两种网络架构,即 a) 深度 CNN b) LSTM AutoEncoder。

这些网络适用于检测范围广泛的异常,即时间序列数据中的点异常、上下文异常和不一致。由于该方法是无监督的,因此不需要异常标签。我们使用未标记的数据来捕获和学习用于预测时间序列正常行为的数据分布。第一个架构受到 IEEE 论文DeepAnT 的启发;它由两个部分组成:时间序列预测器和异常检测器.时间序列预测器使用深度卷积神经网络 (CNN) 来预测定义范围内的下一个时间戳。该组件采用时间序列窗口(用作参考上下文)并尝试预测下一个时间戳。然后将预测值传递给异常检测器组件,该组件负责将相应的时间戳标记为Non-Anomaly或Anomaly。

第二种架构的灵感来自这篇 Nature 论文:Deep LSTM-based Stacked Autoencoder for Multivariate Time Series。

首先让我们简单了解一下什么是自动编码器神经网络。自编码器架构用于以无监督的方式学习有效的数据表示。自编码器包含三个组件:

压缩数据的编码(输入)部分,并在此过程中学习数据集的表示(编码),

处理压缩数据的组件(减小大小),

和解码器(输出)部分,它尽可能接近来自压缩数据的原始输入重构学习到的表示,同时最小化整体损失函数。

因此,只需将数据输入到自动编码器中,就会对其进行编码,然后将其压缩为较小的尺寸,然后将该较小的表示解码回原始输入。

接下来,让我们了解一下为什么 LSTM 适合这里。LSTM代表升翁短期记忆,并且能够学习序列预测问题顺序依赖性的神经网络结构。LSTM 网络是一种循环神经网络(RNN)。

RNN 主要受到梯度消失的影响。梯度包含信息,随着时间的推移,如果梯度消失,那么重要的局部信息就会丢失。这就是 LSTM 的不足之处,因为它有助于记住保存信息的细胞状态。基本思想是 LSTM 网络内部有多个带有训练参数的“门”。其中一些门控制模块的“输出”,其他门控制它们的“遗忘”。

LSTM 网络非常适合基于时间序列数据进行分类、处理和预测,因为时间序列中的重要事件之间可能存在未知持续时间的滞后。

一个LSTM自动编码器是一个的实现自动编码器使用编码器-解码器的序列数据LSTM网络架构。现在我们已经了解了每个网络的基本概念,让我们来看看两个网络的设计,如下所示。

所述DeepCNN由两个卷积层。通常,CNN由一系列层组成,其中包括卷积层、池化层和全连接层。每个卷积层通常有两个阶段。在第一阶段,该层执行称为卷积的数学运算,导致线性激活。在第二阶段,非线性激活函数应用于每个线性激活。

与其他神经网络一样,CNN 也使用训练数据来调整其参数(权重和偏差)来执行学习任务。使用ADAM优化器优化网络参数。内核大小,即过滤器的数量,可以根据数据集进一步调整以更好地执行。此外,可以微调 dropout、学习率等以验证网络的性能。

使用的损失函数是MSELoss(平方 L2 范数),它测量输入“x”和目标“y”中每个元素之间的均方误差。在LSTMAENN由堆叠的多个的LSTM层与input_size在输入x -The数的预期的功能,hidden_size在隐藏的状态h特征的数目, -num_layers等:-The数复发层(1默认)的

有关更多详细信息,请参阅此处。为了避免将数据中检测到的噪声解释为异常的范围,我们可以调整额外的超参数,如“回顾”(时间序列窗口大小)、隐藏层中的单元等等。

无监督深度异常检测器模型

**深度卷积神经网络**

DeepCNN((conv1d_1_layer):Conv1d(10,16,kernel_size=(3,),stride=(1,))(relu_1_layer):ReLU()(maxpooling_1_layer):MaxPool1d(kernel_size=2,stride=2,padding=0,dilation=1,ceil_mode=False)(conv1d_2_layer):Conv1d(16,16,kernel_size=(3,),stride=(1,))(relu_2_layer):ReLU()(maxpooling_2_layer):MaxPool1d(kernel_size=2,stride=2,padding=0,dilation=1,ceil_mode=False)(flatten_layer):Flatten()(dense_1_layer):Linear(in_features=80,out_features=40,bias=True)(relu_3_layer):ReLU()(dropout_layer):Dropout(p=0.25,inplace=False)(dense_2_layer):Linear(in_features=40,out_features=26,bias=True))

**LSTM 自编码器**

LSTMAENN((lstm_1_layer):LSTM(26,128)(dropout_1_layer):Dropout(p=0.2,inplace=False)(lstm_2_layer):LSTM(128,64)(dropout_2_layer):Dropout(p=0.2,inplace=False)(lstm_3_layer):LSTM(64,64)(dropout_3_layer):Dropout(p=0.2,inplace=False)(lstm_4_layer):LSTM(64,128)(dropout_4_layer):Dropout(p=0.2,inplace=False)(linear_layer):线性(in_features=128,out_features=26,bias=True)

现在,我们已经设计了网络架构。接下来,我们将通过下面给出的动手演示来完成进一步的步骤。

入门

1) 安装包

安装 MSDA 的最简单方法是使用 pip。

pipinstallmsdaOR$gitclonehttps://github.com/ajayarunachalam/msda$cdmsda$pythonsetup.pyinstall

笔记本

!pipinstallmsda

2) 导入时间序列数据

在这里,我们将使用这里的气候数据。这个数据集是从几个公共来源编译的。该数据集包括来自 13 个加拿大中心的每日温度和降水量。降水是雨或雪(可能在冬季下雪)。1940 年,13 个中心中有 7 个有每日数据,但到 1960 年,所有 13 个中心都有每日数据,偶尔会出现缺失值。我们有大约 80 年的记录(数据的每日频率),我们希望从这些气候数据中识别异常。如下所示,这些数据有 27 个特征和大约 30K 条记录。

df=pd.read_csv('Canadian_climate_history.csv')df.shape=============(29221,27)

3) 数据验证、预处理等。

我们首先检查缺失值并估算这些缺失值。

Preprocessing & ExploratoryDataAnalysis 类中的函数missing()impute()可用于查找缺失值并填充缺失信息。我们用平均值替换缺失值(因此,众数=1)。这些类中有几个实用函数可用于分析数据集、手动过滤异常值等。此外,提供的其他选项包括日期时间转换、获取数据的描述性统计信息、正态分布测试等。有关更多详细信息,请查看在这里。

'''Imputemissingvalueswithimputefunction(modes=0,1,2,elseusebackfill)0:imputewithzero,1:imputewithmean,2:imputewithmedian,elseimputewithbackfillmethod'''ExploratoryDataAnalysis.impute(df=df,modes=1)

4) 后处理数据输入异常检测器

接下来,我们输入没有缺失值的数据,删除不需要的字段,断言时间戳字段等。在这里,用户可以输入要删除的列及其索引值,也可以使用索引值断言时间戳字段。这将返回两个数据帧;一个将拥有所有没有时间戳索引的数字字段,而另一个将拥有所有带有时间戳索引的数字字段。我们需要使用一个带有时间戳的数据作为进一步步骤的索引。

Anamoly.read_data(data=df_no_na,column_index_to_drop=0,timestamp_column_index=0)

5)用户输入时间窗口大小的数据处理

时间窗口大小(回溯大小)作为data_pre_processing来自 anamoly 类的函数的输入。

X,Y,timesteps,X_data=Anamoly.data_pre_processing(df=anamoly_df,LOOKBACK_SIZE=10)

使用此功能,我们还可以对范围内的数据进行标准化[0,1],然后通过将“时间步长”作为另一个附加维度来修改数据集。思路是将维度的二维数据集从[Batch Size, Features]转化为三维数据集[Batch Size, Lookback Size, Features].,更多细节请查看这里。

6) 选择自定义用户选择输入配置来训练异常模型

使用该set_config()功能,用户可以从深层网络架构中进行选择,设置时间窗口大小,并调整内核大小。可用的模型包括——深度卷积神经网络和 LSTM 自动编码器,它们可以分别给出可能的值deepcnnlstmaenn。我们选择时间序列窗口size=10并使用 3 的内核大小作为卷积网络。

MODEL_SELECTED,LOOKBACK_SIZE,KERNEL_SIZE=Anamoly。set_config(MODEL_SELECTED='deepcnn',LOOKBACK_SIZE=10,KERNEL_SIZE=3)==================MODEL_SELECTED=deepcnnLOOKBACK_SIZE=10内核大小=3

7) 训练选定的异常检测器模型

可以根据可用性使用 GPU/CPU 训练模型。如果可用,计算功能将使用 GPU,否则将使用 CPU 资源。在谷歌协同合作采用NVIDIA TESLA K80这是最最受欢迎的GPU,而NVIDIA TESLA V100是第一张量核GPU。训练的 epoch 数可以自定义设置。正在使用的设备将在控制台上输出。

Anamoly.compute(X,Y,LO0KBACK_SIZE=l0,num_of_numerical_features=26,MODEL_SELECTED=MODELSELECTED,KERNELSIZE=KERNELSIZE,epocs=30)=================================================TrainingLoss:0.2189370188678473-Epoch:1TrainingLoss:0.18122351250783636-Epoch:2TrainingLoss:0.09276176958476466-Epoch:3TrainingLoss:0.04396845106961693-Epoch:4TrainingLoss:0.03315385463795454-Epoch:5TrainingLoss:0.027696743746250377-Epoch:6TrainingLoss:0.024318942805264566-Epoch:7TrainingLoss:0.021794179179027335-Epoch:8TrainingLoss:0.019968783528812286-Epoch:9TrainingLoss:0.0185430530715746-Epoch:10TrainingLoss:0.01731374272046384-Epoch:11TrainingLoss:0.016200231966590112.-Epoch:12TrainingLoss:0.015432962290901867-Epoch:13TrainingLoss:0.014561152689542462-Epoch:14TrainingLoss:0.013974714691690522-Epoch:15TrainingLoss:0.013378228182289321-Epoch:16TrainingLoss:0.012861106097943028-Epoch:17TrainingLoss:0.012339938251426095-Epoch:18TrainingLoss:0.011948177564954476-Epoch:19TrainingLoss:0.011574006228333366-Epoch:20TrainingLoss:0.011185694509874397-Epoch:21TrainingLoss:0.010946418002639517-Epoch:22TrainingLoss:0.010724217305010896-Epoch:23TrainingLoss:0.010427865211985524-Epoch:24TrainingLoss:0.010206768034701313-Epoch:25TrainingLoss:0.009942568653453904-Epoch:26TrainingLoss:0.009779498535478721-Epoch:27TrainingLoss:0.00969111187656911-Epoch:28TrainingLoss:0.009527427295318766-Epoch:29TrainingLoss:0.009236675929400544-Epoch:30

8) 发现异常

训练完成后,下一步就是发现异常。现在,这让我们回到了我们的基本问题,即我们如何准确地估计和追踪什么是异常?可以使用 Anomaly Score、Anomaly Likelihood和一些最近开发的指标,如基于Mahalanobis 距离的置信度得分。所述马哈拉诺比斯置信度得分假定的预训练神经分类器的中间特性遵循类条件高斯分布,其协方差并列所有分布,置信度分数为一个新的输入被定义为马氏距离从最近的类条件分布。

异常分数是未正确预测的活动列的分数。相反,异常可能性是给定异常分数代表真正异常的可能性。在任何数据集中,都会有一个自然的不确定性水平,这会在预测中产生一定数量的“正常”错误。异常可能性解释了这种自然水平的错误。由于我们没有真实异常标签,所以在我们的例子中,我们不能使用这个指标。的find_anamoly()用于通过产生的假设和计算损失,这是用于在数据集中给定个体时间戳异常置信度分数来检测异常。

LSTMAENN((lstm_1_layer):LSTM(26,128)(dropout_1_layer):Dropout(p=0.2,inplace=False)(lstm_2_layer):LSTM(128,64)(dropout_2_layer):Dropout(p=0.2,inplace=False)(lstm_3_layer):LSTM(64,64)(dropout_3_layer):Dropout(p=0.2,inplace=False)(lstm_4_layer):LSTM(64,128)(dropout_4_layer):Dropout(p=0.2,inplace=False)(linear_layer):线性(in_features=128,out_features=26,bias=True)0

9) 用置信度绘制样本:DeepCNN 示例

接下来,我们需要对异常进行可视化;样本为每个时间戳记录分配了异常置信度分数。该plot_anamoly_results函数可用于绘制关于频率(箱)的异常分数和每个时间戳记录的置信度分数。

LSTMAENN((lstm_1_layer):LSTM(26,128)(dropout_1_layer):Dropout(p=0.2,inplace=False)(lstm_2_layer):LSTM(128,64)(dropout_2_layer):Dropout(p=0.2,inplace=False)(lstm_3_layer):LSTM(64,64)(dropout_3_layer):Dropout(p=0.2,inplace=False)(lstm_4_layer):LSTM(64,128)(dropout_4_layer):Dropout(p=0.2,inplace=False)(linear_layer):线性(in_features=128,out_features=26,bias=True)1

从上图中,可以假设异常置信度得分大于或等于 1.2 的时间戳/实例很可能是偏离预期或典型的示例,因此可以视为潜在异常。

10) 异常检测器预测的可解释结果——DeepCNN

最后,设计了用于构建时间序列预测器的可解释 AI原型。在我们完成这一步之前,让我们了解可解释模型/可解释模型需要什么。

为什么可解释人工智能 (XAI) 是当下的热门话题和需求?

数据无处不在,机器学习可以挖掘它以获取信息。如果机器学习模型产生的结果也可以被人类轻松理解、解释和信任,表示学习将变得更有价值和高度重要。这就是可解释人工智能的用武之地,从而使事情不再是一个黑匣子。

explainable_results()使用博弈论的方法来解释模型的输出。为了在个体/样本级别理解、解释和信任深层模型的结果,我们使用Kernel Explainer。Shapley 值的基本属性之一是,它们总是总结出所有玩家都在场时的游戏结果与没有玩家在场时的游戏结果之间的差异。对于机器学习模型,这意味着所有输入特征的 SHAP 值总和等于基线(预期)模型输出与正在解释的预测的当前模型输出之间的差异。

explainable_results函数采用要解释的特定行/实例/样本预测的输入值。它还需要输入特征的数量 (X) 和时间序列窗口大小差异 (Y)。我们可以在单个实例级别以及批量数据大小(例如前 200 行、最后 50 个样本等)上获得可解释的结果。

LSTMAENN((lstm_1_layer):LSTM(26,128)(dropout_1_layer):Dropout(p=0.2,inplace=False)(lstm_2_layer):LSTM(128,64)(dropout_2_layer):Dropout(p=0.2,inplace=False)(lstm_3_layer):LSTM(64,64)(dropout_3_layer):Dropout(p=0.2,inplace=False)(lstm_4_layer):LSTM(64,128)(dropout_4_layer):Dropout(p=0.2,inplace=False)(linear_layer):线性(in_features=128,out_features=26,bias=True)2

上图是第10个示例/样本/记录/实例的结果。可以看出,对相应异常置信度得分结果贡献显着的特征是来自温哥华、多伦多、萨斯卡通、温尼伯和卡尔加里气象站的温度读数。

重要资源

示例无监督特征选择演示笔记本

示例无监督异常检测器和可解释的 AI 演示笔记本


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/AI/960.html