用于异常检测的递归神经网络

问题描述 投票:2回答:1

我正在实施一个异常检测系统,该系统将用于不同的时间序列(每15分钟一次观察,总共5个月)。所有这些时间序列都有一个共同的模式:在工作时间内高水平,否则低水平。

许多论文中提出的想法如下:建立一个模型来预测未来的价值,并根据残差计算一个异常分数。

到目前为止我有什么

我使用LSTM来预测前一个96(观察1天)的下一个时间步长,然后我将异常分数计算为残差来自通过验证测试获得的残差拟合的两个正态分布之一的可能性。我使用两种不同的发行版,一种用于工作时间,一种用于非工作时间。

该模型可以很好地检测点异常,例如突然下降和峰值,但例如在假日期间失败。

如果假期是在一周内,我希望我的模型可以检测到更多的异常情况,因为这是正常工作日的一种不寻常的日常模式。但预测只是遵循先前的观察。

我的解决方案

使用第二个更轻量级的模型(基于时间序列分解),该模型使用每日聚合而不是15分钟聚合来检测每日异常。

这个问题

这两种模型的组合允许我同时具有两种异常并且它非常有效,但我的想法是仅使用一种模型,因为我期望LSTM能够“学习”每周模式。相反,它严格遵循前面的时间步骤,而不考虑它是一个工作小时,水平应该更高。我试图在输入中添加外生变量(一天中的小时,一周中的一天),添加图层和单元格数,但情况并没有那么好。

任何考虑都表示赞赏。谢谢

python lstm prediction rnn anomaly-detection
1个回答
2
投票

关于您当前方法的说明

使用MSE进行训练相当于在具有固定方差的高斯下优化数据的可能性,并使用模型给出的均值。所以你已经在训练一个自动编码器,尽管你没有这样做。

关于你做的事情

  1. 你没有给LSTM一个机会 由于您仅提供过去24小时的数据,因此LSTM无法学习每周模式。它最多可以知道该值应该与之前24小时相似(尽管不太可能,请参见下一点) - 然后用Fri-Sat和Sun-Mon数据打破它。从LSTM的角度来看,您的假期“异常”看起来与您在培训期间提供的周末数据非常相似。 因此,您首先需要在学习期间提供更长的上下文(我假设您在测试时间内执行隐藏状态)。
  2. 即使你给了它一个机会,它也不在乎 假设您的数据确实遵循一个简单的模式 - 在工作时间和仅在工作时间内的高值,加上一些较小规模的变化 - LSTM对大多数数据点都不需要任何长期知识。考虑到我的所有人类想象力,我只能想象LSTM在工作时间开始时受益于长期依赖性,因此只需要96个样本中的一个或两个样本。 因此,即使这些点的损失值希望反向传播> 7 * 96时间步以了解您的每周模式,也有7 * 95其他损失条款可能会阻止LSTM偏离当前的局部最优值。 因此,可以帮助在工作时间开始时对样品进行更多的加权,使得相应的损失实际上可以影响来自远史的表示。
  3. 你的解决方案是一件好事 在单个模型中难以对多个尺度的序列进行建模。即使你作为人类,也需要“缩小”以判断更长的趋势 - 这就是为什么所有华尔街人都有月/周/日/小时/ ...图表来观察他们的股票价格。这种多尺度建模对于RNN来说尤其困难,因为它需要始终以相同的权重处理所有信息。 如果您真的希望模型能够全面学习,那么使用某种时间卷积的深度前馈架构可能会取得更大的成功,例如。 TDNNsResidual Memory Networks(免责声明:我是其中一位作者。),或者最近的一个架构 - 统治它们 - 所有,WaveNet。由于这些在较长时间上下文中跳过连接并在不同级别应用不同的转换,因此它们有更好的机会发现和利用这种意外的长期依赖。 在Keras中存在WaveNet的实现,例如在GitHub上。 12。我没有和他们一起玩(我前段时间实际上离开了Keras),但尤其是。第二个似乎很容易,与AtrousConvolution1D。 如果你想留在RNN,Clockwork RNN可能是适合你需求的模型。

关于您可能需要考虑的问题

  • 那么有两种数据分布吗? 这个有点哲学。您当前的方法表明您非常坚信有两种不同的设置:工作时间和其他设置。你甚至可以根据它改变模型的一部分(高斯)。 那么也许您的数据实际上来自两个分布,因此您应该训练两个模型并在它们之间进行适当的切换? 鉴于你告诉我们的内容,我实际上会选择这个(具有理论上合理的系统)。你不能指望你的LSTM知道12月25日的价值会很低。或者有一个截止日期,这个周末纯粹是工作时间。
  • 或者有两种异常定义? 更多的哲学观点。也许您个人认为有两种不同类型的异常: 奇怪的时间轨迹,意外的峰值,振荡,以及您域中不寻常的任何事物。你的LSTM应该已经处理好了。 然后,有不同的异常概念:在某些时间间隔内某些界限的价值。也许从时间到价值的简单线性回归/小MLP会在这里做到吗?
  • 让NN完成所有工作 目前,您通过两个步骤有效地为数量分布建模:首先,LSTM提供平均值。其次,您提供差异。 你可以改为让你的NN(连同2个仿射变换)通过产生它的均值和方差直接为你提供完整的高斯;与Variational AutoEncoders(https://arxiv.org/pdf/1312.6114.pdf,附录C.2)非常相似。然后,您需要直接优化NN分布下的下一个样本的可能性,而不仅仅是样本和NN输出之间的MSE。 这将允许您的模型告诉您何时对以下值非常严格以及何时“任何”样本都可以。 请注意,您可以进一步采用此方法,让您的NN产生“任何”合适的分布。例如。如果您的数据存在于 - /可以明智地转换为有限的域,您可以尝试通过在输出上具有Softmax来在空间上产生分类分布,就像WaveNet一样(https://arxiv.org/pdf/1609.03499.pdf,第2.2节)。
© www.soinside.com 2019 - 2024. All rights reserved.