Peter Webb和Lucio Cetto,MathWorks
我们将介绍端到端工作流,特别强调将流式数据集成到开发环境中,以及模拟生产环境对数据科学家的好处。我们展示了物理模型如何加速系统的引导。我们将在MLOP的背景下讨论该系统。最后,我们总结了这种体系结构权衡在操作系统中的影响,因为它们影响了系统的发展
谢谢你今天来的谈话。我是彼得韦伯。我在MathWorks的工作侧重于Matlab部署和远程执行。我今天加入了Lucio Cetto,他们更加了解机器学习和数学比我更重要。
我们在这里与您分享一个用例故事。我们使用联邦机器学习为工业冷却风扇开发预测性维护应用程序。我们训练了一个模型来检测来自风扇的传感器数据流中的异常,并触发服务警报。我们在30天内就做好了生产准备。
我们如何如此迅速地将这样一个大系统整合在一起?没有什么大秘密。我们用了一个盒子,你知道,盒子里的东西都出来了。开箱即用,现成的--我们可以直接获得和使用的软件。我们需要一个物理上精确的模拟器来生成训练数据,一个流式服务来将传感器数据从球迷传送到分析引擎,以及一个度量可视化平台。我们必须配置将所有部件粘合在一起的连接器。
但我们可以专注于重要的工作。卢西奥不得不写机器学习分析。我必须创建度量仪表板。但在我们开始之前,先谈谈项目本身。
这里是总体思路。扫描工厂风扇产生的数据以生成维修警报。但我们不止一家工厂。他们每个人都有其他人没有的知识。
如果我们把来自所有工厂的所有数据结合起来,我们就会有更好的模型,但这需要额外的基础设施,一个中央服务器来培训和更新模型,以及一些将数据推送到服务器的大管道。然后,一旦模型更新,本地分类器必须暂停来获取新的模型。这种架构是可行的,但我们认为我们可以做得更好。
我们想要的是联合学习。我们用更简单、更便宜的数据存储取代了中央计算服务器。我们需要来回传送的唯一信息就是模型和它们的参数,不需要那些昂贵的数据管道。每个工厂的本地分类器仍然受益于同行积累的知识。
这给我们留下了一个问题。联合学习能够建立一个像教练一样精确的模型,并且能够访问所有的数据吗?稍后,您将看到Lucio的一些分析,帮助我们理解权衡。
我们正在使用联合学习来简化我们的基础设施。但另一个重要的用例是数据隐私。由于这些数据从未离开过拥有它的网站,所以它所包含的任何秘密都是本地的。虽然这可能对风扇传感器数据没有太大的影响,但它可能对医疗或其他类型的监管或保护数据非常重要。
说到数据,我们的训练算法需要很多很多的数据。但这不仅仅是数量的问题。如果是这样,我们只需将模型与风扇的数据连接起来,我们的数据科学家就会失业。因此,我们转而求助于一个既能提供信号又能提供标签的源——一个物理上准确的多领域模拟模型。
关于标签的那部分是值得强调的。因为模型会生成数据流,所以它知道风扇什么时候工作不正常,并将这部分信号标记给训练器。如果没有这个模型,我们就会有大量的手工分类工作要做。
我们需要对这些风扇的三个特征——电、机械、热——进行建模,并扫描每个领域中的异常情况。例如,负载异常表明外部温度意外快速升高,可能是由于风扇冷却的设备负载增加。仅对域进行独立建模是不够的,因为在真正的风扇中,它们是相互作用的。
例如,当温度升高时,风扇控制器提高了电源电压。电机运行得更快,冷却速度增加。这为我们提供了足够的准确性,在第一天准备生产。
第一天就到了。风扇将数据流传输到分类器。仪表板为操作员提供了系统的近实时视图。
但现在我们有另一个标记数据的来源。分类器正在标记现场风扇数据。我们如何利用它来改进算法?现在我们需要一个人的循环。
操作员可以定期确定分类器遗漏了一个真正的异常或发出了一个错误警报。这种情况不应该经常发生。但当它出现时,操作员可以将错误的分类信号和正确的标签发送给训练者。
当足够累计保证刷新时,教练员更新模型并将其发送回分级器。手动分类才变得可行,因为偶尔需要。机器学习算法处理大部分工作。
与此同时,我希望我已经给你了解下一节的背景。Lucio将告诉您我们的建模技术以及我们如何评估其有效性。卢西奥。
所以今天,我将扮演数据科学家的角色。对我来说,没有比拥有一个物理模型更好的方案了。这将帮助我们更好地理解我们手头的问题,这样我们就可以提出一种增量和联合学习方法,使我们能够检测和分类球迷的异常情况。
让我们从了解我们能观察到的数据开始。我们从每个系统的传感器观察到三个不同的变量。如果你愿意,我们也可以称他们为粉丝。我们观察施加在电机上的电压、风扇的角速度和温度。
出于可视化的目的,在这些示例中,我们引入了更多通常预期的异常。异常情况在第一个图的顶部作了注解。异常有三种类型。
当系统在过载条件下工作时,会检测到负载异常。也就是说,我们要求对其设计的系统进行更多的工作。当电机或风扇的机械子系统发生故障时,检测到风扇异常。最后,电源异常是一种缺陷,表现为电压下降。
现在让我放大一个小区域。这个面积大约是2米。在我们的例子中,异常表现为持续10到100秒的痕迹上的小脉冲。请注意,不同类型的异常有不同的轮廓。仅仅包含在这些痕迹中的一个信息通常不足以对不同类型的异常进行完美的分类,因为一个异常或另一个异常可以在几个信号中表现出来。
这里有一些复杂性。例如,定义速度的第二个异常的脉冲-,让我在这里向你们展示-,在噪声振幅范围内。此外,在接近终点的温度轨迹中有两个明显的脉冲。但它们并不代表任何异常。
这些是我们可以在这个问题中发现的数据分析挑战。不同位置的系统状况不同。例如,负荷比例——您可以在右侧的第二条轨迹中看到,温度随着一天的变化而变化。
各个系统是不同的。这意味着每个粉丝的年龄可能是不同的。因此,特征可能是不同的,我们衡量的东西。
此外,在几个位置观察到的异常也不同。有些情况下,在某些工厂中,我们只能观察到一种类型的异常。最后,异常检测滞后时间应为秒。因此,我们不能使用大窗口来纠正这些信号。
在讨论联合学习之前,让我们做一些假设。正如我们在之前的幻灯片中看到的,有当地的系统条件,或者依赖于工厂,或者依赖于单个风扇本身。例如,一个给定的工厂可能在一个温度可控的环境中有一组风扇。或者他们可能每周7天24小时工作,而时间却很短。
此外,每个风扇在其生命周期中可能处于不同的点。因此,我们将假设这些可变条件主要由信号趋势线的微小变化表示。为此,我们将使用剩余使用寿命建模和一些稳健的趋势分析机制。
我不会详细讨论这个问题。我们在一年前的上一次演讲中已经谈到了这一点。但是,在应用这些更正后,我将向您展示数据的效果。
在这里,我仅通过查看其中两个变量来绘制数据点。我们可以看到,在去除局部效应后,我们可以清楚地将负荷异常与正常数据分开。顺便说一下,当我们查看模型电压时,电源异常也很容易识别,这些图中没有绘制。
最重要的是,我要强调的是,关于当地情况的任何信息——这意味着强健的重新渲染和剩余使用寿命——都不会传达给其他系统,也不会传达给联邦。它将保持每个模型的本地性。
现在让我们去建模技术。为了模拟异常,我们使用一组二进制分类器来模拟给定类型的异常与正常行为。我们尝试了增量线性支持向量机和增量天真贝叶斯分类器。万博1manbetx
支持向量机采用随机梯度下降算法从一个随机超平面开始更新模型。Naive-Bayes分类器更新表示独立正态分布的汇总统计量。朴素贝叶斯分类器的优点是可以在概率框架内提供分数。然而,在我们的实验中,我们发现支持向量机对这类问题更准确。万博1manbetx
现在,回想一下,并非所有的异常都可以在每个节点上充分地代表。因此,我们只培训那些我们有足够证据的风扇的那些二元学习者。让我们制作一个关于标签的小括号。
我们假设这些是通过以下两种方式提供的。在第一种情况下,给定工厂的操作员可能会在经历异常后标记异常,将信息改造到极致。在第二种情况下,我们可以考虑一个工程团队,可能在给定的工厂条件下启动系统的操作,他们创建了一个物理计算机模型,该模型生成标签中的数据。
好的,让我们看看联合会是如何运作的。假设我们有五个节点。使用增量学习算法对每个节点进行局部数据训练。模型参数和模型权重将发送到联合体。
权重是一个值,其中包含我们在每个本地节点的每个异常所观察到的证据量。在联合会上,我们还保持全球模型参数和全球体重,由Waught和Theta Naught。我们可以简单地使用加权和计算模型参数。在支持向量机的情况下,我们计算新的水镀万博1manbetx系数和偏置。在幼稚贝叶斯的情况下,分类器我们为标准偏差和每个变量的平均值计算重量本身。
这个计算可以是同步的,也可以是异步的。也就是说,只要我们收到一个模型更新,就可以更新全局模型。或者当我们收到所有的模型更新时,我们可以批量更新。稍后,Peter将向您展示我们也可以在每个节点上计算全局更新。
有三个重要方面需要记住。联邦利用每种异常类型的证据量对模型参数进行加权。该联盟还负责协调节点报告的新型异常。这意味着,当新的异常出现时,联邦将更新已知异常的清单。
正如我已经说过的,全球联盟权重上限是一个任意值。因此,我们继续考虑节点引入的新颖性。然后将新的更新发送回联邦。我们更新了每一个,每一个粉丝的模型。
让我们看看分类模型的准确性。回想一下,在这里,我们展示了两种不同范式的组合——增量学习和联合学习。为了更好地了解精度是如何受到影响的,我们将按照以下步骤探讨精度。让我们首先来看看这个简单的线性支持向量机的精度。这是一个离线线性支持向量机。所以我们得到了所有的数据,然后马上在SVM上进行训练。
让我们看一下离线线性支持向量机模型的比较图。这里的精度是通过查看运行超过24小时的10个风扇系统的所有数据的五倍交叉验证来计算的。第一行和第一列表示正常数据,您可以看到,这显然是最常见的情况。
接下来我们有三种类型的异常。最后一行和最后一列是最不常见的情况。对我们来说,它代表了我们同时观察到两个或多个异常,这是一种非常罕见的情况。你可以注意到我们;我们只遗漏了在不重叠的情况下标记七个真实的正常异常。
让我们与增量支持向量机学习者进行比较。在这里,我们通过观察一段24小万博1manbetx时后的预测来衡量准确性。请注意,我们也忽略了很少的异常。但是,该模型会产生更多的假警报。
值得强调的是,我们不会对异常进行错误分类。这是由于建模的性质。也就是说,因为我们在正常数据和异常类型之间使用二元模型,所以错误分类实际上意味着在两个二元学习者中存在错误,这种可能性要小得多。总之,在这两种情况下,我们的假阴性率和假发现率都非常低,这是很好的。
好,现在让我们比较一下增量联合学习方法。在这种情况下,每个本地模型只使用一种类型的异常进行训练。然后将模型发送到联邦,我们使用联邦模型上的预测来测量精度。我们仍然忽略了一些真正的反常现象。
但在这些条件下,错误发现率大约增加到每200个标记异常中有一个错误。这里我要强调的是,左侧的增量模型需要访问所有数据,右侧的联邦模型不需要共享或通信任何数据。相反,我们只共享单个模型,即联合学习范式。
让我给你们看一些我们正在做的典型错误。最常见的错误是两个异常同时发生。我们实际上预料到会出现这种类型的错误,因为信息的数量不足以调整模型。
系统暂态过程中出现另一个错误。这也是意料之中的。对于这个问题,有两种可能的变通方法,我们在概念验证中没有完全实现。首先,我们可以考虑一些小的滞后。我们还可以将系统分数或后验概率纳入系统中,以便给操作员提供任何检测到的异常的重要性的概念。
要关闭此演示文稿的数据分析部分,请让我向您展示我如何将我们刚才描述的算法打包。有三个流函数。其中两个在每个节点处在本地运行。和两个更新联合模型。异常预测器接收具有观察的流,并馈送到具有异常类型和分数的输出流。
分类模型和当地条件还有其他输入。虽然第一个不需要更新,但每个模型或风扇的本地条件都需要更新。回想一下,我们为每个风扇或系统保留了本地条件。
递增学习异常分类器的函数具有类似的签名,不同之处在于它也在输入流中接收异常级别。并用更新后的参数对分类模型进行更新。最后,更新联邦模型的函数不接收任何数据、标签或本地条件。输入和输出只是分类模型和被证明的权重。
就是这样。所以现在让我回到彼得,谁会告诉我们他如何通过一些实现细节来推断整个系统并驱动我们。谢谢你。
谢谢你,卢西奥,解释了异常探测器是如何将模拟信号转换成方波的,离散状态的变化,我们需要计算。毕竟,这是我们开始的任务——扫描一组实时信号,为冷却系统操作员创建预测性维护解决方案。所以让我们来看看这个系统,以及我们如何把它放在一起,这么快一点点的细节。
该系统基本上由三个组件组成——数据源、分析引擎和度量仪表板。连接器与流媒体服务链接或交互,以管理通过此管道的消息流。这是整个系统的高级抽象视图。但在我们填写这些抽象概念之前,它不会起任何作用。
现在我们回到盒子里,拿出所有复杂的软件。Simscape的多域模型生成我们的训练数据。MATLAB生产服务器运行训练和分类算法。Redis保留模型参数和其他状态。XDB和Grafana提供了仪表板。
为了帮助你理解构建这样一个系统的权衡,我认为我们应该跟踪信号在管道中的旅程。我们将在这三个部分中每一个停下。或者我会强调我们面临的挑战和我们做出的选择。让我们来看看数据生成。
这个模型允许我改变在给定时期内发生的异常的类型和数量。这种变化增加了我可以扔给训练者的场景的多样性,并提高了模型的最终准确性。您看到的颜色表示不同的模拟域。
这是正在工作的模拟器,产生大约一小时的标记合成数据。这里有四个图表——三个风扇信号和负载异常。当它运行时,你会明白我所说的异常标签是什么意思。
负荷异常是那些你在顶部图表中看到的平方。在本节中,您将看到几个注入负载异常。外壳温度升高,风扇加速,从而消耗更多功率和补偿。
在顶部图表中,您可以看到标签,这些标签是逻辑值,在异常发生时为true,在一切正常时为false。这就是为什么异常信号是方波。这是一个电压异常。请参见底部图表中的大电压降和相应的风扇转速降低。温度略有升高,但不足以触发异常标签。
另一件需要注意的事情是,这些红色区域中的每一个大约90秒宽,因此包含大约900条消息。那些方波标签被切成许多小块。这将在以后很重要。我们的移动信号的下一站是分类器,在这里我们将看到如何设计高吞吐量的联邦。
这是我们知识共享工厂的异常检测管道。让我们看一下信号分类器。每个工厂都有许多异常检测器,每个检测器使用本地数据存储中缓存的模型。联合所需的参数存储在所有工厂都可以访问的共享数据存储中。异常探测器同时运行,每个探测器处理来自一组独特风扇的信号。
当它是时候将来自其他工厂的参数集成到本地模型时,我们想尽可能短的时间暂停每个本地检测器。事实证明,如果我们将联合纳入每个探测器,我们的数据存储器的原子读取右保证使得每个探测器可以完全独立地操作。一旦任何给定的检测器确定它已经看到足够的数据以可衡量的方式更改参数,它会从共享商店中提取新参数并更新其模型。
请注意,同时,绿色工厂向共享存储发送了更新。联邦探测器得到更新了吗?这并不重要。如果没有,它将在下一个周期得到它。重要的是其他探测器不必停止,参数数据没有损坏。
然后联邦检测器更新工厂模型和本地存储。同时,另一个检测器加载模型。同样,我们不知道它是否得到了更新前或更新后的版本,这并不重要。因为每个检测器都可以自己进行联邦,所以不需要同步阶段来实现其中的一些等等,这让我们的吞吐量很高。
我们的信号变成了方波,正朝仪表盘方向移动。我将利用信号旅程的最后阶段来强调关于时间序列数据的几个微妙的点。在设计自己的数据模型时,您至少需要考虑这些问题。虽然这两个信号看起来像原子不可分割的单位,但采样率把它们分成了几段。这就是它们通过系统传输的方式——作为多个信息。
现在你可能已经看到了这个问题。高吞吐量所需的数据并行性可以与网络延迟结合以扰乱信号。大多数消息传递服务将为您的数据提供摄取或抵达时间戳。这就是系统接受消息的时间。
但是为了将这些消息重新组合在一起,我们需要事件时间戳,它记录了信号生成的时间。因此,如果您正在生成时间序列数据,请确保您的数据模型包含事件时间。现在我们的信号在外面,通过网络传输。我们将在其中一个连接点遇到它。
我们可怜的小方波被分成了四块,而这四块已经不整齐了。但是连接器使用消息时间戳重新组装它,将其放入称为窗口的小缓冲区中。然后它将每个窗口作为单个更大的消息发出。在我们的示例中,窗口指向inflxdb。
我希望您能明白为什么在这里使用事件时间戳很重要。注意,异常信号跨越窗口边界分裂。这就是为什么信号用那些小方块装饰的原因。它们表示一个单一的、唯一的信号标识符,数据库查询使用它将窗口连接在一起。
所以最后,仪表板的绑定数据的时间一致的数据窗口。让我们来看看它到达那里会发生什么。您已经看到了风扇传感器数据的视频,所以我以为我会从分类器开始,然后向您展示仪表板。
这是开发过程中的分类器。我使用MATLAB会话作为空侧服务器,这对于生产来说太慢了,但是对于调试来说非常方便。现在我们在一个转折点停下来。我们可以查看风扇输入数据,它存储为时间表。
有一些传感器信号的值。通过生产功能通过此数据后,我们可以检查结果。如果我是一个更好的数据科学家,我会更好地判断这些是否正确。但我相信Lucio的数学,所以我相信他们是。
现在,同一个分类器正在我的8个工人本地服务器上的生产环境中运行。我主要想在这里强调吞吐量,因为每个请求包含大约1000条消息。你可以看到我们每秒处理6000到8000条消息。
这是仪表盘。这是冷却系统的概述——顶部的异常数,柱状图;在它下面,是异常的扇形分解图。在右边,是所有异常的时间轴,显示了它们发生的时间。
我们还可以深入了解每个风扇的更多细节。我是范六。您可以看到触发异常的异常计数和信号值。
现在我们已经走得更远了,你可以看到又有一些粉丝上线了。让我们看看第九扇。目前只报告了一种异常。在右边,你可以看到风扇速度图中有更多向下的峰值。
现在我回到主屏幕。你可以看到我们又积累了几百个异常。这是我们开发的Grafana仪表板的概述。
所以这就是我们所学到的。物理模型提供的培训数据给您一个头部开始。并使用现成的组件让您确实将系统迅速放在一起。
Federation使您的模型更加智能。对关注点和界面设计的谨慎分离使得在必要时更容易进行扩展。物理模型为鲁棒预测性维护分类器的快速发展提供了种子。非常感谢。
您还可以从以下列表中选择网站:
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家/地区网站未针对您所在地的访问进行优化。