基于人工智能方向的网络空间安全(二):人工智能在网络攻击检测中的应用(上)


本文介绍了人工智能方法及其在检测网络进攻中的应用,主要实体是二元分类器,旨在将每个输入对象与两组类中的一个进行匹配,并且考虑了组合二元分类器的各种方案,这允许构造在不同子样本上训练的模型。


引言

检测网络攻击是一项艰巨的任务,人工智能领域的快速发展,包括神经网络,模糊逻辑和遗传算法等方法可以利用于实现检测网络攻击

攻击的检测系统构建在确保网络节点安全有着关键作用,所有利用人工智能在内的方法和工具来用于网络攻击检测就显得非常重要了。

从输入数据的角度来解释,网络攻击检测方法分为异常和误用检测方法。

  • 对于异常检测方法

系统应包含被分析对象的正常行为数据——正常行为模式。

如果观察到参数和正常行为模式的参数之间存在差异,则系统会检测到网络异常。

对于异常检测方法的缺点:存在误报情况,这可能是正常行为模式的可用集不完整导致的。

相反,误用检测方法仅识别那些特定非法行为,以攻击模板的形式准确表示。攻击模块指的是一组规则,其明确描述了特定的攻击,将此类规则应用于已识别对象的字段,即可给出明确的关于其就属于此类攻击的答案。

本文主要讨论的方法基于我在学习过程中的一些基于人工智能的收获总结,并将正常和异常行为的参数用作二元分类器的训练数据。

二元分类器

神经网络

从结构和功能上讲,人工神经网络与人类大脑类似,其计算节点与神经元相对应,连接与突触相对应。在计算结构的元素之间建立相应联系,会减少模拟一个神经元到另一个神经元时的神经脉冲干扰。神经元之间存在的关系和强度能够通过指定非零权重系数来设置,这种权重系数的值成比例地表示了输入信号的重要程度,输入信号越强,分配给相应连接的权重就越大。在配置了至少两层与上面描述的类似的结构之后,就可以对训练实例进行足够准确的近似。

