APP下载

基于CNN深度算法改进及故障预测研究

2020-10-28陈彩虹

计算机技术与发展 2020年10期
关键词:日志卷积神经网络

陈彩虹,王 诚

(南京邮电大学 通信与信息工程学院,江苏 南京 210003)

0 引 言

当下社会生活中,对网络需求不断增长,如果网络发生故障,会产生或大或小的影响[1]。如何应对网络故障、有效提高业务管理效率是一个值得研究的方向。而面对日益扩大的网络及复杂的网络结构,如何利用好现有的技术设计出合理可靠且满足需求的架构具有极大的挑战性,也有极大的研究价值。

在现有网络系统中会生成诸如报警信息、详细记录、关键性能指标的海量数据,这些都被用于网络检测研究。但是对于网络系统中节点的日志信息研究还不够,这类数据庞大,含有丰富的可挖掘信息。由于日志的半结构化,它的处理多借助人工处理,自动处理困难,因此,对于网络管理来说,日志具有很大的潜在分析价值[2]。

针对故障预测,大多是使用传统的统计分析、关联分析加上人工操作的方法[3]。从方法上看,对日志的分析研究在很大程度上依赖手工提取。

随着机器学习的发展,海量日志处理出现了新型的研究方法。根据不同的分析对象可分为借助故障日志信息的预测系统和借助状态信息的预测系统[4]。文中收集网络系统中故障发生时的日志数据,使用深度学习等方法来分析故障信息之间的隐藏关系,并利用这些联系进行故障的预测。这属于前文所述的第一种方式:基于故障日志的预测。

从自然语言学习的流程入手,提出了一种利用网络系统设备生成的日志来预测未来故障的方法。将日志看作一种文本,并从文本中提取样本。然后再构建卷积网络模型,利用数据挖掘技术尽可能挖掘隐藏的信息,以此来预测网络未来的状态,预测网络是否会发生故障。最后对设计模型进行实验测试,设置不同滑动窗口分别提取参数。此外,为了展现卷积神经网络预测模型的性能,将之与改进前进行对比,比较同样滑动窗口间隔下的准确率、召回率等多项评价指标[5]。

1 相关工作

1.1 卷积神经网络

深度学习中的卷积神经网络(convolutional neural networks,CNN)的网络结构含有深度结构的前馈神经网络(feedforward neural networks,FNN),由卷积层、池化层、全连接层组成。神经网络中,参数过多,容易产生过拟合。过拟合即模型在训练集表达能力过强、在测试集表现极差的现象。CNN利用局部连接和参数共享的方法解决了参数过多带来的易过拟合的问题[6]。

1.2 卷积神经网络算法简介

1.2.1 CNN算法原理

传统全连接神经网络,随着输入层的特征维度增高,全连接训练参数增幅变高,会导致计算速度迟缓。而卷积神经网络是未完全连接的,且共享同一层中某些神经元之间连接的偏移量和权重。所以,需要训练的参数数量大大减少。

卷积神经网络的结构组成:

·输入层:用于数据的输入;

·卷积层:使用卷积核实现特征提取与特征映射;

·池化层:进行下采样,稀疏处理特征图,使数据运算量降低;

·全连接层:通常在CNN的末端重新拟合以减少特征信息部分的损失;

·输出层:用于输出结果。

在目标检测算法RCNN中,主要包含以下步骤:

(1)训练分类网络。

在使用深度学习特征的时候,不是直接用卷积神经网络训练模型或特征,而是用预训练的模型来对网络进行训练。具体使用时可以采用AlexNet在imageNet训练分类模型。

(2)模型微调fine-tuning。

在RCN分类任务上作模型的迁移,保留主干网络卷积层的特征,去掉FC层。

(3)特征提取。

提取候选框(利用选择性搜索或滑动窗口的策略)。

Step1:生成区域集R;

Step2:计算区域集R中相邻区域的相似度S={s1,s2,…};

Step3:将具有最高相似度的两个区域合并为一个新集合,添加到R中;

