Self-Attentive 基于自注意力分类的非结构化日志异常检测

原文:Self-Attentive Classification-Based Anomaly Detection in Unstructured Logs

理解:使用目标数据集和辅助数据集训练,使目标数据集的分数低,辅助数据集的分数高,

           达到异常检测的效果。

摘要:现有方法的局限是无法学习日志表征,日志表征可以描述正常和异常日志间的语义区别,这样很难表述未见过的日志。本文提出Logsy方法,一种基于分类的方法学习日志表征以区别系统中的正常日志和辅助日志数据集中的异常样本。本文认为辅助数据集能够提供充足信息以提升正常日志的表征,也可以提供多样的正则化以减少过拟合和增进泛化能力。本文提出使用基于注意力的编码器模型和新的球形损失函数。这样可以学习压缩的日志表征,捕获正常和异常日志内在的不同。

介绍:异常检测可认为是数据挖掘任务,找到观测数据集中与期望行为不符的数据。日志信息是开发者自创的文本结构。常用的异常检测方法是一分类,目标是学习一个模型,使模型可以描述正常系统行为,通常假定大多数未标记训练数据为非异常的,而异常是在学习范围之外的样本。之前的方法由于不完美的日志向量表征会产生错误的预测结果。例如学习的指标序列不能正确的分类新出现的日志信息,而预训练的词向量的领域语言和电脑系统使用的语言有本质区别。为部分缓解这些限制,一个可能的办法是合从操作者合并更多标注数据,持续学习。这样扔然需要频繁周期性重新练,升级,消耗专家知识标注数据,无法解决对未知日志的泛化处理问题。本文训练一个神经网络学习日志向量表征以区分来自目标系统的正常日志和辅助数据的日志。辅助数据帮助学习正常日志更好的表征同时正则化减少过拟合。可以更好的泛化未知日志。本文提出使用球形学习目标以提升模型学习压缩正常日志向量表征的能力。这样正常样本就集中压缩向量表征在球的中心。此方法还可以直接日志向量转换,提升前述方法的性能。此外可以使操作者纠正错误分类的样本,用于模型重训练。

本文贡献

1. 使用自注意力和辅助数据用于日志异常检测分类方法。

2. 更新目标函数,使用球边界以压缩数据表征和基于距离的异常分数。

3. 通过三个实际异常检测数据评估此方法。

4. 在其他实验集中检验此方法。

5. 提供了此方法的开源接口

不同于之前的方法,本文在异常分布中增加了领域偏执以提升检测,使用辅助数据达到这个目的。

基于分类的日志异常检测

异常检测也可视为密度水平评估,可作为二分类问题,在异常分布上的偏置对提升检测效果很必要。辅助数据的使用增加了额外价值,同时保持了正常数据的信息。

问题描述

D 为目标系统训练日志,xi代表一条日志,有 r 个单词构成,使用 d 维向量表示,label yi 为 0,正例;A 为辅助数据,数量为 m,label 为 1,负例;通过神经网络将输入映射成向量表征,L 代表一个神经网络,将网络输出结果映射为异常分数。任务是学习神经网络的参数 θ,测试时将输入的日志转换为向量获得异常分数。

基于分类目标的自注意力机制异常检测

日志可被定义为临时有序的非结构文本信息序列。

Token是每条日志最小的不可分实体。

r 代表分词后的日志 x,分词就是一个转换函数,将日志 x 转为分词序列 r 。

训练过程中不使用目标系统日志的异常数据。

Logsy方法由两个部分组织,日志分词和神经网络模型。

本文方法流程图:

分词转换原始日志为词序列;

使用NLTK库处理,

首先过滤HTTP和文件路径;

大写转小写,去除ASCII码;

移除含有数字的token,移除停用词;

在日志序列前添加 "[EMBEDDING]" token;

添加此token可以使模型在向量表征中汇总日志上下文。

每条日志的token组成词典,大小为 V,每个token 使用 V - 1 维数据表示;此方法的优势是不需要做日志解析。

Logsy 有两种操作模式,离线和在线。

离线阶段,日志用于调整所有模型参数。

在线阶段,每条日志通过保存的模型,产生对应的日志向量表征 z 和异常分数。

模型在输入token序列上使用两种操作:token向量和位置编码

