应用HTM算法实时异常检测流分析
一、摘要
世界上的许多数据都是流式的时间序列数据,在这些数据中,异常数据在关键情况下提供了很多重要的信息。然而,检测流式数据中的异常是一项艰巨的任务,需要探测器实时处理数据,并在进行预测的同时能够学习。本文介绍一种新的基于在线序列记忆算法的异常检测技术——分层时间记忆(HTM)。
二、概述
我们将异常定义为系统行为异常且与过去行为明显不同的时间点。 根据这个定义,异常并不一定意味着问题。 改变可能是由于负面原因,例如发动机上的温度传感器上升,表明可能即将发生故障。 或者更改可能是出于积极的原因,例如新产品页面上的网页点击异常高,显示需求强劲。 无论哪种方式,数据都是不寻常的,可能需要采取行动。 异常可以是空间的,意味着该值超出了典型范围,如下图1中的第一个和第三个异常(红色的点)。它们也可以是时间的,其值不在典型范围之外,但它发生的顺序是不寻常的。 下图1中的中间异常是时间异常。
图1.该图显示了来自大型工业机器内部组件的实际温度传感器数据。 异常用红色圆圈标记。 第一个异常是计划停工。 第三个异常是灾难性的系统故障。 第二个异常,一个微妙但可观察到的行为变化,表明问题的实际发生导致最终的系统故障。
流应用中的异常检测特别具有挑战性。 检测器必须处理数据并实时输出决策,而不是通过批量文件进行多次传递。在大多数情况下,传感器流的数量很大,人类很少有机会,更不用说专家干预了。 因此,以无人监督的自动方式(例如,无需手动参数调整)操作通常是必要的。 底层系统通常是非平稳的,探测器必须不断学习和适应不断变化的统计数据,同时进行预测。本文的目的是介绍一种专为此类实时应用而设计的新型异常检测技术。 我们将展示如何使用Hierarchical Temporal Memory (HTM)网络以有原则的方式在各种条件下稳健地检测异常。
由此产生的系统是高效的,非常容忍噪声数据,不断适应数据统计的变化,并检测非常微妙的异常,同时最大限度地减少误报。 我们展示了实时金融异常检测应用程序的定性示例。 我们还报告了实时异常检测的开放基准测试的领先结果。 该算法已经商业化部署。
HTM是一种源自神经科学的机器学习算法,它模拟流数据中的空间和时间模式请见本人博客中另外论文《应用层级时空记忆模型(HTM)实现对实时异常流时序数据检测》。 HTM与序列预测中的一些现有算法相比是有利的,特别是复杂的非马尔可夫序列。 HTM不断学习系统,自动适应不断变化的统计数据,这是一种与流分析特别相关的属性。
三、使用HTM实现异常检测
典型的流应用涉及分析实时发生的连续数据流。 此类应用包含一些独特的挑战。 我们将此形式化如下。 设矢量xtxt时刻tt的实时系统的状态。 该模型接收连续的输入流:
在每个时间点 tt ,我们希望确定系统的行为是否异常。 关键挑战之一是必须 实时地进行确定,即在时间 之前并且没有任何前瞻。 在实际应用中,系统的统计数据可以动态变化。 例如,在生产数据中心,可能会随时安装软件升级,从而改变系统的行为(下图2)。 模型的任何重新训练必须在时间 t+1t+1 之前在线完成。最后,各个测量不是独立的,并且包含可以被利用的重要时间模式。

图2. Amazon EC2实例的CPU利用率(百分比)。 对计算机上运行的软件进行更改会导致CPU使用率发生变化。 持续学习对于像这样对流数据执行异常检测至关重要( 季节性或周期性的数据变化的学习能力非常重要)。
HTM是一种似乎与上述约束相匹配的学习算法。 HTM网络不断学习和模拟其输入的时空特征。 HTM已被证明可以很好地用于预测任务,但HTM网络不直接输出异常分数。为了执行异常检测,我们利用HTM中可用的两种不同的内部表示。给定输入 xtxt ,向量 a(xt)a(xt) 是表示当前输入的稀疏二进制代码。我们还利用内部状态向量 π(xt)π(xt) 表示对 a(xt+1)a(xt+1) 的预测,即对下一个输入 x(xt+1)x(xt+1) 的预测。预测向量包含关于当前序列的推断信息。特别地,给定输入将导致不同的预测,这取决于当前检测到的序列和序列内输入的当前推断位置。预测的质量取决于HTM对当前数据流建模的程度。有关这些表示的更详细说明,请参阅(Hawkins&Ahmad,2016)。 xtxt 和 a(xt)a(xt) 在每次迭代时重新计算,但不直接表示异常。 为了创建一个强大的异常检测系统,我们引入了两个额外的步骤。 我们首先从两个稀疏向量计算原始 异常分数(raw anomaly score)。 然后,我们计算一个 异常似然值(anomaly likelihood),该阈值被阈值化以确定系统是否是异常的。 图3显示了我们的算法的框图。 这两个步骤详述如下。 然后,我们将描述如何稳健地处理由多个不同模型组成的更大系统。