Step4:从S中移除所有与Step1中有关的子集;

Step5:计算新集与所有子集的相似度;

Step6:跳至step3,直至S为空。

(4)训练SVM分类器。

用SVM(support vector machine)分类器进行类别确定,并且每个类别对应一个SVM。采用分类器的时候,如果要识别20种不同的类别,通常SVM在进行分类时会对21个类别进行分类。其中20个类别为目标检测类别,1个类别是背景。

(5)回归器精修候选框位置。

用线性回归模型分析候选框的效果,进一步筛选和合并候选框,最后获得目标检测的输出。

1.2.2 基于CNN算法的改进研究

(1)预测数据处理的改进。

原始算法中,直接利用CNN算法实现对当前序列和日志标签的故障预测。为了增大有用信息,新引入输出序列作为信息源,提高算法预测能力。具体实现步骤如下:

(a)预处理初期数据。

修改滑动窗口,利用滑动窗口一收集当前时刻下的输入序列,同时利用滑动窗口二收集对应的日志标签。之后,提取第二个滑动窗中日志的输出序列。因为该部分序列相对于滑动窗口一中的序列生成时间较晚,所以代表未来的日志序列。收集的初期数据经过处理后可以得到三个类别的信息:当前的日志序列I1、将来的日志序列Ia和未来的日志标签I2。

(b)利用三种类别的序列进行预测。

为了挖掘更多的信息量,在输入序列和日志标签联系的基础上,基于输入序列和输出序列进行建模,预测出新的信息源即输出序列,利用I2、Ia、I1实现故障预测。算法改进示意图如图1所示。

图1 故障预测算法改进示意图

(2)随机梯度下降优化算法的改进。

为了得到好的泛化,需要使用大的训练集,然而,大型训练集的计算成本也很大,因此将代价函数划分为单个日志样本的代价函数的综合。训练数据的负条件对数似然用下式表示:

其中,L是每个样本的损失,L(x,y,θ)=-logp(y|x;θ)。

梯度下降计算如下[7]:

这个运算的计算代价是O(m)。训练集大小的增加会造成计算一步梯度耗费时间大幅增长。在该实验中,用小规模的样本近似估计梯度,从训练集中均匀抽出小批量样本,记为B=x1,x2,…,xm[8]。

梯度的估计可以表示成:

此外,对于SGD中的关键参数—学习率,不设定固定的学习率,在实际使用中,学习率ε可以在多次迭代中逐渐减小,第k步迭代后的学习率记为εk。保证SGD收敛的一个充分条件是:

在T步迭代后,一般使ε保持常数。

学习率可通过实验与误差来选择,一般来说最好的方式是监测目标函数值随时间变化的学习曲线。使用线性策略时,需要选择的参数是ε0、εT和T。T设置为需要迭代数百次训练集的次数。通常εT应设为大约ε0的1%。下面简要说明数次迭代中学习率的更新操作。

算法:随机梯度下降,迭代更新学习率。

输入:学习率εk

输出:初始参数θ

步骤1:判断是否满足停止准则,如果不满足,则转到下一步,如果满足,则结束该过程;

步骤2:在训练集内采集小批量样本,B={x1,x2,…,xm},样本个数为m,xi与yi对应;

(3)基本卷积函数使用的改进。

通常,神经网络中的卷积是由多个并行卷积组成的。虽然运算是作用在多个空间位置上,但具有单个核的卷积只能提取一种类型的特征。另外,因为卷积网络使用多通道的卷积,即使使用核翻转,也不一定能确保网络的线性运算是可互换的。仅当这些操作中的每个部分的输出和输入具有相同数量的通道时,才是可互换的。本实验中不使用翻转,只利用卷积获取输出。

1.3 整体算法设计

1.3.1 数据生成与处理