使用 Transformer 模型的编码器和多头自注意力机制。

编码器输出,有 ri 个转义向量表征,共有 d 个维度。

d 维同样是模型所有层和词向量的大小。

将 token 随机初始化为数值向量 x,在训练过程中根据上下文调整语义。

基于注意力机制的模型不包含任何输入顺序的概念,

因此编码时需要加入输入日志的位置信息。

位置向量转换公式:

 使用向量 n 表征一个token的相对位置关系;

k 取值从 0 到 d - 1,是向量 n 中每个元素的的序号;

j 取值从 1 到 ri,是每个 token 的位置序号;

在上面的等式中,参数 k 描述向量 n 中值之间的指数关系。

通过下面的公式合并日志标识向量公式:

L代表attention head数量,w = d / L;d mod L = 0。

Q,K,V是矩阵,对应上图中的query,key和value。

 X’为输入,W的shape 为 M * w,

除以根号w是为了稳定斜率;使用softmax函数获得结果,再和V值点乘

X’’是X’’l(m * d)合并得到的。

根据self-attention的图示,输入标识矩阵X’与其注意力转换 X’’ 有残差联系,后面是正则层,通过解决不同在学习中遇到的问题增进模型性能,如梯度消失和样本点变化。

原始的输入通过注意力转换公式 转化了。

编码器最后是前馈线性层和relu激活函数。

EMBEDDING 在预处理时被填充在每条日志序列前面,也就是返回向量的第一个位置,这个向量是日志向量,用于目标函数和日志信息向量,代表了日志信息的上下文

目标函数

为更好的区分正常日志和异常日志,本文提出了新的损失函数—球形损失函数;根据之前的假设:正常日志数据通常集中且距离较近;用放射分类损失形成对正常数据的球形决策区域。

为获得损失值,开始使用标准二项交叉熵。

使用编码器转换目标正常日志和辅助数据日志为向量形式,

使用高斯径向基函数压缩日志信息,

将高斯径向基函数带入二项交叉熵损失函数:

径向基函数径向基函数是一个取值仅依赖离原点距离的实值函数,即Φ(x) = Φ(‖x‖),c点称为中心点,即Φ(x,c)= Φ(‖x-c‖)。满足Φ(x) = Φ(‖x‖)特性的函数Φ都叫做径向基函数,一般使用欧氏距离(欧式径向基函数)。

高斯径向基函数: r = ||x - xi||,φ(r) = exp((-θ * r)^2)

使用径向基函数替换原来sigmoid中二分类的交叉熵函数,以确保正常样本可以被压缩在球心 c = 0 附近。对于正常样本,损失函数hi最小化到 c 的距离。在训练优化是,c 可以是任意常数值。

这样的球形分类器在映射输入到输出一个常向量时可能会倾向于学习到很小的解;但是此处提出的损失函数不会找到很小的解,因为等式中第二部分代表辅助数据会或异常数据,yi=1,第二部分会是一个在限制范围内的无线数,起到正则和防止学到的 c 值很小。

将正常样本压缩到c = 0的球心;对于正常样本,损失函数会最小化距离c;这样上式左边的值会降低,右边的值对异常日志会变大;

c 是一个常量,与优化无关。使用日志向量到c 的距离作为异常分数。

计算的分数 A(xi) 大于阈值,则样本为异常。

最为额外选项,Logsy 允许从目标系统中合并有标签的数据。损失函数中第二部分可用于辅助数据,也可以使用标注的异常数据,Logsy 也可用于获取日志数字表征。

上图展示了一个低维度理想的日志表征的样子

训练时要确保没有目标系统未标注样本进入辅助数据。

无异常目标系统样本是目标数据集,正例是异常日志。

Logsy处理数据:每条日志信息变为长度为50 的标识序列,Logsy有两层transformer 编码器。词被嵌入16个神经元,得到相同大小的向量表示;通过添加损失函数的权重平衡正常和异常日志间数量的不平衡。

DeepLog使用日志模板序号学习异常和正常日志的模式,忽略了日志的语义。但是不同模板由不同序号但可能有相同语义,这会导致假正例的产生。

增加不同辅助数据可以提升性能。

在 Logsy 中增加少量的标注异常日志可以显著增进性能。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值