AI异常检测方案实施-基于基准块的无监督学习

13 篇文章 1 订阅
12 篇文章 1 订阅

前言

上文讲到AI异常检测的几种方案规划,点击查看

由于我们只有“正确答案”,因此当前最符合的做法是使用autoencoder做无监督学习。

实施方案

  1. 背景
    在网络设备配置、网络安全审计等场景中,配置文件的准确性和一致性至关重要。配置的错误或异常变动可能导致网络安全隐患和运营风险。通常情况下,设备配置块的内容有一定的“正常”格式和参数范围,若发生异常变化,则需及时检测并处理。
    本方案旨在通过无监督学习的方法,利用大量的“基准块”数据,构建一个AI稽核系统,实现自动化的配置块异常检测。方案主要基于自编码器(Autoencoder)模型进行训练和检测,确保在缺乏明确异常数据的情况下,也能对新的配置块进行异常判断。
  2. 目标
  • 利用已有的基准块数据,训练一个自编码器模型,使其学习基准块的“正常”特征。
  • 在新的配置块输入时,自动判断其是否存在异常,并找出异常行及异常置信度。
  • 实现一种灵活、可扩展的无监督学习方法,适用于多种配置块类型。
  1. 实施方案
    3.1 数据预处理
    为了确保模型的准确性,数据预处理是关键的一步。基准块中的每一行配置都需要被转换成模型可接受的输入特征。
    3.1.1 基准块集合准备
  • 收集各设备的配置块(如块)的多种“正常”配置,作为基准块的集合。这些基准块构成训练模型的输入数据,代表了不同设备配置的正确状态。
    3.1.2 特征提取
  • 文本嵌入:使用预训练的BERT模型或其他文本嵌入模型,将每一行配置转换为固定维度的向量表示。每行配置内容将被编码为一个768维的嵌入向量。
  • 位置特征:为每行配置添加其在块中的位置,以捕获配置的顺序信息。可以简单地将行号作为一个特征值,附加到嵌入向量上。
    3.1.3 数据集构建
  • 块级特征矩阵:将一个配置块中所有行的嵌入向量拼接起来,形成块级特征矩阵,作为模型的输入。例如,一个包含10行的块将生成一个10×768的矩阵。
    3.2 模型设计
    我们选择使用**自编码器(Autoencoder)**模型来进行无监督异常检测。自编码器可以学习输入数据的特征,将其压缩到低维空间,再还原出来。基准块可以训练模型,使其能很好地还原“正常”配置,而对异常配置的还原误差会较大。
    3.2.1 自编码器结构
  • 输入层:每个配置块的特征矩阵(N×768,N为行数)。
  • 编码器:由多层全连接神经网络组成,将输入特征压缩到低维的潜在空间。
  • 解码器:将低维特征映射回到原始特征空间,生成与输入类似的输出。
  • 输出层:与输入块的特征矩阵相同,用于计算重构误差。
    3.2.2 模型训练
  • 训练数据:使用所有收集的基准块特征矩阵进行训练。目标是让自编码器学习如何压缩和还原这些“正常”配置块。
  • 损失函数:使用均方误差(MSE)来衡量输入与输出之间的差异,最小化该误差。
  • 训练过程:对基准块进行多次迭代训练,直到模型能够较好地重构所有输入。
    3.3 异常检测
    在训练完成后,使用该自编码器模型对新的配置块进行检测,主要步骤如下:
    3.3.1 输入新块
  • 将新的配置块按照与基准块相同的方式进行预处理,提取特征矩阵。
    3.3.2 计算重构误差
  • 将预处理后的块特征输入到自编码器中,获取模型的重构输出。
  • 计算新块特征矩阵与重构输出之间的误差(MSE),该误差反映了新块与基准块之间的差异程度。
    3.3.3 异常判定
  • 块级异常:设置一个全局重构误差阈值。若新块的整体误差超过阈值,则判定为异常块。
  • 行级异常:逐行计算重构误差,找出每一行的异常程度,并根据误差大小确定异常置信度。可以为每行设置一个局部阈值,若某行的重构误差超过阈值,则标记为异常行。
    3.4 输出异常信息
  • 若判定一个配置块为异常,输出该块的异常行以及每行的异常置信度。
  • 异常信息格式示例:
    json
    复制代码
    {“block_name”: “aaa”,“is_anomalous”: true,“anomalous_lines”: [{“line_content”: “aaa-authorization-template 2003”,“confidence”: 0.85},{“line_content”: “aaa-authorization-type local”,“confidence”: 0.72}]}
    3.5 异常阈值的确定
  • 在模型训练后,需要使用验证集(从基准块中划分一部分数据)来确定异常检测的阈值。可以通过验证集的误差分布,选择一个合理的阈值,确保正常的配置块被识别为正常,而异常块能被准确检测出。
  1. 实施步骤
  2. 数据收集:收集多种基准配置块,准备数据集。
  3. 数据预处理:使用预训练的BERT模型提取配置块的行级别特征,构建块级特征矩阵。
  4. 模型训练:利用基准块特征训练自编码器模型,学习正常块的特征。
  5. 阈值确定:使用验证集确定块级和行级异常检测的误差阈值。
  6. 异常检测:将新的配置块输入模型,计算重构误差,判定是否异常,并输出异常行及其置信度。
  7. 持续改进:不断收集新的配置块,优化预处理、特征提取方法,提高模型的检测准确性。
  8. 优化与扩展
  • 多块类型检测:可以针对不同类型的配置块(如块)构建多个自编码器模型,分别进行训练和检测。
  • 异常解释性:结合基于规则的方法,对模型检测出的异常进行解释,辅助人工稽核。
  • 持续学习:通过将检测到的异常块交由人工审核,积累更多数据,不断优化模型。

训练注意事项

对于基准块的数量,没有严格的下限要求,但为了让无监督模型(如自编码器)有效地学习配置块的正常特征,通常需要一定数量的基准块,以便模型能够捕捉到配置块中的变动范围和特征模式。以下是一些关于基准块数量的建议:

  1. 最小数量建议
  • 最低 10-20 个基准块:对于相对简单的配置块(变化较少、行数较少),可能只需要 10 到 20 个基准块就可以开始训练模型,捕捉到最基本的正常特征。
  • 更复杂的块:如果配置块的结构复杂,或者不同块之间的变动较大,建议至少准备 50-100 个基准块,以确保模型能充分学习到不同的“正常”模式。
  1. 基准块数量的影响
  • 块数量越多,模型越稳健:更多的基准块可以让模型学到更广泛的配置变化范围,从而更好地识别异常。尤其是在有多种“正常”配置块的情况下,数量多的基准块能够提供更多的样本来训练模型,让模型区分正常变动和异常变动的能力更强。
  • 过少的基准块可能导致过拟合:如果基准块数量过少,模型可能会过拟合于这些块,而不能很好地泛化到新的配置块上,导致误报异常。
  1. 增强数据的策略
    如果很难收集到足够多的基准块,可以考虑以下数据增强策略:
  • 插入变动:人为在已有的基准块中加入一些合理的变动,生成更多的基准块。例如,将参数值在合理范围内进行随机变化(如 IP 地址、端口号等)。
  • 模糊匹配:对于类似的配置项,随机调整顺序或增加一些额外的配置,以模拟真实环境中可能出现的多样性。

接下来就是代码实现,实际只要选好了相关的模型、使用流程、损失函数,训练基本就没太大偏差了。有兴趣可以关注,留言交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gallonyin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值