FlowTransformer

本文介绍基于Transformer的NIDS方法,使用基于流的网络数据,减少分析量。阐述Net - flow背景,构建基于Transformer的NetFlow框架。详细介绍FlowTransformer框架,包括组件、实现步骤,如数据集摄入、预处理等,还提及模型训练、评估指标、超参数等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于transformer的NIDS的方法

FlowTransformer允许替换各种Transform组件,包括输入编码、transformer、分类头部、数据集,对基于transformer的NIDSs进行评估

发现是分类头部的选择对模型的性能影响最显著

  1. 引言

Transformer架构用于捕获各种类型序列数据中的复杂模式和关系(各种数据类型),数据捕获成数据包或流的序列

使用基于流的网络数据

  • 减少分析的数据量,使其具有扩展性,有助于处理大量的网络流量
  • 大多数网络都已经运行基于流的收集器

  1. Net-flow背景

本文使用netflow版本,以此进行网络流量的收集以及监控协议,也可以用其他流标准IPFix和SFlow

  1. 用于NIDS的transformer

基于transformer的NetFlow框架:将netflow导出器聚合的流输入到transformer模型来为每个记录进行分类

基本的transformer分为三个部分:输入编码器、transformer、输出头部

输入编码:

将文本输入进来转换成一系列固定长度的向量以便transformer模型处理(GPT模型使用变体的字节实现)。NIDS中就是让网络流转换为向量。输入编码器在不断学习然后继续编码

Transformer块:

一堆transformer块组成,每个块都执行转换,这些块可以使编码器或者解码器,编码器块主要是将输入序列转换为固定长度的特征表示,解码器块接收特征表示输出一个序列。NIDS里,编码器块将每个流转化为固定长度的特征向量,解码器块将特征向量输出成流记录。传统的是一堆编码器和一堆解码器,但在NIDS中,由于输入流输出的是单个分类输出,故解码器对可以替换成分类头,比如BERT就是只用了编码器,GPT只用的解码器

分类头:

输入输出都是序列,NIDS中输出的是分类

  1. flowtransformer框架

flowtransformer组件有预处理技术、输入编码、transformer块、分类头.

(1)数据预处理:数据预处理这些表格有两种方法(性能最高的是限制频率的独热编码)

      1. 分类字段单独编码,将其转换为具有上下文含义的连续向量,将这些向量与数值字段连接起来形成特征向量
      2. 同时嵌入所有字段,同时处理数值和分类字段,分类字段可用独热编码然后与数值链接传递给编码层

(2)输入编码

  流记录:表格数据,每个流的字段是已知且固定的,该数据包包含数值字段和分类字段。

  输入编码将每个流转换为可被transformer处理的特征向量,不同的分类类型输入编码也要适当处理,确保生成的特征向量捕获了transformer要使用的相关信息。

此步骤对分类字段编码的方法:(都是降维)

  • 查找的嵌入层:查找嵌入层将分类输入的唯一值映射到连续特征向量集,训练时学习向量的值
  • 密集的嵌入层:将分类输入用非线性转换映射到特征向量,本质上是有激活函数的单层神经网络,训练时学习转换
  • 投影层:分类输入现行转换成特征向量

此步骤对分类+数值→记录级别的方法:(流记录的数值部分有共享信息部分,故将整个留记录嵌入到编码器中)

    • 记录级别嵌入→密集:分类字段用独热编码,并于数值字段链接传递给嵌入层,将最后的记录映射到连续的特征向量
    • 记录级别投影:先行转换分类字段能省略了非线性的激活和偏差,其余跟嵌入相同

其他方法:无编码:少量特征的流,分类字段如果进行独热编码,由于流已经经过了预处理,故可直接传递给transformer

(3)transformer模型

比较了四种transformer 架构:浅编码器、浅解码器、深编码器、深解码器(深浅的区别在于深度、注意力头数、内部大小)

浅模型基于基本的多头自注意力模型,并包含2-6个编码或解码器块。

深编码器考虑了两种特定的模型GPT2.0和未遮蔽的BERT。虽然都使用了缩放点积注意力,但BERT注意机制是双向的,GPT只有前面的单向标记

A.GPT2.0→深解码器:12个解码器块,每个块的输入作为下一个块的输出,它的学习是根据输入序列和先前生成的单词的组合生成下一个单词。将输入提示也作为序列的一部分,将每个单词作为上下文的一部分来生成输出,从而预测后续单词

B.BERT→深编码器:bert的设计主要是用于自然语言理解任务而不是文本生成,这个模型进行训练,用来执行掩码语言建模和预测两个句子是否连续。输入序列通过编码器堆进行处理,最后生成序列的固定长度表示

(4)分类头选项

