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