Lifelong Anomaly Detection Through Unlearning 论文翻译

本文探讨了在系统数据不断生成的背景下,如何通过深度学习进行终身异常检测,提出了unlearning框架来处理新知识的引入和模型更新。文章解决了爆炸性损失和灾难性遗忘问题,并展示了在实际任务中的效果,显著减少了假阳性和假阴性。
摘要由CSDN通过智能技术生成

原论文链接:Lifelong Anomaly Detection Through Unlearning | Proceedings of the 2019 ACM SIGSAC Conference on Computer and Communications Security

摘要:异常检测是保证系统安全可靠的关键。在不断生成的系统数据的支持下,人们发现深度学习既有效又灵活,它能够在没有太多领域知识的情况下提取模式。现有的异常检测研究主要集中在一种被称为“zero-positive”的情况下,这意味着检测模型只针对正常(即负)数据进行训练。在实际应用场景中,系统部署后可能会提供额外的人工检查的阳性数据。我们把这种情况称为终身异常检测。然而,我们发现现有的方法并不容易采用这些新知识来提高系统性能。

在这项工作中,我们首次探索了终身异常检测问题,并提出了新的方法来处理相应的挑战。特别地,我们提出了一个称为unlearning的框架,它可以在标记假阴性(或假阳性)时有效地纠正模型。为此,我们开发了几种新技术来解决两种挑战,即爆炸性损失和灾难性遗忘。此外,我们抽象了一个基于生成模型的理论框架。在此框架下,我们的学习方法可以以一种通用的方式呈现,应用于大多数基于“zero-positive”深度学习的异常检测算法,将其转化为相应的终身异常检测解决方案。

    我们使用两个最先进的“zero-positive”深度学习异常检测架构和三个现实世界的任务来评估我们的方法。结果表明,该方法能够通过遗忘显著减少假阳性和假阴性的数量。

CCS概念:安全和隐私->入侵/异常检测、威胁缓解

        信息系统->在线分析过程

        计算方法论->在线学习设置

引言:由于复杂的计算机系统存在不可避免的漏洞和不断尝试的复杂攻击,异常检测是安全不可或缺的一步[4]。现代系统不断产生反映系统状态的系统数据,这些数据是实时异常检测的重要数据源。

    深度学习因其从海量数据中提取模式的能力而成为一种有效的方法[8,23]。例如,一种朴素的方法是同时使用正常和异常数据训练一个监督模型,并使用训练好的模型在检测中分配标签。更理想的方法是训练一个可以检测不可预见的异常(如零日攻击)的模型[42]。也就是说,深度学习模型能够检测到在训练过程中不知道的异常类型。为了实现这一目标,不需要任何异常数据进行检测的异常检测方法是首选的,这种方法被称为“zero-positive”异常检测[23]。

    现今已经提出了几个方案来处理这个问题。例如,基于lstm的异常检测模型[8,25]可以在正常的时间序列数据上进行训练来进行预测,并在实际数据点偏离预测点时将其检测为异常。另一个例子是,基于自编码器的异常检测模型[15,47]被提出用于检测对时间不敏感的数据上的异常,即每个数据点彼此独立

    zero-positive异常检测的一个问题是,它可能并不总是泛化。也就是说,在测试期间观察到的异常事件,我们称之为假阴性,可以归类为正常。在实践中,管理员可以手动检查小部分事件并提供标签。然而,基于深度学习的方法如何有效地使用这些新的标记数据更新模型仍然是开放的。例如,在网络流量异常检测应用程序中,新工作负载的出现可能需要模型学习新模式,并以受控的方式选择性地忘记旧模式。此外,如果系统管理员提供了关于误报(以及误报)的反馈,则可能还需要以经济有效的方式更新模型,以更好地实现其目标。

    在本文中,我们将重点研究终身异常检测问题来填补这一空白。要实现这一目标还面临着一些挑战。首先,到目前为止,还没有机制使基于深度学习的异常检测模型记住异常实例。为了使模型记住一个正常的实例x,大多数现有的方法都学习一个模型来预测Pr(x),并使这个概率足够高以供考虑。

    因此,为了使模型记住x是异常的,我们需要减小预测概率Pr(x)。这相当于让模型

