工程师异常检测简介“,
布莱恩•道格拉斯
异常检测是识别与预期行为不同的事件或模式的过程。这对于预测性维护等应用程序很重要,但仅通过检查很难实现。用于异常检测的机器学习和深度学习(AI)技术可以在时间序列或图像数据中发现异常,否则很难发现这些异常。了解如何以及为什么应用异常检测算法来识别硬件传感器数据中的异常。
其中一张图片和另一张不一样。你能发现吗?这很简单。那么在时间序列数据中呢?这些数据流中哪一个是特别的?好的,也很简单。但是这些图像呢?还是这些时间序列?你能分辨出哪些是预期行为,哪些是异常行为吗?仅通过检查就很难识别与预期行为不同的事件或模式。 And as I will show you later in this video with a demonstration, it’s especially difficult to find very subtle changes in the behavior of hardware. This is where anomaly detection can be beneficial.
异常是对预期行为的偏差,异常检测算法试图找到这些偏差。现在,偏差并不一定意味着发生了错误,或者某个东西坏了或没有按照其规范执行。这只是一个简单的差异,理解这些差异何时出现在你的数据中会非常有帮助。我们来谈谈这个。我是Brian,欢迎来到MATLAB技术讲座。
异常检测在许多应用中都很有用,包括寻找金融交易中的欺诈,检查制造生产线中的缺陷,以及在视频监控画面中寻找不寻常的运动。然而,在这个视频中,我想进一步扩展的是如何使用异常检测来寻找预测性维护应用程序中容易实现的目标。在预测性维护中,一种算法在机器中寻找特定的故障趋势,并试图估计出故障前还剩多少时间。这个估计将帮助您确定何时安排维护,以及系统的哪些部分需要维护。
预测性维护的缺点是,它通常需要大量的历史数据来训练算法预测故障。也就是说,我们需要了解过去发生过故障的类似机器的故障情况。我们不希望机器出故障,显然会竭尽全力防止故障,因此一些故障发生的频率如此之低,以至于你可能没有足够的数据来成功地学会对其进行分类。
另一方面,异常检测不是寻找故障,而是寻找标称系统的偏差。为了检测系统的行为何时与预期不同,无论出于什么原因,你只需要正常行为的数据,这通常是很容易得到的因为希望你的系统大部分时间都正常运行。
这使得异常检测比完整的预测性维护算法更容易设置。而且,如果您最终确实希望建立预测性维护,那么运行异常检测仍然是有益的,因为这是标记可能的故障数据的好方法,您可以将其用于预测性维护培训。
好了,如果我已经让你相信异常检测是值得的,现在让我们谈谈它是如何工作的。我将保持它的通用性因为有很多不同的方法来处理异常检测算法。例如,您可以在特定的度量上设置一个阈值,并检查是否曾经超过这个阈值。阈值法是一种非常简单和直接的方法,特别是对于单变量数据。对于需要跨多个变量查找的异常,或具有多种类型特征的异常,则可能需要一些更健壮的东西。例如,可以使用单类支持向量机、隔离林或自动编码器等机器学习方法。
它们都有相同的基本结构。在某种程度上,他们使用预期行为的数据来学习模型,然后使用该模型来确定观察到的行为是否超出模型认为的正常范围。
对于单类支持向量机,模型是一个超平面,使预期行为和意外行为之间的距离最大化。对于隔离森林,模型是将每个观察结果隔离到树叶中的树。对观察结果进行分离的决策越多,它成为异常的可能性就越小。在自动编码器中,模型是一个深度神经网络,经过训练可以重建输入数据。它在重建方面做得越好,预期得到的数据就越可能。
除了这些算法,还有更多的算法,但我只是想让你们了解,建模预期行为的不同方法是如何帮助你们确定异常情况何时发生的。
好了,在这一点上,我认为如果我们能用一些真正的硬件来观察其中一个算法的运行,可能会更容易理解异常检测。对于本例,我使用Quanser的QUBE-Servo 2。这是一个旋转倒立摆我用一个反馈控制器控制它它试图保持红色臂直立同时也遵循银色臂的参考角度。参考只是一个来回踱步的方波,来回踱步,一遍又一遍。
现在,我使用4个测量值来控制系统,但我只记录其中的两个测量值:电机电压(伏特)和红色摆的垂直角度(度)。这是我将用于异常检测的唯一两个。现在,你可以看到,在大多数情况下,电机电压很低,摆角接近零度,除了当参考步进到一个新的位置,然后电压和角度都轻微增加,以遵循参考,然后回落。
这是名义上的硬件行为,因为我知道它是我设计的功能。现在我想我不知道这个系统的每一种故障类型所以我不明确地检查某些故障,我只检查是否有任何异常发生。所以,异常检测的第一步是以某种方式定义这个名义行为,这样我就可以确定行为是否以任何方式偏离了它。
对于本例,我将使用一个自动编码器来建模标称行为。就像我之前说的,自动编码器是一种深度神经网络它试图降低输入数据的维数。这意味着它获取高维的输入数据,用更少的信息表示,将其编码到更低维的数据中,然后再次解码,以重建原始数据。
如果数据是由低维度的行为——比如钟摆的可预测的动态,那么自动编码器将在编码过程中捕获这些动态,并基本上忽略其他东西,如传感器噪声,因为它将需要更多的维度来完美地重建这些随机运动。因此,如果我们根据这个标称行为训练自动编码器,我们将期望重构数据匹配钟摆的一般行为,但忽略更多的高频噪声和其他运动。
我们来做一下。我找到了一个MATLAB的例子叫做时间序列异常检测使用深度学习,它使用一个时间序列数据的自动编码器,这正是我想做的。因此,在大多数情况下,我都遵循这个示例,并针对我的特定问题对其稍加调整。主要的区别是,我只有两个数据通道,而不是三个数据通道:电机电压和摆角。
我喜欢这个例子的原因是它直接在原始数据上训练自动编码器这是我想首先尝试的。异常通常很难在原始数据中检测到,即使对于机器学习来说也是如此,因为原始数据可能具有高维数,因此算法需要自己学习如何将所有信息缩小到表明正常行为的模式。另一方面,我可以做一点特征工程,对数据进行预处理,以这种方式突出我认为最有可能表明异常的特征,然后机器学习算法只需要使用这些特定的特征进行学习。同样,我将在这个例子中尝试原始数据方法,看看它是如何工作的,然而,派生特征方法在实际问题中非常流行。
好的,我从我的硬件中收集了10分钟的名义数据,就像这个例子一样,我把它分成了训练数据和验证数据。我保留了自动编码器的体系结构,与示例以及训练选项完全相同,然后用trainNetwork MATLAB函数训练这个网络。总的来说,它花了一分钟左右的时间运行。
现在,我有了一个可以重构名义输入数据的网络,我可以使用预测函数在新的输入数据上运行该模型。所以,预测函数输出是网络试图重建输入数据,如果我们回到硬件的实时运行,这就是我们在这里看到的。
蓝线是经过训练的自动编码器给出这些输入的重构数据。第三张图将原始数据和重构数据绘制在同一张图上这样我们就能看到网络是如何很好地捕捉到这个系统的基本动态。从视觉上看,它似乎做得相当不错。然而,我们可以通过观察两个信号之间的平均绝对误差来量化它做得有多好。我看了4秒的原始数据和重构数据,计算了平均绝对误差,并显示在这里。
请注意,当钟摆静止时,误差非常低,小于0.1,而当它执行快速动态机动时,误差增加了一点,约为0.18。这告诉我自动编码器可能没有完美地捕捉到系统的标称动态否则我会期望在两种情况下的平均误差是一样的,但也许它已经足够好了。我们很快就会知道了。
这条红线是自动编码器在重新创建标称数据时产生的最大误差。有了这条红线作为阈值,我们就有了检查异常的方法。
我们可以假设,只要系统的行为是名义上的,自动编码器网络将能够重建数据到这个错误阈值。然而,如果系统中突然出现了新的动态,或者系统中出现了新的外部影响,那么我们预计网络将无法重建该数据,因为它没有在此基础上进行训练,因此,误差将大于这个阈值。这样一来,要检测出后续的异常,我们只需要观察这个误差项,并将其与阈值进行比较。
我们来试一下。我让钟摆名义上运行,正如你所看到的,误差低于阈值。不过,让我来扰乱一下钟摆。现在,即使控制器能够补偿干扰,手臂保持直立,自动编码器网络无法重建那些奇怪的动态,误差跳到了阈值以上,表明异常。
现在,用我的手指戳它是一个非常明显的干扰,但关于异常检测的好处是,异常本身对人来说是非常微妙的,但仍然通过网络产生比名义系统更多的错误。举个例子,看看当我用这根绳子给摆臂增加少量的摩擦力时会发生什么。这种特殊的异常现象在以马达为基础的系统中非常常见。轴承阻力通常会随着时间的推移而增加,你希望能够检测到这种增加并标记为进一步的行动。如你所见,不需要太大的偏差就能触发检测。摆角和电机电压看起来变化不大,但这种附加阻力产生的信号是自动编码器网络无法重构的。
好了,最后,我想向你们展示这个算法也可以检测到其他类型的异常比如电机负载的变化。我要通过在钟摆的顶端加入少量的位移来产生这个误差。注意,当我第一次把它们扔进去时,它们产生的轻微的力绊倒了探测器,到目前为止还不错,但我们也应该能够捕捉到当钟摆摆动到另一边时的动态变化。
哈,它抓住了它!这可能对控制器来说变化太大了。
好了,我不打算在这个系统中添加任何新的异常。希望这个演示向您展示了异常检测如何从标称系统中找到任何偏差,而不是寻找特定的偏差。
最酷的是这个算法可以像我现在做的一样实时运行,或者定期对保存的数据运行以检查历史异常。此外,异常检测还可以与更大的设计相结合,比如计算一周内异常发生的次数,操作人员只需查看计数器的增长速度,就可以决定何时进行干预。它真的很酷,而且使用的次数是无限的,所以我希望你自己去尝试一下。我在这个视频中使用的所有参考资料和资源都链接在下面。
好了,这节课就讲到这里。如果你不想错过未来Tech Talk的其他视频,不要忘记订阅这个频道。你们可以看看我的频道,控制系统讲座,我也会在那里介绍更多的控制理论主题。感谢收看,我们下期见。
相关产品2022世界杯八强谁会赢?
了解更多
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。