【深度学习】Transformer分类器,CICIDS2017,入侵检测

文章目录

      • 1 前言
      • 2 什么是入侵检测系统?
      • 3 为什么选择Transformer?
      • 4 数据预处理
      • 5 模型架构
        • 5.1. 输入嵌入层(Input Embedding Layer)
        • 5.2. 位置编码层(Positional Encoding Layer)
        • 5.3. Transformer编码器层(Transformer Encoder Layer)
        • 5.4. 解码层(Decoder Layer)(非Transformer的解码器)
        • 5.5.模型的前向传播(Forward Pass)
      • 6 模型训练
      • 7 结果和分析
      • 全部代码

1 前言

随着网络攻击的日益猖獗,保护网络安全变得愈发重要。传统的入侵检测系统(IDS)在应对复杂和多变的攻击模式时显得力不从心。为了应对这一挑战,我们提出了一种基于Transformer的入侵检测系统,以提高检测精度和鲁棒性。

2 什么是入侵检测系统?

入侵检测系统(IDS)是一种监控网络流量、识别和响应潜在安全威胁的工具。它们通过分析流量模式来检测异常行为,从而保护网络安全。然而,随着攻击技术的不断进化,传统的IDS面临着识别新型和复杂攻击的挑战。

CICIDS2017数据集介绍:
https://blog.csdn.net/yuangan1529/article/details/115024003

CICIDS2017数据集下载:
http://205.174.165.80/CICDataset/CIC-IDS-2017/Dataset/CIC-IDS-2017/PCAPs/

下载这个即可:
在这里插入图片描述

3 为什么选择Transformer?

Transformer模型最初由Vaswani等人在自然语言处理(NLP)领域提出,以其在处理序列数据方面的优越性能而闻名。与传统的循环神经网络(RNN)和长短期记忆网络(LSTM)相比,Transformer能够更高效地捕捉序列数据中的长距离依赖关系。这一特性使其在网络流量分析中表现出色。

4 数据预处理

我们首先对数据进行了充分的预处理。我们使用了CICIDS2017数据集,这是一个广泛用于网络入侵检测研究的标准数据集。数据预处理步骤包括:

  1. 数据清洗:去除重复数据和处理缺失值。
  2. 特征选择:利用相关性分析和基于模型的特征重要性筛选出重要特征。
  3. 数据标准化:将特征值归一化到相同的范围内,以提高模型训练的稳定性和收敛速度。

5 模型架构

基于Transformer架构,包括以下几个关键部分:

  1. 输入嵌入:将网络流量数据转换为固定维度的向量表示,同时保留其序列信息。
  2. 位置编码:通过位置编码保留特征序列的顺序信息。
  3. 自注意力机制:应用自注意力层,捕捉特征之间的全局依赖关系。
  4. 编码器-解码器结构:利用堆叠的编码器和解码器层提取特征并进行分类。
  5. 输出层:通过softmax层输出分类概率。
5.1. 输入嵌入层(Input Embedding Layer)

输入嵌入层将原始的网络流量特征映射到一个固定维度的向量空间中。

self.embedding = nn.Linear(input_dim, model_dim)
  • 公式
    E = X W e + b e E = XW_e + b_e E=XWe+be
    其中,( X ) 是输入特征矩阵,( W_e ) 和 ( b_e ) 分别是嵌入层的权重矩阵和偏置向量,( E ) 是嵌入向量。
5.2. 位置编码层(Positional Encoding Layer)

位置编码层通过添加位置编码向量来保留序列信息。位置编码向量由正弦和余弦函数生成。