(1)数据生成:利用仿真软件构建所需网络系统,模拟正常运行状态和故障发生时的状态,采取两种场景下的调试信息。采集的数据包含三种类别的信息数据:软件运行中人为加入的提示内容;与网络状态联系的对象信息和时间速度存储信息。在随后数据处理中,有必要删除日志中与故障分析无关的标签内容。日志生成时,先人为加入故障出现和复旧的提示。如在正常状态转为错误状态时输出提示标签SYSTEM_ERROR,在系统状态复旧时设置提示标签SYSTEM_STATE_RECOVER。如上设置可以得到数据格式:

[time][info level]:[location][event] [event description]

对于日志中速度存储等统计信息,也需要提前作消除处理。

(2)数据预处理:如前所述,直接采集初始时的日志像文本一样包含内容项多,不是可以直接用作卷积神经网络输入的格式化数据,因此会基于原始数据进行处理以保留对象信息。制作出清洗后日志的单词词典,在此基础上实现样本的提取,做后期的训练和测试。预处理数据主要为三个部分:数据清洗、字典构建和样本提取,见图2。数据处理时,一方面需去除无关信息,另一方面要处理数字符号信息[11]。

图2 数据处理流程

清洗后,文本数据变为单词序列,统计单个词汇词频,对单词集合排序,然后依次进行编号。也可以再加入词频阈值,词频统计大于设定阈值时,保留继续处理,否则,替换为未知单词如UNKNOWN,这样所有的单词根据词频的不同都有相应的数字编码。以上处理为字典构造,可以得到如表1所示的数据词典表[12]。

表1 构造字典表示意

数据预处理的最后环节,是选择卷积核部分,即利用滑动窗口从日志数据中获取训练集和测试集需要的样本文本,含相应的提示标签和序列。提取的部分包含当前一段时间的日志和未来一段时间域的状态。前者用输入序列表示,后者用提示标签表示。本研究选用两个滑动窗口,一个用于提取输入序列,另一个用来获取该序列故障存在与否的标签。

用ls表示滑动窗口大小(实际作业中的样本数据行数)。本实验中设定两窗口获取数据的行数相等,间隔为lg。滑动窗口的size相当于样本数据中对应位置数据被输出经过的时间,size越大,等价于打印此处数据的时长越大。而滑动窗口间距表示当前日志到未来某段日志的间隔时间。由此可见,lg越大,意味着预测的时间越远。但是,远的时间段也意味着要预测的未来状态和现阶段的联系更弱,导致训练更为复杂[13]。

1.3.2 模型设计

用日志数据对模型进行大量训练和测试,实现最优化。与传统CNN不同的是,文中除了CNN特有的三层处理外还包括针对文本处理的词嵌入层。卷积神经网络示意图如图3所示。

图3 卷积神经网络示意图

(1)词嵌入层。

在图像处理时,每张图片便是一段数值信息,可以将其与卷积核的内积映射为数字。而本实验中的日志数据具有文本的特征,单单通过预处理时的字典将单词根据排序得到数字编号是不够的,还需要通过词嵌入层将通过词频划分出的编号再次编号,使之能以向量的形式表示,将原始日志的输入序列映射成输入矩阵[14]。

记文本形式的序列最大长度是m,输入文本数据实际长度为n,单词数量为num,将输入序列用下式表示:

(1)

当输入序列的实际长度n小于序列最大长度m时,用padding的方法将长度补足为m,反之,用truncating的方法将多余的部分去除。如图4,m=4,n=2,使用多个0填补矩阵。

00000xx00xx00000

下面解释再次编码过程,用独热编码(ONE-HOT encoding)将i表示成I(m*n),输入矩阵表示为Y,输出Y可定义为:

Y=Me•I

(2)

其中,Me表示权值矩阵(n*k),Y是输出矩阵(m*k)[15]。

(2)卷积层和池化层。

卷积层和池化层是预测模型中不可或缺的一部分,本实验中设计了多个该部分以更大程度地获取输入序列的信息。多层卷积和池化层,可以保证卷积窗含有更长时间段内的样本数据,对应的单词矩阵也更大[8]。此部分的输出与输入序列的关系为:

ai=f(Mb•xi,j+h-1)+c

(3)