Transformers是序列到序列的模型,故要将序列输出操作传递到MLP中,然后转化为NIDS的分类结果。但是序列长度的增加,参数数量成指数级增长,故需要在传递到MLP之前特征向量要被展平

NLP分类的方法:①全局平均池化:对特征向量中整个序列上的该值的平均值。在流的情况下,如果只有序列中最后一个流正在被分类,那么对先前流的上下文平均,那么不是一个好方法        ②时间分布式:模型对序列中不同的流赋予不同的权重。NIDS的分类任务中,只关注最后一个流的类别,故transformer仅仅使用最后一个上下文嵌入就可以,然后将其用作分类头的输入

执行多个任务的模型,引入一个特殊的标志,指示模型执行特定的任务,故在流序列末尾标记分类,使用transformer相应输出来执行分类来测试在NIDS领域的有效应。优点是泛化性好

  1. 实现

Flowtransformer框架包括几个可互换的模块,形成一个处理管道。一下是flowtransformer组件

  1. 数据集摄入:

该组件可容纳任何表格数据集,与各种流量数据格式兼容,也会自动处理超过范围或者缺失的值。因为要应用与特定数据集,所以必须要提供数据及规范,首先要列出数据集的分类和数值特征,供预处理和输入编码阶段使用,还要规范训练的类别列出来和良性流量标签,用于识别恶意和合法流量。提供数据规范后,flowtransformer就可以在后续阶段摄入数据集而无需编码

  1. 预处理

收到数据集后,flowtransformer加载并分割用于预处理训练与评估拆分。本文以90%和10%来划分。预处理先适用训练数据(训练期间没有信息泄漏到评估数据集),在应用于整个数据集。并且跟读输入编码器的要求,对分类变量进行独热编码或整数编码,对N个最常见的分类特征进行编码,取完对数后对数值特征进行最小-最大缩放

  1. 模型管道

Transformer的模型,构建为TensorFlow模型,可以独立编译和训练,有输入编码器、输出编码器、transformer

    • 输入编码器

通过上述说的分类方法将数据转换为适合transformer的编码格式

    • transformers

可替换任何一个模型

    • 输出编码器

分类头接受输出,并转换为分类,支持二元以及多元分类

  1. 训练+评估支持

为了更快加载数据集,需要优化,从而使超参数搜索更快

  1. 方法论:

收集结果时,执行一个网格搜索。本文的维度:输入编码、transformers块类型,transformer深度、transformer前馈大小、注意力头数、分类头、学习率

  1. 模型训练和网格搜索

对目标空间进行网格搜索时,至少重复每个实验3次,选择最佳重复的结果。模型训练使用早停法(模型调优,防止过拟合,提升泛化能力)和一次迭代限制。早停设置为5次迭代的耐心等待,最大迭代次数限制为20。使用Adam优化器(自适应学习率优化算法,自动调整学习率,适应不同的数据分布和模型结构)进行训练,参数在论文中定义,学习率在实验中指定

  1. 数据集

NSL-KDD

UNSW-NB15

CSE-CIC-IDS2018

  1. 评估指标

F1分数(主要指标)、误报率、检测率,使用TP/TN/FP/FN训练

  1. transformer超参数

除了比较输入编码方法和分类头外,还有各种transformer配置及相应的超参数

  1. 推断时间和训练时间

GPU清空,从a warm TensorFlow状态开始计时,训练时间通过,计时每个批次 来衡量,再除以 批次大小,并将训练过程中使用的 所有批次 求平均,使用的是TensorFlow的“train on batch”函数

【资源说明】 基于动态图神经网络的异常流量检测Python源码+项目说明+详细注释.zip 将下载的数据集放在 `/data` 目录下。对于CSE-CIC-IDS 2018数据集,只使用“Thuesday-20-02-2018_TrafficForML_CICFlowMeter.csv”这一天的数据,因为其他数据文件不包含IP,无法建图。 动态图模型的作用在于进行子图嵌入,子图嵌入的结果可以用异常检测模型进行异常判断。 其他对比模型的代码在`/compare_models`目录下 ## 模型训练 基于cic2017数据集进行模型训练 python DyGCN/main.py --mode train --ck_path DyGCN/savedmodel/model.pt --embs_path DyGCN/data/graph_embs.pt --dataset data/cic2017 ## 模型测试 基于cic2017数据集进行模型测试 python DyGCN/main.py --mode test --ck_path DyGCN/savedmodel/model.pt --embs_path DyGCN/data/graph_embs.pt --dataset data/cic2017 ## 异常检测 基于模型图嵌入结果进行异常检测 python DyGCN/intrusion_detection.py --dataset cic2017 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,也适用于小白学习入门进阶。当然也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或者热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载,沟通交流,互相学习,共同进步!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值