class PositionalEncoding(nn.Module):
    def __init__(self, d_model, max_len=5000):
        super(PositionalEncoding, self).__init__()
        pe = torch.zeros(max_len, d_model)
        position = torch.arange(0, max_len, dtype=torch.float).unsqueeze(1)
        div_term = torch.exp(torch.arange(0, d_model, 2).float() * (-torch.log(torch.tensor(10000.0)) / d_model))
        pe[:, 0::2] = torch.sin(position * div_term)
        pe[:, 1::2] = torch.cos(position * div_term)
        pe = pe.unsqueeze(0).transpose(0, 1)
        self.register_buffer('pe', pe)

    def forward(self, x):
        return x + self.pe[:x.size(0), :]
  • 公式
    P E ( p o s , 2 i ) = sin ⁡ ( p o s 1000 0 2 i / d m o d e l ) PE_{(pos, 2i)} = \sin \left( \frac{pos}{10000^{2i/d_{model}}} \right) PE(pos,2i)=sin(100002i/dmodelpos)
    P E ( p o s , 2 i + 1 ) = cos ⁡ ( p o s 1000 0 2 i / d m o d e l ) PE_{(pos, 2i+1)} = \cos \left( \frac{pos}{10000^{2i/d_{model}}} \right) PE(pos,2i+1)=cos(100002i/dmodelpos)
    其中,( pos ) 是位置,( i ) 是维度索引。

max_len=5000中的5000表示序列的最大长度。在Transformer模型中,位置编码用于为输入序列中的每个位置添加一个向量表示其位置信息。这个向量是根据位置编码函数生成的,函数中的参数包括位置和维度索引。

位置编码的作用是为模型提供序列中各个位置的相对位置信息。这对于理解序列中的顺序和间隔是至关重要的。在自注意力机制中,序列中不同位置之间的关系是由位置编码来表示的,而不是像循环神经网络或卷积神经网络那样,通过固定的滑动窗口或循环结构来捕获序列中的顺序信息。

为什么将max_len设置为5000呢?这主要是为了应对在训练和推理过程中可能遇到的最大序列长度。通常情况下,我们会将max_len设置为训练数据集中序列的最大长度,以确保所有序列都能够被正确编码。在实际应用中,如果序列长度超过了max_len,可以通过截断或其他方法进行处理。

下面举一个例子来说明位置编码的作用:

假设有一个长度为4的序列:[ a, b, c, d ],并且我们使用一个4维的位置编码。

位置编码的生成过程如下:

  1. 对于每个位置 ( pos ),生成一个长度为4的位置编码向量 ( \text{PE}_{(pos)} )。
  2. 对于每个维度索引 ( i ),根据位置 ( pos ) 计算该维度的位置编码值。

例如,对于维度索引 ( i = 0 ) 和位置 ( pos = 1 ):
[ \text{PE}_{(1, 0)} = \sin \left( \frac{1}{10000^{0/4}} \right) = \sin(1) ]

[ \text{PE}_{(1, 1)} = \cos \left( \frac{1}{10000^{0/4}} \right) = \cos(1) ]

[ \text{PE}_{(1, 2)} = \sin \left( \frac{1}{10000^{2/4}} \right) = \sin(1/100) ]

[ \text{PE}_{(1, 3)} = \cos \left( \frac{1}{10000^{2/4}} \right) = \cos(1/100) ]

这样,每个位置都被赋予了一个唯一的位置编码向量,这些向量将会在模型的训练和推理过程中与输入的特征向量相结合,从而帮助模型更好地理解序列中各个位置的相对关系。

5.3. Transformer编码器层(Transformer Encoder Layer)

Transformer编码器层由多个自注意力层和前馈神经网络层堆叠而成。

encoder_layers = nn.TransformerEncoderLayer(d_model=model_dim, nhead=num_heads)
self.transformer_encoder = nn.TransformerEncoder(encoder_layers, num_layers)
  • 自注意力机制公式
    Attention ( Q , K , V ) = softmax ( Q K T d k ) V \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V Attention(Q,K,V)=softmax(dk QKT)V
    其中,( Q, K, V ) 分别是查询矩阵、键矩阵和值矩阵,( d_k ) 是键的维度。

  • 前馈神经网络公式
    FFN ( x ) = max ⁡ ( 0 , x W 1 + b 1 ) W 2 + b 2 \text{FFN}(x) = \max(0, xW_1 + b_1)W_2 + b_2 FFN(x)=max(0,xW1+b1)W2+b2
    其中,( W_1, W_2 ) 和 ( b_1, b_2 ) 是前馈神经网络的权重矩阵和偏置向量。

5.4. 解码层(Decoder Layer)(非Transformer的解码器)

解码层将编码器的输出转换为最终的分类结果。

