深度学习异常检测_深度学习用来做日志异常检测

深度学习异常检测_深度学习用来做日志异常检测_第1张图片

在日常运营中,日志作为记录系统状况最重要的信息,是我们需要非常关注的一部分内容。那么如何来对日志的异常进行检测,并且能够保证较高的效果呢。今天来聊聊用深度学习算法进行日志异常检测。

以下基础知识部分的内容,主要来源于李宏毅老师的课程。有兴趣的可以去看李老师的课程哦

https://www.bilibili.com/video/BV1JE411g7XF/?p=20&t=673

一、循环神经网络(Recurrent Neural Network,RNN)

循环神经网络是一种用于处理序列数据的神经网络。相比一般的神经网络来说,它能够处理序列变化的数据。

比如在进行“槽位填充”工作时,同样的输入,会因为上文的内容得到不同的结果。这时候就可以利用RNN了。

深度学习异常检测_深度学习用来做日志异常检测_第2张图片

如下图所示,跟传统的网络不同,我们可以认为RNN的输入除了传统定义的x以外,还有一个h,其中h是存储的是序列上一个值的结果。

深度学习异常检测_深度学习用来做日志异常检测_第3张图片

如果我们是将上一个hidden layer的值传给下一个hidden layer,我们叫做Elman Network。

如果我们是将序列上一个的output值传给下一个hidden layer,我们叫做Jordan Network。

在实际的应用中,由于output会比hidden layer更加稳定,所以Jordan Network的效果往往会更好。

深度学习异常检测_深度学习用来做日志异常检测_第4张图片

深度学习异常检测_深度学习用来做日志异常检测_第5张图片

上面介绍的RNN都是通过前面的序列影响后面的,如果在实际过程中,我们还需要通过后面的序列影响前面的序列,这时候可以运用双向RNN。

到目前为止,我们介绍的神经网络,可以叫做simple RNN。之所以simple,是因为它的记忆非常短期,第一个隐层的存储的内容在往后传递的时候,影响是逐渐减弱的,也可以理解为simpleRNN的记忆是非常短期的,很快就给改写了。
同时,simple RNN在训练的过程中,也会面临梯度消失问题。
二、LSTM(Long short-term memory)

LSTM中引入了三个门:input gate、output gate、forget gate。

遗忘门(forget gate)
它决定了上一时刻的单元状态 c_t-1 有多少保留到当前时刻 c_t

输入门(input gate)
它决定了当前时刻网络的输入 x_t 有多少保存到单元状态 c_t

输出门(output gate)
控制单元状态 c_t 有多少输出到 LSTM 的当前输出值 h_t

因此,LSTM有4个输入、1个输出:

输入:
1)input,想要被存到memory中的值
2)操控input gate的讯号
3)操控output gate的讯号
4)操控forget gate的讯号
输出:
1)output,输入memory的内容到其他的隐层

LSTM门的引入,通过门控状态来控制传输状态,记住需要长时间记忆的,忘记不重要的信息;而不像普通的RNN那样只能够仅有一种记忆叠加方式。对很多需要“长期记忆”的任务来说,尤其好用。

但也因为引入了很多内容,导致参数变多,也使得训练难度加大了很多。

三、用LSTM来对日志进行异常检测

1)假设系统中产生的日志为序列

,用此部分序列作为训练集合。

2)我们设定一个维度为t。也就是说我们会用

的序列去预测

将训练集划分为属性和类标。

数据1:属性:

...
,类标

数据2:属性

...
,类标

...

将训练数据输入LSTM模型中,训练出模型;

3)对于新的日志序列,用前面t维的数据去预测t+1维,输出预测值以及概率。如果预测值最大的k个(参数,可根据日志情况定义)包含实际的日志,那么认为此时日志正常,否则认为为异常。

具体可以参考论文:

DeepLog: Anomaly Detection and Diagnosis from System Logs through Deep Learning

Min Du, Feifei Li, Guineng Zheng, and Vivek Srikumar

https://www.cs.utah.edu/~lifeifei/papers/deeplog.pdf

你可能感兴趣的:(深度学习异常检测)