忘记x是一个正常实例。基于这个想法,我们开发了一种称为unlearn的算法,使模型忘记假阴性实例是正常的。请注意,Cao等人之前已经提出了“unlearning”的概念[3],与我们的工作不同,它侧重于遗忘训练数据集中存在的样本。

    其次,简单地降低Pr(x)的概率也可能使模型将其他正常事件预测为异常。我们把这个问题称为爆炸损失,其中损失一项表示为- logPr(x)。当Pr(x)接近于零时,损失可以任意大。最大化它将导致深度学习模型变得武断,并且不能很好地服务于异常检测任务。在学习框架下,我们开发了边界损失和学习率收缩技术来缓解这一问题。

    第三,由于终身异常检测问题将以模型将随着时间不断更新的方式运行,它可能会忘记以前观察到的示例。这个问题在深度学习文献中通常被称为灾难性遗忘[12]。这个问题的一个简单的解决方案是用所有之前观察到的例子重新训练模型。然而,这种简单的方法并不实用,因为随着时间的推移,数据集将不断增长,重新训练的成本很快就会变得太高。为了解决这个问题,我们开发了一种增量学习方法来利用一个保持重要的记忆集,使模型不会忘记重要的过去的例子。

    第四,我们希望我们的方法可以通用于现有的基于深度学习的异常检测算法,这样我们就可以利用以前的工作。我们观察到,大多数现有的方法都可以被一类称为生成模型的机器学习算法捕获。因此,我们在一个理论框架中抽象了以前的方法。通过利用这个框架,我们可以很容易地以一种通用的方式呈现我们的学习算法,以确保它可以应用于任意基于深度学习的异常检测算法。

我们将我们的主要贡献总结如下:

    ①我们是第一个研究基于深度学习的终身学习异常检测问题的人。为此,我们提出了一种可应用于任何基于深度学习的zero-positive异常检测方法的去学习框架,使其成为一种终身异常检测解决方案。

    ②我们提出了新的技术来解决爆炸损失和灾难性遗忘的挑战。前者是异常检测所特有的,而后者是一个通用的终身学习问题。我们希望我们的解决方案能够激发对这些问题的更多研究。

    ③作为副产品,我们抽象了一个理论框架来应用生成模型进行异常检测,这样我们的学习方法就可以以一种通用的方式呈现出来。我们希望这个框架能够为未来基于深度学习的异常检测研究提供新的思路。

    ④我们使用三个真实的异常检测数据集来评估我们的方法,即HDFS日志、雅虎网络流量和信用卡交易。我们表明,我们提出的终身学习方法可以显著减少假阳性和假阴性的数量。例如,对于HDFS日志,实验结果显示,在不同的阈值下,假阳性和假阴性分别减少了77.3%和76.6%。

    本文的其余部分组织如下。在第2节中,我们形式化了异常检测问题,并介绍了应用生成模型进行异常检测的理论框架。然后,我们提出了我们的遗忘框架和关键的技术创新,以应对第3节中的挑战。在第4节中,我们使用各种数据集和深度学习架构来评估我们提出的方法。我们将在第5节讨论我们的观察结果,并在第6节讨论相关工作。最后,我们在第7节中进行总结。

终身异常检测:在本节中,我们将首先使用实际示例解释zero-positive异常检测。然后我们将形式化这个问题,并介绍最先进的基于深度学习的方法。

    动机样例:实时收集的系统数据可以是连续值,如CPU使用率和温度,也可以是分类值,如SYSCALL和函数API调用。每个数据点可以是一个单独的值,也可以是一个向量。此外,系统状态和事件随时间而变化。收集到的数据点既可以作为独立实例进行分析,也可以作为涉及时间维度的时间序列事件进行分析。例如,事件cpu高本身可能表示异常,