生物神经元由一个核、一个体(细胞体)和多个附属物组成[20〕。第一种类型的附属物称为轴突,以单个副本表示在每个神经元中,并充当该神经元产生神经脉冲的原始传递者。第二种类型的附属物称为树突,接收来自相邻细胞轴突的信号。位于轴突和树突交界处的神经纤维区域称为突触,它可以根据不同情况激发或抑制传输信号,当把这些映射到类似的人工神经元时,信号相应地转变为神经元之间相对关系权重的放大或衰减。

当我们说到三层神经网络时,通常指的是具有一个输入层、一个隐藏层和一个输出层的神经网络。下面我将图解这个三层神经网络的结构。

首先,我们有一组输入数据,表示为一个向量,例如 [x1, x2, x3, ..., xn],其中 n 是输入特征的数量。

然后,我们有一个输入层,它是网络中的第一层。该输入层的神经元数量与输入特征的数量相对应。每个输入特征都与一个输入层神经元相连。

接下来是隐藏层,它是网络中的第二层。隐藏层包含一些神经元,其数量根据网络设计和问题的要求而定。每个隐藏层神经元都与输入层的每个神经元连接,并通过权重和偏差进行计算。隐藏层的神经元将计算的结果传递给激活函数,以产生一个输出。

最后是输出层,它是网络中的第三层。输出层的神经元数量取决于问题的要求。每个输出层神经元都与隐藏层的每个神经元连接,并通过权重和偏差进行计算。输出层的神经元也将计算的结果传递给激活函数,以产生最终的输出。

多层神经网络中最常见的学习算法是反向传播算法。

下面的公式是能用来表示二元神经网络模型的函数

激活函数(Activation Function)
  • Sigmoid 函数:

    函数定义: f ( x ) = 1 1 + exp ⁡ ( − x ) f(x) = \frac{1}{1 + \exp(-x)} f(x)=1+exp(x)1

  • ReLU 函数:

    函数定义: f ( x ) = max ⁡ ( 0 , x ) f(x) = \max(0, x) f(x)=max(0,x)

前向传播(Forward Propagation)
  • 计算隐藏层输出:

    公式: h = W 1 ⋅ X + b 1 h = \textbf{W}_1 \cdot \textbf{X} + \textbf{b}_1 h=W1X+b1

  • 计算输出层输出:

    公式: y = W 2 ⋅ h + b 2 y = \textbf{W}_2 \cdot \textbf{h} + \textbf{b}_2 y=W2h+b2

反向传播(Backward Propagation)
  • 计算输出层误差:

    公式: E = y − Y E = y - \textbf{Y} E=yY

  • 计算输出层权重和偏置的梯度:

    公式: ∂ E ∂ W 2 = h T ⋅ E \frac{\partial E}{\partial \textbf{W}_2} = \textbf{h}^T \cdot E W2E=hTE

    公式: ∂ E ∂ b 2 = ∑ E \frac{\partial E}{\partial \textbf{b}_2} = \sum E b2E=E

  • 计算隐藏层误差:

    公式: E hidden = W 2 T ⋅ E ⊙ deriv ( h ) E_{\text{hidden}} = \textbf{W}_2^T \cdot E \odot \text{deriv}(\textbf{h}) Ehidden=W2TEderiv(h)

  • 计算隐藏层权重和偏置的梯度:

    公式: ∂ E hidden ∂ W 1 = X T ⋅ E hidden \frac{\partial E_{\text{hidden}}}{\partial \textbf{W}_1} = \textbf{X}^T \cdot E_{\text{hidden}} W1Ehidden=XTEhidden

    公式: ∂ E hidden ∂ b 1 = ∑ E hidden \frac{\partial E_{\text{hidden}}}{\partial \textbf{b}_1} = \sum E_{\text{hidden}} b1Ehidden=Ehidden

权重和偏置更新
  • 更新输出层的权重和偏置:

    公式: W 2 ← W 2 − learning_rate ⋅ ∂ E ∂ W 2 \textbf{W}_2 \leftarrow \textbf{W}_2 - \text{learning\_rate} \cdot \frac{\partial E}{\partial \textbf{W}_2} W2W2learning_rateW2E

    公式: b 2 ← b 2 − learning_rate ⋅ ∂ E ∂ b 2 \textbf{b}_2 \leftarrow \textbf{b}_2 - \text{learning\_rate} \cdot \frac{\partial E}{\partial \textbf{b}_2} b2b2learning_rateb2E

  • 更新隐藏层的权重和偏置:

    公式: W 1 ← W 1 − learning_rate ⋅ ∂ E hidden ∂ W 1 \textbf{W}_1 \leftarrow \textbf{W}_1 - \text{learning\_rate} \cdot \frac{\partial E_{\text{hidden}}}{\partial \textbf{W}_1} W1W1learning_rateW1Ehidden

    公式: b 1 ← b 1 − learning_rate ⋅ ∂ E hidden ∂ b 1 \textbf{b}_1 \leftarrow \textbf{b}_1 - \text{learning\_rate} \cdot \frac{\partial E_{\text{hidden}}}{\partial \textbf{b}_1} b1b1learning_rateb1Ehidden

以上只是示例,具体的函数实现可能会根据不同的框架或应用有所不同

训练多层神经网络
  1. 设置神经网络结构,即选择激活函数类型以及位于其中的隐藏层和神经元的数量。
  2. 指定训练次数的最大值T和总均方误差 ε \varepsilon ε的最小值。
  3. 将当前迭代的计数器设置为0,并以任意值初始化权重系数 w i j ( K ) w_{ij}^{(K)} wij(K)。其中,K表示层数,i对应于第K层中神经元的位置,j表示当前神经元和第K-1层中第j个神经元的输出信号之部连接。
  4. 对每个向量 x k → \overrightarrow{x_k} xk (k=1,…,M)执行以下步骤:
    • a. 执行信号前馈传播 ——根据公式计算第K层中每个第i个神经元的输入信号, w i ( K ) = ∑ j = 1 N K − 1 + 1 w i j ( K ) ∗ y i ( K − 1 ) w_{i}^{(K)}=\displaystyle\sum_{j=1}^{N_{K-1}+1}w_{i_j}^{(K)}*y_i^{(K-1)} wi(K)=j=1NK1+1wij(K)yi(K1),其中 N K − 1 N_{K-1} NK1是第K-1层的神经元数量。当 j = N K − 1 + 1 j=N_{K-1}+1 j=NK1+1时, w i j ( K ) = θ i ( K ) w_{ij}^{(K)}=\theta_i^{(K)} wij(K)=θi(K), y j ( K − 1 ) = 1 y_j^{(K-1)}=1 yj(K1)=1;当K>1时, y j ( K − 1 ) = φ ( x j ( K − 1 ) ) y_j^{(K-1)}=\varphi(x_j^{(K-1)}) yj(K1)=φ(xj(K1));当K=1时, y j ( K − 1 ) = X K j y_j^{(K-1)}=X_{K_j} yj(K1)=XKj(原信号)
    • b. 执行误差的反向传播 - 根据公式 Δ w i j ( K ) = a ∗ δ i ( K ) ∗ y i ( K − 1 ) \Delta w_{i_j}^{(K)}=a*\delta_i^{(K)}*y_i^{(K-1)} Δwij(K)=aδi(K)yi(K1)计算神经元权重系数的累加。从最后一层开始,到第一层结束。其中, α \alpha α是权重的校正比例系数,0<a≤1。如果第K层是输出层,则 δ i ( K ) = φ , ( x i ( K ) ) ∗ ( u k i − y i ( K ) ) \delta_i^{(K)}=\varphi^,(x_i^{(K)})*(u_{k_i}-y_i^{(K)}) δi(K)=φ,(xi(K))(ukiyi(K)),否则 δ i ( K ) = φ , ( x i ( K ) ) ∗ ∑ j = 1 N K + 1 + 1 δ j ( K + 1 ) ∗ ω j i ( K + 1 ) \delta_i^{(K)}=\varphi^,(x_i^{(K)})*\displaystyle\sum_{j=1}^{N_{K+1}+1}\delta_j^{(K+1)}*\omega_{j_i}^{(K+1)} δi(K)=φ,(xi(K))j=1NK+1+1δj(K+1)ωji(K+1)其中 u k i u_{k_i} uki表示第k个训练向量在输出层的第i个神经元中的神经网络的期望输出。
    • c. 利用公式 ω i j ( K ) = ω i j ( K ) + Δ ω i j ( K ) \omega_{i_j}^{(K)}=\omega_{i_j}^{(K)}+\Delta\omega_{i_j}^{(K)} ωij(K)=ωij(K)+Δωij(K)调整神经元的权重系数。
  5. 增加当前迭代次数,即t=t+1。
  6. 如果满足以下条件之一,则终止算法: t ≥ T t\ge T tT ∑ k = 1 M E ( x k → ) = ( 1 / 2 ) ∗ ∑ i = 1 N K a l l ( u k i − y i ( K a l l ) ) 2 \displaystyle\sum_{k=1}^ME(\overrightarrow{x_k})=(1/2)*\displaystyle\sum_{i=1}^{N_{K_{all}}}(u_{k_i}-y_i^{(K_{all})})^2 k=1ME(xk )=(1/2)i=1NKall(ukiyi(Kall))2是神经网络总的均方差,输出值 y ( K a l l → ) = ( y 1 ( K a l l ) , … , y N k a l l ( K a l l ) ) T y^{(\overrightarrow{K_{all}})}=(y_1^{(K_{all})},…,y_{N_{k_{all}}}^{(K_{all})})^T y(Kall )=(y1(Kall),,yNkall(Kall))T由三层和输出层上的一个神经元组成,如果向量 x k → \overrightarrow{x_k} xk 传递到分布的层(具有期望输出向量 u k → = ( u k 1 , … , u k N K a l l ) T \overrightarrow{u_k}= (u_{k_1},…,u_{k_{N_{K_all}}})^T uk =(uk1,,ukNKall)T,否则跳到步骤4.
径向基函数网络

其结构和多层神经网络不同

  1. 计算隐藏层的输出: 对于给定输入样本 x,计算每个隐藏层神经元的输出值: g(x, c) = exp(-β * ||x - c||2) 其中,g(x, c)表示输入样本 x 到隐藏层神经元 c 的径向基函数输出,β是一个控制神经元感受野大小的参数。 计算公式中的 ||x - c||2 表示输入样本与神经元 c 之间的欧氏距离。

    将所有隐藏层神经元的输出组合成一个向量 h,表示隐藏层的输出。

  2. 计算输出层的输出: 将隐藏层的输出 h 乘以权重矩阵 W,然后加上偏置向量 b: o = W * h + b 其中,o 是输出层的输出向量。

  3. 应用激活函数: 对输出层的输出向量 o 应用适当的激活函数,例如 softmax 函数,得到最终的预测结果。

训练径向基函数网络

1.设置神经网络结构,即选择隐藏层 N 1 N_1 N1 的尺寸和输出层激活函数类型 φ \varphi φ
2 指定最大训练次数 T和总均方差 ε \varepsilon ε的最小值。
3.用K均值方法计算聚类中心{ v i ‾ → {\overrightarrow{\overline{v_i}}} vi } N 1 i = 1 {N_1} \atop {i=1} i=1N1,利用这些中心的组合初始化第一个隐藏层神经元权重系
ω i j ( 1 ) \omega_{i_j}^{(1)} ωij(1),即 ω i j ( 1 ) \omega_{i_j}^{(1)} ωij(1)= v i j v_{i_j} vij(i=1,…, N 1 , j = 1 , … n N_1,j=1,…n N1,j=1,n).

4.将当前迭代计数器设置为0(t=0),以任意值初始化第二个输出层的神经元权重系数 ω i j ( 2 ) \omega_{i_j}^{(2)} ωij(2)(i=1,…, N 2 N_2 N2,j=1,…, N 1 N_1 N1)。

5.对每个向量 x k → \overrightarrow{x_{k}} xk (k=1,…,M)执行步骤

  • a.执行信号前馈传播——根据公式为第二层的第i个神经元计算输出信号 y i ( 2 ) = φ ( x i ( 2 ) ) y_i^{(2)}=\varphi(x_i^{(2)}) yi(2)=φ(xi(2)),其中 x i ( 2 ) = ∑ j = 1 N 1 + 1 ω i j ( 2 ) ∗ y j ( 1 ) x_i^{(2)}=\displaystyle\sum_{j=1}^{N_1+1}\omega_{i_{j}}^{(2)}*y_j^{(1)} xi(2)=j=1N1+1ωij(2)yj(1);当 j = N 1 + 1 j=N_1+1 j=N1+1时, ω i j ( 2 ) = θ ( 2 ) \omega_{i_j}^{(2)}=\theta^{(2)} ωij(2)=θ(2), y j ( 1 ) = 1 y_j^{(1)}=1 yj(1)=1;当j=1,…, N 1 N_{1} N1时, y k ( 1 ) = ϕ ( x k → − y_k^{(1)}=\phi{(\overrightarrow{x_k}-} yk(1)=ϕ(xk ω j ( 1 ) → ) {\omega_j}^{\overrightarrow{(1)}}) ωj(1) )
  • b.利用widrow-Hoff规则更新神经网络输出层的权重系数 ω i j ( 2 ) = ω i j ( 2 ) + Δ ω i j ( 2 ) [ 20 ] \omega_{i_j}^{(2)}=\omega_{i_j}^{(2)}+\Delta\omega_{i_j}^{(2)[20]} ωij(2)=ωij(2)+Δωij(2)[20],其中 Δ ω i j ( 2 ) = α ∗ φ , x i ( 2 ) ∗ ( u k i − y i ( 2 ) ) ∗ y i ( 1 ) , u k i \Delta\omega_{i_j}^{(2)}=\alpha*\varphi^,x_i^{(2)}*(u_{k_i}-y_i^{(2)})*y_i^{(1)},u_{k_i} Δωij(2)=αφ,xi(2)(ukiyi(2))yi(1),uki是来自训练样本的第k个实例的输出层中第i个神经元期望的输出。
  • 6.增加当前迭代次数。即t=t+1.
  • 7.如果满足以下条件之一,则终止算法: t ≥ T t\ge T tT ∑ k = 1 M E ( x k → ) ≤ ε \displaystyle\sum_{k=1}^ME(\overrightarrow{x_k})\le\varepsilon k=1ME(xk )ε。其中 E ( x k → ) = 1 / 2 ∗ ∑ i = 1 N K a l l ( u k i − y i ( K a l l ) ) 2 E(\overrightarrow{x_k})=1/2*\displaystyle\sum_{i=1}^{N_{K_{all}}}(u_{k_i-y_i^{(K_{all})}})^2 E(xk )=1/2i=1NKall(ukiyi(Kall))2,是神经网络总的均方差,如果向量 x k → \overrightarrow{{x_k}} xk 传递到分布的层(具有期望输出向量 u k → = ( u k 1 , … , u k N K a l l ) T \overrightarrow{u_k}=(u_{k_1},…,u_{kN_{K_all}})^T uk =(uk1,ukNKall)T,则输出值 y ( K → a l l ) = ( y 1 ( K a l l ) , … , y N K a l l ( K a l l ) ) T y^(\overrightarrow{K}_{all})=(y_1^{(K_{all})},…,y_{N_{K_{all}}}^{(K_{all})})^T y(K all)=(y1(Kall),,yNKall(Kall))T,并且由两个层和位于输出层的一个神经元组成 ( K a l l = 2 , N K a l l = 1 ) ; (K_{all}=2,N_{K_{all}}=1); (Kall=2,NKall=1);否则跳到步骤5)。

声明

本文所涉及内容仅供学习,任何人在利用本文相关内容时,所造成的相关违法行为引起的法律纠纷问题,本人概不负责。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值