system: [SYSTEM]

user: 2. 基于半监督学习的APT检测模型 2.1. 深度信念网络DBN 2006年Hinton等人 [ 17 ] 提出深度信念网(Deep Belief Net， DBN)，它是由多层无监督的限制玻尔兹曼机网络和一层有监督的反向传播网络组成，结构如图1所示。 DBN是一种无监督学习的方法，目前已被建议作为一个多层次分类器和降维工具。DBN多层生成模型，学习一个层的特性与未标记的数据，后提取的特征作为输入的训练下一层。这种高效的学习可以通过微调后的权重提高整个网络的性能。该方法适用于数据量大且高维的数据集，对于APT攻击的检测具有很高的实用价值。 DBN使用未标记的数据、一次学习一层特征的多层生成模型。DBN具有对于数据量庞大的数据集执行非线性维数降低的能力和对高维流形数据的学习能力，可以使用受限玻尔兹曼机(Restricted Boltzmann Machines， RBM)以多层方式高度训练。 图1. DBN结构图 在RBM中可见单元v为表示特征，隐藏单元h学习表示特征，即它将来自维度为n的输入空间的输入向量v映射到维度为 d = | h | 的特征空间里，其中 p ( v ， h ) 。给定数据集 D m × n 作为输入，RBM将其映射到 X m × d 中。在RBM中，相同级别的单元之间没有连接，即可见–可见或隐藏–隐藏连接，并且图的两层用隐藏和可见单元对之间的对称权重W连接。 在原始的玻尔兹曼机器架构中，隐藏和可见向量的联合分布 p ( v ， h ) 是根据能量函数 E ( v ， h ) 定义的，假设输入向量是具有方差 σ 的高斯随机变量，则该高斯伯努利RBM的能量函数 E ( v ， h ) 可以被获得为： E ( v ， h ) = 1 2 ∑ i ( v i − c i ) 2 − ∑ j b j h j − ∑ i ， j w i ， j v i h j (1) 其中 v i 和 h j 分别是具有 W i ， j 的对称权重的可见v层和隐藏h层的第i和第j个单元，以及相应的偏差 c i 和 b j ，因此 p ( v ， h ) 的公式如下所示： P ( v ， h ) = e − E ( v ， h ) Z (2) 其中Z是称为分区函数的归一化因子，并且计算为： Z = ∑ v ， h e − E ( v ， h ) (3) 联接配置的值由相对于网络参数的值 θ = ( W ， b ， c ) 来确定，其中b和c分别是对隐藏层和可见层的偏差。隐含层h是二进制的，并且隐藏单元是伯努利随机变量，而输入单元可以是二进制或实值。给定二元隐藏单元 h j ，由于隐藏单元之间没有连接，所以可以直接计算条件分布 P ( h | v ) ： P ( h | v ) = ∏ j P ( h j | v ) = ∏ j s i g m ( b j + ∑ i w i ， j v i ) (4) 并且类似地，由于在可见单元之间没有连接，因此： P ( v | h ) = ∏ i P ( v i | h ) = ∏ i N ( c i + ∑ j w i ， j h j ， σ ) (5) 其中： S i g m ( x ) = 1 1 + e − x (6) 是逻辑S型函数和 N ( μ ， σ ) 表示具有均值 μ 和方差 σ 的高斯分布。训练RBM意味着找到参数θ的值，使得能量最小化。一种可能的方法旨在最大化由其相对于模型参数的梯度估计的v的对数似然： ∂ log p ( v ) ∂ θ = E P ( h | v ) [ ∂ E ( v ， h ) ∂ θ ] − E P ( v | h ) [ ∂ E ( h ， v ) ∂ θ ] (7) 由于对数似然的第二项的精确计算是难以处理的，所以可以使用称为对比度发散(CD) [ 19 ] 的方法来估计梯度。CD近似通过k次迭代的吉布斯采样(通常k = 1)的期望以更新网络权重： ∂ log P ( v ) ∂ W i ， j ≈ 〈 v i h j 〉 0 − 〈 v i h j 〉 k (8) 其中 〈 。 〉 I 表示对比发散迭代I的平均值。在训练RBM之后，另一个RBM可以堆叠在第一个RBM的顶部，即隐藏单元的推断状态 X m × d 用作用于培训新的RBM的可见单位。上层可以是伯努利伯努利RBM，其中与第一层的主要区别在于二元可见单位和能量函数 [ 20 ] 。堆叠RBM使得人们能够建模早期RBM的隐藏单元之间的显着依赖性。更具体地，可以堆叠多层RBM以产生不同层的非线性特征检测器，其表示数据中逐渐更复杂的统计结构。在RBM的堆栈中，所得DBN的自底向上识别权重被用于初始化多层前馈神经网络的权重。该网络可以用作用于降维的工具，或者用逻辑回归层来顶端并且通过用于分类的反向传播来进行区别地微调。 2.2. 支持向量数据描述方法SVDD 支持向量数据描述方法(Support Vector Data Description， SVDD)是由Tax等人结合SVM方法与最小包围球而提出的一种数据描述方法。其主要思想为在高维特征空间中找寻一个尽可能将所有训练样本都包围起来的最小超球体，并以这个最小超球体的决策边界对数据进行分类和描述。由于SVDD对异常点十分敏感，所以常常用于处理异常检测等问题，且SVDD相较于SVM而言具有训练速度快等特点。 SVDD需要在高维特征空间中找寻一个尽可能将所有训练样本都包围起来的最小超球体，实际情况下数据并不是集中分布，因此往往会引入一个松弛变量 [ 21 ] 。所以很清楚地可以知道求解最小超球体的问题可以描述为： min R 2 + C ( ∑ i ξ i ) K (9) 其中C为一个常数，是对错误分类样本的惩罚程度，K也是用户指定的一个常数，一般情况下K = 1，并且上述问题描述应该满足约束条件： 0 ≤ R 2 + ξ i ，   ξ j ≤ ( x i − a ) ( x i − a ) T (10) a为要构造的超球体的球心向量，利用其中半径的计算公式为： R 2 = ( x u ， x u ) − 2 ∑ j = 1 n α j ( x u ， x j ) + ∑ i = 1 n ∑ j = 1 n α i α j ( x i ， x j ) (11) 2.3. 基于半监督学习的攻击检测方法 图2为DBN-SVDD模型图，该模型图分为三部分：数据预处理、DBN训练阶段、SVDD识别检测阶段。其中数据预处理分为字符型属性映射和数据属性归一化。NSL-KDD数据集的每一条数据记录有38个数字型特征和3个字符型特征，因此需要先将字符型属性映射成数字型属性。由于数据本身的定性特征没有明显的顺序，故采用哑编码进行映射。又因为特征向量中每一个特征量纲不同，取值范围不一，所以需要对数据属性归一化。 在这里我们选择开源框架keras建立DBN网络，keras是一个高层神经网络API，keras由纯Python编写而成并基于Tensorflow、Theano以及CNTK后端。keras为支持快速实验而生，能够把你的idea迅速转换为结果。 在DBN训练阶段，得到标准数据集以后，我们使用DBN模型对其降维。低层RBM进行初步降维以后再使用高层RBM从低层RBM传来的简单表征里学习更抽象复杂的表征，并反向调整权值，提取出特征优秀的数据。再将DBN处理过的数据分为训练集和测试集，提供数据记录给SVDD进行训练和识别检测，最终得到检测结果。该攻击检测方法的具体步骤如下： 步骤1：使用哑编码做字符型属性映射 步骤2：对步骤1处理过的数据属性进行归一化 步骤3：使用keras开源框架建立DBN网络 步骤4：使用DBN网络进行降维和提取优秀的特征向量 步骤5：构建SVDD网络 步骤6：对训练集进行训练 步骤7：对测试集进行仿真和测试 该实验流程如图3所示。