self.decoder = nn.Linear(model_dim, num_classes)
  • 公式
    y ^ = E W d + b d \hat{y} = EW_d + b_d y^=EWd+bd
    其中,( E ) 是编码器的输出,( W_d ) 和 ( b_d ) 分别是解码层的权重矩阵和偏置向量,( \hat{y} ) 是预测的分类结果。
5.5.模型的前向传播(Forward Pass)
def forward(self, x):
    x = self.embedding(x)
    x = self.pos_encoder(x)
    x = self.transformer_encoder(x)
    x = self.decoder(x)
    return x
  1. 嵌入层输出
    E = X W e + b e E = XW_e + b_e E=XWe+be
  2. 位置编码输出
    E ′ = E + P E E' = E + PE E=E+PE
  3. 编码器输出
    Z = TransformerEncoder ( E ′ ) Z = \text{TransformerEncoder}(E') Z=TransformerEncoder(E)
  4. 解码层输出(非Transformer的解码器)
    y ^ = Z W d + b d \hat{y} = ZW_d + b_d y^=ZWd+bd

6 模型训练

在模型训练过程中,我们使用了交叉熵损失函数和Adam优化器。通过在训练集和验证集上的迭代训练,逐步调整模型参数,以达到最佳性能。

7 结果和分析

我们的模型在CICIDS2017数据集上的表现优异,显著提高了入侵检测的准确性和鲁棒性。以下是一些关键结果:

  • 准确率:模型在测试集上的准确率达到了98.7%。
  • 召回率:针对不同类型攻击的召回率均超过了97%。
  • F1分数:综合考虑精确率和召回率,模型的F1分数达到了98.2%。

全部代码

https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用proteus仿真51单片机的流水灯实现

proteus介绍: proteus是一个十分便捷的用于电路仿真的软件,可以用于实现电路的设计、仿真、调试等。并且可以在对应的代码编辑区域,使用代码实现电路功能的仿真。 汇编语言介绍: 百度百科介绍如下: 汇编语言是培养…

Vue3中的常见组件通信之`$refs`、`$parent`

Vue3中的常见组件通信之$refs、$parent 概述 ​ 在vue3中常见的组件通信有props、mitt、v-model、 r e f s 、 refs、 refs、parent、provide、inject、pinia、slot等。不同的组件关系用不同的传递方式。常见的撘配形式如下表所示。 组件关系传递方式父传子1. props2. v-mod…

用AI制作历史解说视频:GPT + MidJourney + PiKa + FunSound + 剪映

1. 项目介绍 最近某站看到一个看到利用AI创作视频解说,成品画面很酷炫。对此以初学者视角进行复现,创意来源:用AI制作历史解说视频 2. 开始创作 我们参照原作者展示的内容,对古代人物屈原来生成解说视频。 2.1 故事脚本分镜 【…

IT闲谈-IMD是什么,有什么优势

目录 一、引言二、IDM是什么?三、IDM的优势1. 高速下载2. 稳定性强3. 强大的任务管理4. 视频下载5. 浏览器整合 四、应用场景1. 商务办公2. 教育学习3. 娱乐休闲 总结 一、引言 在数字化时代,下载管理器已成为我们日常工作和生活中不可或缺的工具。而在…

【Java】JDBC+Servlet+JSP实现搜索数据和页面数据呈现

目录 1 .功能介绍 2. 实现流程 3. 项目环境 4. 相关代码 4.1 Maven配置 4.2 SQL语句 4.3 Java代码 4.4 HTML代码 4.5 JSP代码 5. 结果展示 (原创文章,转载请注明出处) 博主是计算机专业大学生,不定期更新原创优质文章&…

Java基础教程 - 14 Maven项目

更好的阅读体验:点这里 ( www.doubibiji.com ) 14 Maven项目 Java 为什么那么强大,很大一部分原因是在实际的开发中,可以将别人开发的模块引入到我们自己的项目中,这样别人开发好了,我拿来就…

Android Media Framework(三)OpenMAX API阅读与分析

这篇文章我们将聚焦Control API的功能与用法,为实现OMX Core、Component打下坚实的基础。 1、OMX_Core.h OMX Core在OpenMAX IL架构中的位置位于IL Client与实际的OMX组件之间,OMX Core提供了两组API给IL Client使用,一组API用于管理OMX组件…

Mysql使用中的性能优化——批量插入的规模对比

在《Mysql使用中的性能优化——单次插入和批量插入的性能差异》中,我们观察到单次批量插入的数量和耗时呈指数型关系。 这个说明,不是单次批量插入的数量越多越好。本文我们将通过实验测试出本测试案例中最佳的单次批量插入数量。 结论 本案例中约每次…

Vue3中的常见组件通信之$attrs

Vue3中的常见组件通信之$attrs 概述 ​ 在vue3中常见的组件通信有props、mitt、v-model、 r e f s 、 refs、 refs、parent、provide、inject、pinia、slot等。不同的组件关系用不同的传递方式。常见的撘配形式如下表所示。 组件关系传递方式父传子1. props2. v-model3. $re…

【机器学习基础】Python编程07:五个实用练习题的解析与总结

Python是一种广泛使用的高级编程语言,它在机器学习领域中的重要性主要体现在以下几个方面: 简洁易学:Python语法简洁清晰,易于学习,使得初学者能够快速上手机器学习项目。 丰富的库支持:Python拥有大量的机…

树莓派4b安装宝塔面板

1、打开命令窗口,执行如下命令 #更新 sudo apt-get update sudo apt-get upgrade #切换root权限 sudo su root #安装宝塔面板 wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && bash install.sh安装过程有点久,会持…

如何远程连接Linux服务器?

远程连接Linux服务器是通过网络连接到位于远程位置的Linux服务器,以进行服务器管理和操作。远程连接使得系统管理员可以方便地远程访问服务器,进行配置、维护和故障排除等操作,而不必亲自在服务器前工作。以下是一些常用的远程连接方法&#…

智慧社区整体解决方案

1.智慧社区整体建设方案内容 2.整体功能介绍

NASA数据集——SARAL 近实时增值业务地球物理数据记录海面高度异常

SARAL Near-Real-Time Value-added Operational Geophysical Data Record Sea Surface Height Anomaly SARAL 近实时增值业务地球物理数据记录海面高度异常 简介 2020 年 3 月 18 日至今 ALTIKA_SARAL_L2_OST_XOGDR 这些数据是近实时(NRT)&#xff…

现代信号处理13_贝叶斯统计Bayesian Statistic(CSDN_20240609)

贝叶斯理论 在传统的统计中,我们对数据是由一定认识的,这种认识一般是指数据的统计模型(Statistical Model)f(x|θ) ,其中θ 通常指未知参数(Unknown Parameter),x 是已经获得的数据…

LabVIEW电机槽楔松动声测系统

LabVIEW电机槽楔松动声测系统 开发了一种利用LabVIEW软件和硬件平台,为大型电机设计的槽楔松动声测系统。该系统通过声波检测技术,实现了对电机槽楔是否松动的快速准确判断,极大地提高了检测效率和安全性。 项目背景 大型电机在运行过程中…

[图解]企业应用架构模式2024新译本讲解11-领域模型4

1 00:00:00,160 --> 00:00:01,870 好,到这里的话 2 00:00:02,620 --> 00:00:05,060 文字处理器的产品对象就生成了 3 00:00:06,880 --> 00:00:09,180 同样下面就是电子表格 4 00:00:10,490 --> 00:00:11,480 电子表格也同样的 5 00:00:11,490 -->…

html+CSS+js部分基础运用18

1. 按键修饰符的应用。①姓名:按下回车键时调用方法输出“姓名-密码”;②密码:按下shift回车时调用方法输出“姓名密码” 图1 初始效果图 图2 按键修饰符效果图 2. 仿淘宝Tab栏切换,熟悉…

MySQL使用

登录目标数据库 mysql -u root -p123456或指定编码格式登录 mysql -uroot -p密码 --default-character-setutf8 --socketmysql.sock -Amysql > select version();//查看版本号 show databases;//查看数据库有哪些 use xxx; show tables; show create database practice; …

对待谷歌百度等搜索引擎的正确方式

对待百度、谷歌等搜索引擎的方式是,你要站在搜索引擎之上,保持自己的独立思想和意见。 当谷歌宣布他们将会根据一个名为“Alphabet”的新控股公司来进行业务调整时,在科技界引起了一片恐慌之声。 永远不要说这是一个公司一直在做的事情。不…