或者仅当它跟随某些事件时才是异常。

    以前的工作已经广泛地探索了系统数据的异常检测,例如,在系统日志上使用LSTM模型[8]来检测执行异常,在硬件性能计数器上使用自编码器模型来检测性能问题[15]。由于很难获得异常标签,以前的工作通常通过仅对正常数据进行训练来规避这一问题,希望检测不遵循所学正常模式的不可预见的异常。但是,也有可能训练数据是有噪声的,或者在检测中出现了新的模式,这样当训练模型用于检测时,可能会出现假阳性或假阴性。

    考虑以下场景。训练数据可能包含两个实例:ssh→program→exit→CPU-high和ssh→game→exit→CPU-high。在此基础上训练的zero-positive模型可以将ssh→⋆ →exit→CPU-high学习为正常序列,其中⋆ 表示任意事件。但是,在使用此模型进行异常检测时,可能会遇到ssh→notepad→exit→CPU-high,进一步检测为正常。由于训练数据不完整,异常检测模型无法识别可疑的cpu高活动,这可能是由于未记录攻击。另一个例子,如果模型只对ssh→program→exit→CPU-high进行训练,就有可能错误地将ssh→game→exit→CPU-high检测为异常。

    在使用训练模型进行异常检测的实际场景中,系统管理员可能会报告模型未能检测到的假阴性和假阳性。在本文中,我们关注的是这种异常检测模型的终身学习问题,即如何使用报告的假阴性和假阳性来增量地更新模型。

    问题定义:在本节中,我们首先形式化zero-positive异常检测问题,并简要说明如何使用生成机器学习模型来处理此问题。

    问题定义1(异常检测模型):考虑一个事件序列xt,(1≤tT), 使得每个实例都以 1−ε(ε≥0,是一个小的常数)的概率从平稳分布D中采样。检测每个后续实例xt (t > T)是否从相同的分布中抽样。

    在定义中,事件序列x1,……xT是训练数据。分布D定义了一个实例是正常的(在分布中)还是异常的。常数ε控制着异常样本在训练数据中出现的比率。当ε = 0时,意味着训练数据根本不包含异常。

    之前关于zero-positive异常检测的工作[8,15,26]假设训练数据集只包含正常数据,即ε = 0。然而,人类标签可能偶尔会犯错误。在这项工作中,我们考虑了带有噪声数据的异常检测问题,这意味着ε >0虽然很小,但是我们不知道哪些实例是不正常的或正常。这个定义适用于大多数实际应用。

    分布假设:不同的应用程序对分布D做出不同的假设,因此可以应用不同的机器学习模型来学习该分布。通常,我们考虑两种类型的分布:时间不敏感的和时间敏感的。

    定义2.1:时间不敏感分布--时间不敏感分布D在任意时刻t的值是相互独立的。它的概率质量函数由Pr(xt)定义。

    定义2.2:时间敏感分布--时间敏感分布D在时刻t的值取决于所有过去的历史。概率质量函数定义为Pr(xt|xt-1x1)。

    终身学习:在这项工作中,我们考虑了异常检测的一种特殊情况,称为终身异常检测。在问题1的定义中,我们认为训练集上没有提供标签。从如此嘈杂的数据中学习不可避免地是不准确的。

    然而,在实际的应用场景中,从业者可以手动检查一些可疑的示例来提供它们的标签。在这项工作中,我们主要感兴趣的是我们能否在这种情况下显著提高准确性。

    问题定义2(终身异常检测):考虑一个事件序列xt,(1≤t≤T), 使得每个实例都以 1−ε(ε≥0,是一个小的常数)的概率从平稳分布D中采样。另外,我们有n对集合ti,li,

其中1≤ti≤T,li∈{-1,1}。当xti是来自分布D的采样时,li是负的;否则,li是正的。检测每个后续实例xt (t > T)是否从相同的分布中抽样。

    请注意,人工检查是一项昂贵的操作;因此,标记对的总数,即n,必须很小。注意,额外的数据很可能被部署的模型错误地标记。我们称一对ti,li,其中li = +1为假阴性;而对于li  = - 1则为假阳性以强调这一事实。虽然本文的重点是假阴性,但我们的框架是通用的,可以处理假阴性和假阳性。

    现有的基于机器学习的异常检测理论框架:在本节中,我们将介绍一个通用框架来描述使用生成模型解决问题1的基于机器学习的异常检测方法。然后,我们将解释最近使用深度学习模型进行异常检测的工作,以实现最先进的结果,并表明它们可以在通用框架中建模。最后,我们将解释如何训练模型。

    使用生成模型的异常检测:很容易看出,如果我们能够了解事件序列的分布(其概率质量函数),我们就可以应用它来轻松地检测异常。例如,给定一个时间敏感分布的新实例xt,我们可以简单地检查Pr(xt|xt-1x1) >τ,阈值τ以确定xt是否为异常。

    因此,几乎所有的异常检测算法都依赖于一类称为生成模型的机器学习模型[27]。生成模型通常考虑两类随机变量,即可观察变量X(如事件)和隐藏变量H。假设联合概率Pr(X,H)用函数(X,H)建模,用θ参数化。因此,我们可以得到X的边缘概率:

PrX=hfθ(X,H=h)   (1)