其中,f表示激活函数,X表示输入序列,xi表示第i个词向量,ai表示卷积层的输出。

(3)全连接层。

根据输入序列包含的重要信息,确认系统是否有故障发生。定义f是激活函数,使用sigmoid函数,用mo表示该层的输出。则有式子y=f(wmo+b)。

1.3.3 训练和测试

先简单说明模型训练和测试的几个基本概念的作用。训练集可用来训练与拟合模型,在通过训练集训练出了多个模型之后,可以借助验证集实现数据校正和比较预测。k-fold交叉验证用于将数据集划分为K个部分,轮流作为一次测试集,其他作为训练集。因为卷积神经网络中滑动窗口相关参数、神经层个数等都是可以人为设计的,所以可以通过改变这些参数,比较训练测试的性能,调整参数达到最优性能。

CNN训练和测试流程示意图如图5所示。

图5 CNN训练和测试流程示意图

在预处理样本中采取若干个独立的小批量样本,分别计算各自的梯度,通过这些样本均值算出梯度的无偏估计值。

1.4 实 验

1.4.1 实验环境

系统的神经网络建立使用的是高层深度学习API—Keras。CPU为8 300 H,内存大小为8 G,硬盘大小为2 T,编程环境为python(发行版本anaconda)。使用GPU类型学习框架,系统程序语言为python。

1.4.2 测试性能评价指标

故障的预测测试中,评价标准主要使用二分类模型中的F1SCORE(即F1分数)。该指标兼具分类模型的准确率、召回率。平衡F函数在信息检索、统计分析、文档分析处理方面有着广泛的应用。以下是实际值和预测值的简单介绍。正常样本(true positive,TP)指预测正确的正样本,故障样本(true negative,TN)是预测正确的负样本。而FP和FN分别是预测错误的正样本和预测错误的负样本。以上4个评价指标有如下定义:

召回率和精确率的调和平均数(用F1 Score表示):

1.4.3 结果研究

本实验显示了不同卷积窗参数下模型的训练和测试性能。使用上文说明的评价指标对各窗口size下进行对比研究,数据整理见表2。

表2 不同卷积窗间隔的性能

从测试数据可知,滑动窗口的长度不变时,随着窗口间隔变大,4项指标变低,显示出性能的降低。由此可知,对于未来的预测,更远的状态预测难度会更大。此外,保持窗口间隔不变来观察不同窗口长度下模型的性能。从实验数据可以得到结论,随着长度的递增,预测性能逐渐提高。

为了对优化后的随机梯度算法进行验证,分别测试学习率更新下和使用固定学习率的准确率。

实验中,通过检测目标函数值的波动曲线,在多次迭代中获取最佳效果的学习曲线。如果学习率设置偏大,会导致学习曲线剧烈震荡、代价函数的增大,影响系统的性能。

表3 不同学习率下的性能比较

考虑到卷积网络使用多通道卷积的特性,在卷积网络中,即使使用核翻转,也不一定能确保网络的线性运算是可互换的。本实验中,不使用核翻转,只利用卷积获取输出。比较两者使用性能(见图6),可以看出在改进后性能有所提高。

图6 不同运算函数指标对比

2 结束语

从故障数据入手,采用深度学习方法分析故障之间的潜在联系,利用告警日志来推断信息系统运行状态,并通过检测现有状态,预测未来状态参数,及时发现可能会出现的故障。实验验证了预测算法在网络系统中的有效性。在今后工作中,可以考虑使用真实网络日志进行分析,测试该模型的适应能力。利用仿真数据和真实数据,进一步测试改进算法的实用性和优越性。

猜你喜欢

日志卷积神经网络
一名老党员的工作日志
基于3D-Winograd的快速卷积算法设计及FPGA实现
扶贫日志
神经网络抑制无线通信干扰探究
从滤波器理解卷积
基于傅里叶域卷积表示的目标跟踪算法
游学日志
基于神经网络的拉矫机控制模型建立
复数神经网络在基于WiFi的室内LBS应用
基于支持向量机回归和RBF神经网络的PID整定