学习算法搜索一组参数θ以最大化其似然 或 优化其等效变换:

    使用这样一个模型,给定一个新的实例x(例如,时间敏感的x1xt,或者xt是时间不敏感的),我们可以根据公式1计算PrX=x,并检查他是否大于阈值τ。异常检测有多种生成模型,如高斯混合模型[48]、主成分分析[18]、长短期记忆[8]、自动编码器[31]等。

    深度学习模型:我们现在解释两种深度学习模型,即长短期记忆和自动编码器,以及在近期文献中它们如何用于异常检测。

    长短期记忆网络:LSTM[17]是一种处理序列数据的循环神经网络(RNN)。LSTM在各种基于序列的应用(如语音识别)中达到了最先进的水平[16]。

    总之,RNN为序列x1xt的前缀计算嵌入式向量ht(隐藏状态)。我们使用ht=∅x1xt)表示这种嵌入关系。RNN将映射φ建模为增量计算:ht+1 = fθ (ht, xt+1),参数化为θ。此外,RNN将条件概率Pr(xt+1|ht)建模为由ρ参数化的函数gρ(ht,xt+1)。不同的RNN模型在函数f和g的具体选择上是不同的。读者可参考[17]了解更多细节。

    为了将LSTM应用于时刻t的异常检测,我们可以计算:

其中(3)可在每个时间点t递归计算。有几种方法可以通过使用公式(4)计算的Pr(xt|xt-1x1)来检测xt是否异常。一种方法(例如,[8])是将概率与上面讨论的预先确定的阈值τ进行比较(例如参见图1)。

图1:离散事件空间上基于lstm的异常检测示例。给定历史序列C, A, B, C, LSTM计算下一个事件的概率为{D: 0.8, A: 0.2, B: 0,…},τ = 0.1%。如果下一个事件(即标记为“?”)是D或A,则其概率(80%或20%)高于阈值,因此是正常的。否则,概率为0%(因为所有概率之和为100%),该事件被检测为异常事件. 

如果事件空间是连续的,另一种方法(例如,[25])是使用该概率密度函数来预测下一个值xt(即,作为最大Pr(xt|xt-1x1));并比较xt是否偏离xt太多(例如参见图2)

图2:在连续事件空间上基于lstm的异常检测示例。假设一个网站的网络流量大致遵循正弦波的形状。LSTM模型可以学习这一趋势,并在此基础上预测下一个值。例如,给定历史序列为1.2、1.8、2. 1.8, LSTM模型可以预测1.2作为下一个数据点。为了检查真实系统生成的下一个数据点(例如,0.2)是否正常,我们可以计算该值与预测值之间的距离。如果距离大于某个阈值,我们将其检测为异常.

    LSTM的一个好处是,它可以自动学习遗忘掉序列中的非必要事件。因此,它可以有效地处理截断数据(即模型从事件序列的中间运行)和噪声数据(即训练数据中的异常)。在这项工作中,我们选择LSTM作为时间敏感分布的默认模型.

自编码器:当事件在时间上是独立的,检查xt时我们不需要考虑历史序列x1xt-1。在这个例子中,Autoencoder[14,26]是一种有效的深度学习模型。

    自编码器由一个编码器 ϕ和一个解码器φ组成;两者都是参数化函数。编码器将输入x映射到隐藏状态h =  ϕ(x),解码器将h映射到输入空间中的另一个实例x’= φ (x)。作为生成模型,联合概率Pr(x,h)可以建模为:

在(5)中,φ (ϕ(x))是输入x的自编码器的输出。如图3所示。很容易看出,我们可以检查输出和输入之间的距离,即||x−φ (ϕ(x))||2,是否小于阈值,以检测事件是否正常(即,Prob(x = x)足够大)。

图三 自编码器模型结构

    训练模型:到目前为止,我们以抽象的方式讨论了这些模型。现在,我们提供了训练模型的更多细节,以便对我们的新方法进行下面的讨论。

    为了在数学上处理事件序列,我们将每个事件编码为一个数字向量。对于具有连续值

的事件,它们可以直接作为向量的一个维。对于具有离散值的事件,我们可以使用所谓的 one-hot-encoding对它们进行编码。即给定一个值x∈1,…,N,则将其编码为N维向量v,使得x = i时vi = 1,否则vi = 0。对于具有多个离散值和连续值混合的事件空间,我们可以将它们分开转换,并将分开的向量连接成一个更大的向量。

    为了训练一个模型,我们需要解决由公式(1)定义的优化问题。它等价于最小化-logPrX。在深度学习文献中,我们通常将-logPrX的等效函数称为损失函数Lθ(X). 对于使用公式(3-4)定义的RNN模型的时间敏感场景,可以将其定义为

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值